├── .editorconfig ├── .gitattributes ├── .github └── workflows │ ├── examples_push.yml.disabled │ ├── ob_v3p0_pr.yml.disabled │ ├── ob_v3p0_push.yml.disabled │ ├── publish-context.yml.disabled │ ├── publish-json-schema.yml.disabled │ ├── publish-openapi.yml.disabled │ ├── publish_extensions_push.yml │ └── vocab.yml.disabled ├── .gitignore ├── .markdownlint.json ├── README.md ├── docs ├── context.json ├── images │ ├── OB3_ACG_DynamicClientRegistration.svg │ ├── OB3_ACG_ObtainingTokens.svg │ ├── OB3_Architecture.svg │ ├── figure01-openbadges-2.0-diagram.png │ ├── figure02-openbadges-3.0-diagram.png │ ├── figure03-skill-assertion-with-evidence.png │ ├── figure04-defined-achievement-with-skill.png │ └── ob30-concept.png ├── index.html └── ob_v3p0.html ├── extensions ├── accessibilityExtension │ ├── README.md │ ├── context-3.0.0.json │ ├── schema_achievement_credential_obv3p0.json │ ├── schema_achievement_obv3p0.json │ └── schema_profile_obv3p0.json ├── applyLinkExtension │ ├── README.md │ ├── context-3.0.0.json │ └── schema_obv3p0.json ├── assessmentExtension │ ├── v1p0 │ │ ├── AssessmentExtension2018-Data-Model-v3.png │ │ ├── context.json │ │ ├── errata.html │ │ ├── index.html │ │ └── schema.json │ └── v2p0 │ │ ├── context.json │ │ ├── errata.html │ │ ├── index.html │ │ ├── ob-assessment_v2p0.lines │ │ ├── respec-support │ │ ├── contributors.js │ │ ├── local-biblio.js │ │ └── mps-config.js │ │ └── schema.json ├── extraDescription │ ├── errata.html │ └── index.html ├── geoCoordinatesExtension │ ├── README.md │ ├── context-3.0.0.json │ ├── schema_achievement_credential_obv3p0.json │ └── schema_achievement_obv3p0.json ├── issuerAccreditationExtension │ ├── v1p0 │ │ ├── context.json │ │ ├── errata.html │ │ ├── index.html │ │ └── schema.json │ └── v2p0 │ │ ├── context.json │ │ ├── errata.html │ │ ├── index.html │ │ ├── ob-accred_v2p0.lines │ │ ├── respec-support │ │ ├── contributors.js │ │ ├── local-biblio.js │ │ └── mps-config.js │ │ └── schema.json ├── licenseExtension │ ├── README.md │ ├── context-3.0.0.json │ ├── getting-started.md │ └── schema_obv3p0.json └── originalCreatorExtension │ └── README.md ├── ob_next ├── README.md ├── dids-in-badges.md ├── roadmap.md └── use-cases.md ├── ob_v2p0 ├── 404.md ├── Gemfile ├── Publishing.md ├── README.md ├── _config.yml ├── _config │ └── rsync_exclude.txt ├── _config_production.yml ├── _includes │ ├── footer.html │ ├── footer2.html │ ├── header.html │ ├── header_sub.html │ ├── page_bottom.html │ └── page_top.html ├── _layouts │ ├── page.html │ ├── page2.html │ └── page_sub.html ├── _sass │ ├── colors.scss │ └── modules │ │ ├── masthead.scss │ │ └── note.scss ├── baking │ └── index.md ├── cert │ └── index.md ├── examples │ └── index.md ├── extensions │ ├── accessibilityExtension │ │ ├── context.json │ │ └── schema.json │ ├── applyLinkExtension │ │ ├── context.json │ │ └── schema.json │ ├── assessmentExtension │ │ ├── AssessmentExtension2018-Data-Model-v3.png │ │ ├── context.json │ │ ├── errata.html │ │ ├── index.html │ │ └── schema.json │ ├── endorsement │ │ ├── context.json │ │ ├── index.md │ │ └── schema.json │ ├── exampleExtension │ │ ├── context.json │ │ └── schema.json │ ├── extraDescription │ │ ├── context.json │ │ ├── errata.html │ │ ├── index.html │ │ └── schema.json │ ├── geoCoordinatesExtension │ │ ├── context.json │ │ └── schema.json │ ├── index.md │ ├── issuerAccreditationExtension │ │ ├── context.json │ │ ├── errata.html │ │ ├── index.html │ │ └── schema.json │ ├── licenseExtension │ │ ├── context.json │ │ ├── index.md │ │ └── schema.json │ ├── originalCreatorExtension │ │ ├── context.json │ │ └── schema.json │ └── recipientProfile │ │ ├── context.json │ │ └── schema.json ├── faq │ └── index.md ├── history │ ├── 1.1-specification.md │ ├── 1.1.md │ ├── 2.0.md │ └── index.md ├── images │ ├── badge-alliance-logo-web.png │ ├── core-badge-elements-faq.png │ ├── favicon.ico │ ├── favicon.png │ ├── imsglobal-logo.png │ ├── logo.svg │ └── openbadges-logo-dark.png ├── impl │ ├── assets │ │ └── image1.png │ └── index.md ├── index.md ├── javascripts │ └── scale.fix.js ├── package.json ├── stylesheets │ ├── imsspec2017v1p0.css │ ├── print.css │ ├── pygment_trac.css │ └── styles.scss ├── v0 │ ├── context.json │ └── schema │ │ └── assertion.json ├── v1 │ ├── context.json │ ├── legacy-v1.json │ └── schema │ │ ├── assertion.json │ │ ├── badgeclass.json │ │ ├── extension.json │ │ └── issuer.json ├── v2 │ └── context.json └── xapi │ ├── activity-profile │ ├── badgecriteria │ └── badgeimage │ ├── attachment │ └── badge │ ├── extensions │ ├── badgeassertion │ ├── badgeclass │ └── signedbadgeassertion │ ├── index.md │ ├── recipe │ └── base │ │ └── 0_0_2 │ └── verbs │ └── earned ├── ob_v2p1 ├── .editorconfig ├── LICENSE-INPROGRESS.md ├── README.md ├── contributors.js ├── images │ ├── OBC_AccessProtectedResource.svg │ ├── OBC_Architecture.svg │ ├── OBC_AuthenticationSequenceDiagram.svg │ └── OBC_DynamicClientRegistrationSequenceDiagram.svg ├── iprs.js ├── ob-abstract.md ├── ob-cert-v2p1.html ├── ob-cert-v2p1.md ├── ob-documents.md ├── ob-errata-v2p1.html ├── ob-spec-v2p1.html ├── ob-terms.md ├── ob_v2p1_schema_json.html └── schema │ ├── json │ ├── imsob_v2p1v2p1-getassertions-200-responsepayload-schemav1p0.json │ ├── imsob_v2p1v2p1-getassertions-400-401-404-405-500-responsepayload-schemav1p0.json │ ├── imsob_v2p1v2p1-getmanifest-200-responsepayload-schemav1p0.json │ ├── imsob_v2p1v2p1-getprofile-200-responsepayload-schemav1p0.json │ ├── imsob_v2p1v2p1-getprofile-400-401-404-405-500-responsepayload-schemav1p0.json │ ├── imsob_v2p1v2p1-postassertion-200-400-401-404-405-500-responsepayload-schemav1p0.json │ ├── imsob_v2p1v2p1-postassertion-requestpayload-schemav1p0.json │ ├── imsob_v2p1v2p1-postprofile-200-responsepayload-schemav1p0.json │ ├── imsob_v2p1v2p1-postprofile-400-401-404-405-responsepayload-schemav1p0.json │ ├── imsob_v2p1v2p1-postprofile-requestpayload-schemav1p0.json │ └── index.html │ ├── jsonld-context │ ├── ob_v2p1.html │ └── ob_v2p1.jsonld │ └── openapi3 │ ├── imsob_v2p1.json │ └── imsob_v2p1.yaml ├── ob_v3p0 ├── abstract.md ├── api.html ├── bestpractices.md ├── cert │ ├── abstract.md │ ├── conformance.md │ ├── displayer.md │ ├── documents.md │ ├── host.md │ ├── introduction.md │ ├── issuer.md │ ├── ob-cert-v3p0.html │ └── terms.md ├── certification.md ├── common_credentials.lines ├── context-3.0.1.json ├── context-3.0.2.json ├── context-3.0.3.json ├── context.json ├── context.md ├── datamodel.html ├── docformat.md ├── equality-and-comparison.md ├── errata │ ├── errata.md │ └── ob_err_v3p0.html ├── examples.html ├── examples │ ├── achievementAlignmentCase.html │ ├── achievementAlignmentCe.html │ ├── basicOpenBadgeCredential.html │ ├── endorsement.html │ ├── fullOpenBadge.html │ ├── skillAssertionCase.html │ └── skillAssertionCtdl.html ├── extending.md ├── gettingstarted.md ├── images │ ├── OB3_ACG_DynamicClientRegistration.svg │ ├── OB3_ACG_ObtainingTokens.svg │ ├── OB3_Architecture.svg │ ├── OB3_CCG_ObtainingTokens.svg │ ├── figure01-openbadges-2.0-diagram.png │ ├── figure02-openbadges-3.0-diagram.png │ └── ob30-concept.png ├── impl │ ├── .prettierrc.json │ ├── conformance.md │ ├── extensions.md │ ├── getting-started.md │ ├── help.md │ ├── introduction.md │ ├── linked-data-proof-clr.html │ ├── linked-data-proof-ob.html │ ├── migrating.md │ ├── ob_impl_v3p0.html │ ├── recommended-practices.md │ ├── reference-impls.md │ ├── respec-support │ │ └── contributors.js │ └── test-vectors │ │ ├── clrv2p0 │ │ ├── document-canon.txt │ │ └── proof-canon.txt │ │ └── obv3p0 │ │ ├── document-canon.txt │ │ └── proof-canon.txt ├── integrity.md ├── introduction.md ├── license.md ├── mps-config.js ├── ob_v3p0.html ├── ob_v3p0.lines ├── overview.md ├── readinglist.md ├── readme.md ├── respec-cdm-plugin.md ├── respec-support │ ├── contributors.js │ ├── iprs.js │ └── local-biblio.js ├── security.html ├── serialization.md ├── usecases.md ├── vc-extensions.html ├── verification.md ├── vocab.html ├── vocab.ttl └── vocabulary.ttl └── proposals ├── OBv3p0 ├── Proposal-Open-Badges-3.0.pdf ├── abstract.md ├── figure01-openbadges-2.0-diagram.png ├── figure02-openbadges-3.0-diagram.png ├── figure03-skill-assertion-with-evidence.png ├── figure04-defined-achievement-with-skill.png ├── introduction.md ├── license.md ├── readme.md ├── respec-support │ ├── contributors.js │ ├── local-biblio.js │ └── specification-wrapper.html └── specification.md ├── README.md └── a-template ├── abstract.md ├── introduction.md ├── license.md ├── readme.md ├── respec-support ├── contributors.js ├── local-biblio.js └── specification-wrapper.html └── specification.md /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | trim_trailing_whitespace = true 7 | insert_final_newline = false 8 | indent_style = space 9 | indent_size = 4 10 | max_line_length = 90 11 | 12 | [{*.json,.*.yml,*.js}] 13 | indent_style = space 14 | indent_size = 2 15 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | .gitattributes !filter !diff 2 | **/cdm-config.js filter=git-crypt diff=git-crypt 3 | **/mps-config.js filter=git-crypt diff=git-crypt -------------------------------------------------------------------------------- /.github/workflows/examples_push.yml.disabled: -------------------------------------------------------------------------------- 1 | name: Build Examples 2 | 3 | on: 4 | # Triggers the workflow on push or pull request events but only for the develop branch 5 | push: 6 | branches: 7 | - develop 8 | paths: 9 | - 'ob_v3p0/examples.html' 10 | - '.github/workflows/examples_push.yml' 11 | 12 | jobs: 13 | 14 | sideload: 15 | name: Sideload the ob_v3p0.lines file 16 | runs-on: ubuntu-latest 17 | steps: 18 | - uses: actions/checkout@v2 19 | - run: curl -H 'X-Api-Key:${{ secrets.API_KEY }}' -F 'file=@ob_v3p0/ob_v3p0.lines' https://datamodels-staging.imsglobal.org/upload 20 | continue-on-error: false 21 | 22 | build: 23 | name: Build a static version of the Respec document 24 | needs: sideload 25 | runs-on: ubuntu-latest 26 | steps: 27 | - uses: actions/checkout@v2 28 | - name: Unlock secrets 29 | uses: sliteteam/github-action-git-crypt-unlock@1.2.0 30 | env: 31 | GIT_CRYPT_KEY: ${{ secrets.GIT_CRYPT_KEY }} 32 | # This will run the respec2html tool 33 | - uses: w3c/spec-prod@v2 34 | with: 35 | SOURCE: "ob_v3p0/examples.html" 36 | DESTINATION: "docs/examples.html" 37 | TOOLCHAIN: respec 38 | VALIDATE_MARKUP: false 39 | VALIDATE_WEBIDL: false 40 | VALIDATE_LINKS: false 41 | BUILD_FAIL_ON: nothing 42 | 43 | publish: 44 | name: Publish to GH pages 45 | needs: build 46 | runs-on: ubuntu-latest 47 | steps: 48 | - uses: actions/checkout@v2 49 | with: 50 | ref: gh-pages 51 | - name: Download artifact created by build job 52 | uses: actions/download-artifact@v4 53 | with: 54 | name: spec-prod-result 55 | path: docs 56 | - name: Commit the new/updated doc 57 | run: | 58 | git pull 59 | git add docs/* 60 | git config --local user.name "GitHub Actions" 61 | git config --local user.email "actions@github.com" 62 | git commit --allow-empty -m "Automated build" 63 | git push origin 64 | -------------------------------------------------------------------------------- /.github/workflows/ob_v3p0_pr.yml.disabled: -------------------------------------------------------------------------------- 1 | name: Build OB 3.0 Spec Preview for PR 2 | 3 | on: 4 | # Triggers the workflow on push or pull request events but only for the develop branch 5 | pull_request: 6 | branches: 7 | - develop 8 | 9 | jobs: 10 | 11 | sideload: 12 | name: Sideload the ob_v3p0.lines file 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v2 16 | - run: curl -H 'X-Api-Key:${{ secrets.API_KEY }}' -F 'file=@ob_v3p0/ob_v3p0.lines' https://datamodels-staging.imsglobal.org/upload 17 | continue-on-error: false 18 | 19 | build: 20 | name: Build a static version of the Respec document 21 | needs: sideload 22 | runs-on: ubuntu-latest 23 | strategy: 24 | matrix: 25 | include: 26 | - source: 'ob_v3p0/ob_v3p0.html' 27 | destination: 'docs/ob_v3p0.html' 28 | - source: 'ob_v3p0/errata/ob_err_v3p0.html' 29 | destination: 'docs/ob_err_v3p0.html' 30 | steps: 31 | - uses: actions/checkout@v2 32 | - name: Unlock secrets 33 | uses: sliteteam/github-action-git-crypt-unlock@1.2.0 34 | env: 35 | GIT_CRYPT_KEY: ${{ secrets.GIT_CRYPT_KEY }} 36 | - uses: w3c/spec-prod@v2 37 | with: 38 | SOURCE: ${{ matrix.source }} 39 | DESTINATION: ${{ matrix.destination }} 40 | TOOLCHAIN: respec 41 | VALIDATE_MARKUP: false 42 | VALIDATE_WEBIDL: false 43 | VALIDATE_LINKS: false 44 | BUILD_FAIL_ON: nothing 45 | 46 | publish: 47 | name: Publish to GH pages 48 | needs: build 49 | runs-on: ubuntu-latest 50 | steps: 51 | - name: Get branch name from PR 52 | uses: andrevalentin/get-branch-name-by-pr@v1 53 | id: pr_data 54 | with: 55 | repo-token: ${{ secrets.GITHUB_TOKEN }} 56 | pr-id: ${{ github.event.number }} 57 | - name: Checkout the branch 58 | uses: actions/checkout@v2 59 | with: 60 | ref: ${{ steps.pr_data.outputs.branch }} 61 | - name: Download artifact created by build job 62 | uses: actions/download-artifact@v4 63 | with: 64 | name: spec-prod-result 65 | path: docs 66 | - name: Commit the new/updated doc 67 | run: | 68 | git pull 69 | git add -f docs/* 70 | git config --local user.name "GitHub Actions" 71 | git config --local user.email "actions@github.com" 72 | git commit --allow-empty -m "Automated build" 73 | git push origin 74 | -------------------------------------------------------------------------------- /.github/workflows/ob_v3p0_push.yml.disabled: -------------------------------------------------------------------------------- 1 | name: Build OB 3.0 Spec Preview for PUSH 2 | 3 | on: 4 | # Triggers the workflow on push or pull request events but only for the develop branch 5 | push: 6 | branches: 7 | - develop 8 | paths: 9 | - 'ob_v3p0/**' 10 | - '!ob_v3p0/context**.json' 11 | - '!ob_v3p0/readme.md' 12 | - '!ob_v3p0/examples.html' 13 | - '.github/workflows/ob_v3p0_push.yml' 14 | 15 | jobs: 16 | sideload: 17 | name: Sideload the ob_v3p0.lines file 18 | runs-on: ubuntu-latest 19 | steps: 20 | - uses: actions/checkout@v2 21 | - run: curl -H 'X-Api-Key:${{ secrets.API_KEY }}' -F 'file=@ob_v3p0/ob_v3p0.lines' https://datamodels-staging.imsglobal.org/upload 22 | continue-on-error: false 23 | 24 | build: 25 | name: Build a static version of the Respec document 26 | needs: sideload 27 | runs-on: ubuntu-latest 28 | strategy: 29 | matrix: 30 | include: 31 | - source: 'ob_v3p0/ob_v3p0.html' 32 | destination: 'docs/ob_v3p0.html' 33 | - source: 'ob_v3p0/errata/ob_err_v3p0.html' 34 | destination: 'docs/ob_err_v3p0.html' 35 | steps: 36 | - uses: actions/checkout@v2 37 | - name: Unlock secrets 38 | uses: sliteteam/github-action-git-crypt-unlock@1.2.0 39 | env: 40 | GIT_CRYPT_KEY: ${{ secrets.GIT_CRYPT_KEY }} 41 | # This will run the respec2html tool 42 | - uses: w3c/spec-prod@v2 43 | with: 44 | SOURCE: ${{ matrix.source }} 45 | DESTINATION: ${{ matrix.destination }} 46 | TOOLCHAIN: respec 47 | VALIDATE_MARKUP: false 48 | VALIDATE_WEBIDL: false 49 | VALIDATE_LINKS: false 50 | BUILD_FAIL_ON: nothing 51 | 52 | publish: 53 | name: Publish to GH pages 54 | needs: build 55 | runs-on: ubuntu-latest 56 | steps: 57 | - uses: actions/checkout@v2 58 | with: 59 | ref: gh-pages 60 | - name: Download artifact created by build job 61 | uses: actions/download-artifact@v4 62 | with: 63 | name: spec-prod-result 64 | path: docs 65 | - name: Commit the new/updated doc 66 | run: | 67 | git pull 68 | git add docs/* 69 | git config --local user.name "GitHub Actions" 70 | git config --local user.email "actions@github.com" 71 | git commit --allow-empty -m "Automated build" 72 | git push origin 73 | -------------------------------------------------------------------------------- /.github/workflows/publish-context.yml.disabled: -------------------------------------------------------------------------------- 1 | name: Publish the JSON-LD context file 2 | 3 | on: 4 | push: 5 | branches: 6 | - develop 7 | paths: 8 | - 'ob_v3p0/context**.json' 9 | 10 | pull_request: 11 | branches: 12 | - develop 13 | paths: 14 | - 'ob_v3p0/context**.json' 15 | 16 | jobs: 17 | publish: 18 | name: Publish to GH pages 19 | runs-on: ubuntu-latest 20 | steps: 21 | - name: Checkout develop 22 | uses: actions/checkout@v2 23 | with: 24 | ref: develop 25 | - name: Upload context.json from develop 26 | uses: actions/upload-artifact@v4 27 | with: 28 | name: context.json 29 | path: ob_v3p0/context**.json 30 | - name: Checkout gh-pages 31 | uses: actions/checkout@v2 32 | with: 33 | ref: gh-pages 34 | - name: Download context.json to gh_pages 35 | uses: actions/download-artifact@v4 36 | with: 37 | name: context.json 38 | path: docs 39 | - name: Commit the changes 40 | run: | 41 | git pull 42 | git add docs/* 43 | git config --local user.name "GitHub Actions" 44 | git config --local user.email "actions@github.com" 45 | git commit --allow-empty -m "Automated build" 46 | git push origin 47 | -------------------------------------------------------------------------------- /.github/workflows/publish-openapi.yml.disabled: -------------------------------------------------------------------------------- 1 | name: Publish OpenAPI files 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | push: 7 | branches: 8 | - develop 9 | paths: 10 | - 'ob_v3p0/ob_v3p0.lines' 11 | - 'ob_v3p0/common_credentials.lines' 12 | 13 | pull_request: 14 | branches: 15 | - develop 16 | paths: 17 | - 'ob_v3p0/ob_v3p0.lines' 18 | - 'ob_v3p0/common_credentials.lines' 19 | 20 | jobs: 21 | 22 | sideload: 23 | name: Sideload the ob_v3p0.lines file 24 | runs-on: ubuntu-latest 25 | steps: 26 | - uses: actions/checkout@v2 27 | - run: curl -H 'X-Api-Key:${{ secrets.API_KEY }}' -F 'file=@ob_v3p0/ob_v3p0.lines' https://datamodels-staging.imsglobal.org/upload 28 | continue-on-error: false 29 | 30 | openapi: 31 | name: Generate the OpenAPI files 32 | needs: sideload 33 | runs-on: ubuntu-latest 34 | steps: 35 | - uses: actions/checkout@v2 36 | - run: curl -H 'X-Api-Key:${{ secrets.API_KEY }}' https://datamodels-staging.imsglobal.org/openapischema/org.1edtech.ob.v3p0.model?binding=json --output openapi.json 37 | - run: curl -H 'X-Api-Key:${{ secrets.API_KEY }}' https://datamodels-staging.imsglobal.org/openapischema/org.1edtech.ob.v3p0.model?binding=yaml --output openapi.yaml 38 | - name: Upload OpenAPI files 39 | uses: actions/upload-artifact@v4 40 | with: 41 | name: openapi.yaml 42 | path: openapi.yaml 43 | - uses: actions/upload-artifact@v4 44 | with: 45 | name: openapi.json 46 | path: openapi.json 47 | - name: Switch to gh-pages branch 48 | uses: actions/checkout@v2 49 | with: 50 | ref: gh-pages 51 | - name: Download the OpenAPI files 52 | uses: actions/download-artifact@v4 53 | with: 54 | name: openapi.yaml 55 | path: docs/openapi 56 | - uses: actions/download-artifact@v4 57 | with: 58 | name: openapi.json 59 | path: docs/openapi 60 | - name: Commit the new/updated docs 61 | run: | 62 | git pull 63 | git add docs/* 64 | git config --local user.name "GitHub Actions" 65 | git config --local user.email "actions@github.com" 66 | git commit --allow-empty -m "Automated build" 67 | git push origin 68 | -------------------------------------------------------------------------------- /.github/workflows/publish_extensions_push.yml: -------------------------------------------------------------------------------- 1 | name: Publish Extenssions 2 | 3 | on: 4 | # Triggers the workflow on push or pull request events but only for the develop branch 5 | push: 6 | branches: 7 | - develop 8 | paths: 9 | - 'extensions/**' 10 | workflow_dispatch: 11 | 12 | jobs: 13 | publish: 14 | name: Publish to GH pages 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: Checkout develop 18 | uses: actions/checkout@v2 19 | with: 20 | ref: develop 21 | - name: Upload extensions from develop 22 | uses: actions/upload-artifact@v4 23 | with: 24 | name: extensions 25 | path: extensions 26 | - uses: actions/checkout@v2 27 | with: 28 | ref: gh-pages 29 | - name: Download artifact created by build job 30 | uses: actions/download-artifact@v4 31 | with: 32 | name: extensions 33 | path: docs/extensions 34 | - name: Commit the new/updated doc 35 | run: | 36 | git pull 37 | git add docs/extensions* 38 | git config --local user.name "GitHub Actions" 39 | git config --local user.email "actions@github.com" 40 | git commit --allow-empty -m "Automated build" 41 | git push origin 42 | -------------------------------------------------------------------------------- /.github/workflows/vocab.yml.disabled: -------------------------------------------------------------------------------- 1 | name: Publish the JSON-LD vocab file 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | push: 7 | branches: 8 | - develop 9 | paths: 10 | - 'ob_v3p0/vocab.html' 11 | 12 | pull_request: 13 | branches: 14 | - develop 15 | paths: 16 | - 'ob_v3p0/vocab.html' 17 | 18 | jobs: 19 | 20 | publish: 21 | name: Publish to GH pages 22 | runs-on: ubuntu-latest 23 | steps: 24 | - name: Checkout develop 25 | uses: actions/checkout@v2 26 | with: 27 | ref: develop 28 | - name: Upload vocab.html from develop 29 | uses: actions/upload-artifact@v4 30 | with: 31 | name: vocab.html 32 | path: ob_v3p0/vocab.html 33 | - name: Checkout gh-pages 34 | uses: actions/checkout@v2 35 | with: 36 | ref: gh-pages 37 | - name: Download vocab.html to gh_pages 38 | uses: actions/download-artifact@v4 39 | with: 40 | name: vocab.html 41 | path: docs 42 | - name: Commit the changes 43 | run: | 44 | git add docs/* 45 | git config --local user.name "GitHub Actions" 46 | git config --local user.email "actions@github.com" 47 | git commit --allow-empty -m "Automated build" 48 | git push origin 49 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | _site 2 | Gemfile.lock 3 | .ruby-version 4 | .ruby-gemset 5 | .DS_Store 6 | _config/deploy.sh 7 | .sass-cache 8 | npm-debug.log 9 | .DS_Store 10 | OBv2p1_PSM/base/ 11 | *.project 12 | *.txmi 13 | .jekyll-cache 14 | git-crypt.exe 15 | docs/ob_v3p0.html 16 | .vscode/settings.json 17 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "MD013": false, 3 | "MD033": false, 4 | "MD034": false, 5 | "MD041": false 6 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # openbadges-specification 2 | ## Specification documents related to Open Badges 3 | The published version of Open Badges 2.0 is in main and develop. Version 2.1 is only in develop until Final. 4 | 5 | ## Proposals 6 | For information about how to propose a new feature or material change to the specification, please see `proposals/README.md`. 7 | 8 | ## Branches 9 | * __main__: stable, deployable branch that stores the official release history including releases designated as Candidate Final Public. 10 | * __develop__: unstable development branch. Current work that targets a future release is merged into this branch. 11 | * __feature/new-feature-name__: unstable feature branch. Work that may be approved for future release will be developed in here and branched from __develop__. 12 | 13 | ## Contributing 14 | 15 | Please follow these steps to contribute a change to the openbadges-specification repository: 16 | 17 | 1. Open an issue on the repository if you have not done so already to allow for dialog beyond a pull request. 18 | 1. Create a new branch from __develop__ with a designation that provides a brief high-level description i.e. __documentation/branching-strategy__. 19 | 1. Make your changes in your new branch. You can choose to do these in a fork of the repository if you wish. Please include the issue number where appropriate when making commits. 20 | 1. Push those changes to the core repository or your fork. 21 | 1. Open a pull request with the target branch of __develop__ and the source of your branch. Please include the issue number when authoring a pull request. 22 | 1. Make your changes aware to the workgroup by raising them during a workgroup meeting. This will typically involve putting the topic on the agenda by way of the workgroup chair and/or an IMS Global staff member. 23 | 1. Pull request or general merges into the __develop__ branch generally require workgroup approval unless IMS Staff or the workgroup chair indicate otherwise. 24 | 25 | ### Issue Labels 26 | 27 | We use labels to track issues. The following labels are used to track the specification lifecycle: 28 | 29 | | Label | Description | 30 | | :---------- | :---------- | 31 | | `2p0` | Issue relates to OB version 2.0 32 | | `2p1` | Issue relates to OB version 2.1 33 | | `3p0` | Issue relates to OB version 3.0 34 | | `clr20` | Issue relates to CLR version 2.0 35 | | `candidate_final` | Issues is required for Candidate Final release of specification version 36 | | `final` | Issue is required for Final release of specification version 37 | 38 | 39 | 1EdTech Contributing Members may access [Spec Central](https://github.com/1EdTech/spec-central/blob/master/github-getting-started.md) for further details about using GitHub for 1EdTech's activities. 40 | -------------------------------------------------------------------------------- /docs/context.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context" : { 3 | "id" : "@id", 4 | "type" : "@type", 5 | 6 | "obi" : "https://purl.imsglobal.org/spec/ob/vocab#", 7 | "xsd" : "http://www.w3.org/2001/XMLSchema#", 8 | 9 | "dtAssertion" : "obi:dtAssertion", 10 | "dtBadgeConnectAPI" : "obi:dtBadgeConnectAPI", 11 | "dtProfile" : "obi:dtProfile", 12 | "dtStatus" : "obi:dtStatus", 13 | "dtStatusResponse" : "obi:dtStatusResponse", 14 | 15 | "dtCompactJWS" : { "@id" : "obi:dtCompactJWS", "@type" : "xsd:string" }, 16 | "dtIRI" : { "@id" : "obi:dtIRI", "@type" : "xsd:normalizedString" }, 17 | "dtURL" : { "@id" : "obi:dtURL", "@type" : "xsd:anyURI" }, 18 | 19 | "apiBase" : "obi:dtURL", 20 | "assertion" : "obi:dtAssertion", 21 | "assertions" : { "@id" : "obi:dtAssertion", "@container" : "@set" }, 22 | "authorizationUrl" : "obi:dtURL", 23 | "badgeConnectAPI" : { "@id" : "obi:dtBadgeConnectAPI", "@container" : "@set" }, 24 | "error" : { "@id" : "obi:error", "@type" : "xsd:string" }, 25 | "image" : { "@id" : "obi:image", "@type" : "xsd:anyURI" }, 26 | "name" : { "@id" : "obi:name", "@type" : "xsd:string" }, 27 | "privacyPolicyUrl" : "obi:dtURL", 28 | "profile" : "obi:dtProfile", 29 | "registrationUrl" : "obi:dtURL", 30 | "scopesOffered" : { "@id" : "obi:scopesOffered", "@type" : "xsd:anyURI", "@container" : "@set" }, 31 | "signedAssertion" : "obi:dtCompactJWS", 32 | "signedAssertions" : { "@id" : "obi:dtCompactJWS", "@container" : "@set" }, 33 | "status" : "obi:dtStatus", 34 | "statusCode" : { "@id" : "obi:statusCode", "@type" : "xsd:integer" }, 35 | "statusText" : "obi:StatusTextEnumDType", 36 | "termsOfServiceUrl" : "obi:dtURL", 37 | "tokenRevocationUrl" : "obi:dtURL", 38 | "tokenUrl" : "obi:dtURL", 39 | "version" : { "@id" : "obi:version", "@type" : "xsd:string" } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /docs/images/figure01-openbadges-2.0-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/docs/images/figure01-openbadges-2.0-diagram.png -------------------------------------------------------------------------------- /docs/images/figure02-openbadges-3.0-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/docs/images/figure02-openbadges-3.0-diagram.png -------------------------------------------------------------------------------- /docs/images/figure03-skill-assertion-with-evidence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/docs/images/figure03-skill-assertion-with-evidence.png -------------------------------------------------------------------------------- /docs/images/figure04-defined-achievement-with-skill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/docs/images/figure04-defined-achievement-with-skill.png -------------------------------------------------------------------------------- /docs/images/ob30-concept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/docs/images/ob30-concept.png -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 |
Hello
4 | -------------------------------------------------------------------------------- /extensions/accessibilityExtension/context-3.0.0.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "@protected": true, 4 | "accessibilityAPI": "https://schema.org/accessibilityAPI", 5 | "accessibilityControl": "https://schema.org/accessibilityControl", 6 | "accessibilityFeature": "https://schema.org/accessibilityFeature", 7 | "accessibilityHazard": "https://schema.org/accessibilityHazard" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /extensions/accessibilityExtension/schema_achievement_credential_obv3p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2019-09/schema#", 3 | "$id": "https://openbadgespec.org/extensions/accessibilityExtension/schema_achievement_credential_obv3p0.json", 4 | "type": "object", 5 | "properties": { 6 | "accessibilityAPI": { 7 | "type": "string" 8 | }, 9 | "accessibilityControl": { 10 | "type": "array", 11 | "items": { 12 | "type": "string" 13 | } 14 | }, 15 | "accessibilityFeature": { 16 | "type": "string" 17 | }, 18 | "accessibilityHazard": { 19 | "type": "string" 20 | }, 21 | "url": { 22 | "type": "string", 23 | "format": "uri" 24 | } 25 | }, 26 | "required": ["url", "accessibilityFeature"], 27 | "additionalProperties": true 28 | } 29 | -------------------------------------------------------------------------------- /extensions/accessibilityExtension/schema_achievement_obv3p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2019-09/schema#", 3 | "$id": "https://openbadgespec.org/extensions/accessibilityExtension/schema_achievement_obv3p0.json", 4 | "type": "object", 5 | "properties": { 6 | "credentialSubject": { 7 | "type": "object", 8 | "properties": { 9 | "achievement": { 10 | "type": "object", 11 | "properties": { 12 | "accessibilityAPI": { 13 | "type": "string" 14 | }, 15 | "accessibilityControl": { 16 | "type": "array", 17 | "items": { 18 | "type": "string" 19 | } 20 | }, 21 | "accessibilityFeature": { 22 | "type": "string" 23 | }, 24 | "accessibilityHazard": { 25 | "type": "string" 26 | }, 27 | "url": { 28 | "type": "string", 29 | "format": "uri" 30 | } 31 | }, 32 | "required": ["url", "accessibilityFeature"], 33 | "additionalProperties": true 34 | } 35 | }, 36 | "additionalProperties": true 37 | } 38 | }, 39 | "additionalProperties": true 40 | } 41 | -------------------------------------------------------------------------------- /extensions/accessibilityExtension/schema_profile_obv3p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2019-09/schema#", 3 | "$id": "https://openbadgespec.org/extensions/accessibilityExtension/schema_profile_obv3p0.json", 4 | "type": "object", 5 | "properties": { 6 | "credentialSubject": { 7 | "type": "object", 8 | "properties": { 9 | "issuer": { 10 | "type": "object", 11 | "properties": { 12 | "accessibilityAPI": { 13 | "type": "string" 14 | }, 15 | "accessibilityControl": { 16 | "type": "array", 17 | "items": { 18 | "type": "string" 19 | } 20 | }, 21 | "accessibilityFeature": { 22 | "type": "string" 23 | }, 24 | "accessibilityHazard": { 25 | "type": "string" 26 | }, 27 | "url": { 28 | "type": "string", 29 | "format": "uri" 30 | } 31 | }, 32 | "required": ["url", "accessibilityFeature"], 33 | "additionalProperties": true 34 | } 35 | }, 36 | "additionalProperties": true 37 | } 38 | }, 39 | "additionalProperties": true 40 | } 41 | -------------------------------------------------------------------------------- /extensions/applyLinkExtension/context-3.0.0.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "@protected": true, 4 | "id": "@id", 5 | "type": "@type", 6 | "ApplyLinkAchievement": { 7 | "@id": "https://w3id.org/openbadges/extensions#ApplyLinkAchievement", 8 | "@context": { 9 | "@protected": true, 10 | "id": "@id", 11 | "type": "@type" 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /extensions/applyLinkExtension/schema_obv3p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2019-09/schema#", 3 | "$id": "https://openbadgespec.org/extensions/applyLinkExtension/schema_obv3p0.json", 4 | "type": "object", 5 | "properties": { 6 | "credentialSubject": { 7 | "type": "object", 8 | "properties": { 9 | "achievement": { 10 | "type": "object", 11 | "properties": { 12 | "url": { 13 | "type": "string", 14 | "format": "uri" 15 | } 16 | }, 17 | "required": ["url"], 18 | "additionalProperties": true 19 | } 20 | }, 21 | "additionalProperties": true 22 | } 23 | }, 24 | "additionalProperties": true 25 | } 26 | -------------------------------------------------------------------------------- /extensions/assessmentExtension/v1p0/AssessmentExtension2018-Data-Model-v3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/extensions/assessmentExtension/v1p0/AssessmentExtension2018-Data-Model-v3.png -------------------------------------------------------------------------------- /extensions/assessmentExtension/v1p0/context.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "obi": "https://w3id.org/openbadges#", 4 | "extensions": "https://w3id.org/openbadges/extensions#", 5 | "schema": "http://schema.org/", 6 | "case": "https://purl.imsglobal.org/spec/case/vocab#", 7 | 8 | "Artifact": "extensions:AssessmentExtensionArtifact", 9 | "Exam": "extensions:AssessmentExtensionExam", 10 | "ExternalQuestion": "extensions:AssessmentExtensionExternalQuestion", 11 | "FileQuestion": "extensions:AssessmentExtensionFileQuestion", 12 | "Performance": "extensions:AssessmentExtensionPerformance", 13 | "TextQuestion": "extensions:AssessmentExtensionTextQuestion", 14 | 15 | "assessmentEvaluation": "extensions:assessmentEvaluation", 16 | "assessmentExample": "extensions:assessmentExample", 17 | "assessmentOutput": "extensions:assessmentOutput", 18 | "assessments": "extensions:assessments", 19 | "caseUri": "case:uri", 20 | "category": "case:category", 21 | "characterLimit": "extensions:assessmentCharacterLimit", 22 | "criterionLevels": "case:CFRubricCriterionLevels", 23 | "description": "case:description", 24 | "evaluationMethod": "extensions:assessmentEvaluationMethod", 25 | "hasGroupEvaluation": "extensions:assessmentHasGroupEvaluation", 26 | "hasGroupParticipation": "extensions:assessmentHasGroupParticipation", 27 | "identifier": "case:identifier", 28 | "lastChangeDateTime": "case:lastChangeDateTime", 29 | "position": "case:position", 30 | "quality": "case:quality", 31 | "questions": "extensions:assessmentQuestions", 32 | "required": "extensions:assessmentRequired", 33 | "rubricCriteria": "case:CFRubricCriteria", 34 | "rubricId": "case:rubricId", 35 | "rubrics": "case:rubrics", 36 | "sections": "extensions:assessmentSections", 37 | "score": "case:score", 38 | "scoringMethodExampleDescription": "extensions:assessmentScoringMethodExampleDescription", 39 | "text": "schema:text", 40 | "title": "case:title", 41 | "weight": "case:weight", 42 | "wordLimit": "extensions:assessmentWordLimit" 43 | }, 44 | "obi:validation": [ 45 | { 46 | "obi:validatesType": "extensions:AssessmentExtension", 47 | "obi:validationSchema": "http://purl.imsglobal.org/spec/ob-assessment/v1p0/schema/" 48 | } 49 | ] 50 | } 51 | -------------------------------------------------------------------------------- /extensions/assessmentExtension/v1p0/errata.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 20 | 21 |No errata at this time.
24 | 25 |No errata at this time.
24 | 25 |No errata at this time.
24 | 25 |No errata at this time.
24 | 25 |No errata at this time.
24 | 25 |