├── .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 3 |

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 |
22 |

Open Badges Assessment Extension Errata

23 |

No errata at this time.

24 | 25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /extensions/assessmentExtension/v2p0/context.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "@protected": true, 4 | "id": "@id", 5 | "type": "@type", 6 | "extensions": "https://w3id.org/openbadges/extensions#", 7 | "schema": "http://schema.org/", 8 | "AssessmentResultDescription": { 9 | "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#AssessmentResultDescription", 10 | "@context": { 11 | "schema": "http://schema.org/", 12 | "Artifact": "extensions:AssessmentExtensionArtifact", 13 | "Exam": "extensions:AssessmentExtensionExam", 14 | "ExternalQuestion": "extensions:AssessmentExtensionExternalQuestion", 15 | "FileQuestion": "extensions:AssessmentExtensionFileQuestion", 16 | "Performance": "extensions:AssessmentExtensionPerformance", 17 | "TextQuestion": "extensions:AssessmentExtensionTextQuestion", 18 | "assessmentEvaluation": "extensions:assessmentEvaluation", 19 | "assessmentType": "extensions:assessmentType", 20 | "assessmentExample": "extensions:assessmentExample", 21 | "assessmentOutput": "extensions:assessmentOutput", 22 | "characterLimit": "extensions:assessmentCharacterLimit", 23 | "evaluationMethod": "extensions:assessmentEvaluationMethod", 24 | "hasGroupEvaluation": "extensions:assessmentHasGroupEvaluation", 25 | "hasGroupParticipation": "extensions:assessmentHasGroupParticipation", 26 | "questions": "extensions:assessmentQuestions", 27 | "sections": "extensions:assessmentSections", 28 | "scoringMethodExampleDescription": "extensions:assessmentScoringMethodExampleDescription", 29 | "text": "schema:text", 30 | "wordLimit": "extensions:assessmentWordLimit" 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /extensions/assessmentExtension/v2p0/errata.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 20 | 21 |
22 |

Open Badges Assessment Extension Errata

23 |

No errata at this time.

24 | 25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /extensions/assessmentExtension/v2p0/respec-support/contributors.js: -------------------------------------------------------------------------------- 1 | var _contributors = [ 2 | { 3 | name: "Nate Otto", 4 | company: "Skybridge Skills", 5 | companyURL: "", 6 | role: "Invited Expert", 7 | }, 8 | { name: "Justin Pitcher", company: "Anthology", companyURL: "", role: "Co-chair, OB" }, 9 | { name: "Xavi Aracil", company: "1Edtech", companyURL: "", role: "Editor" }, 10 | { name: "Rob Coyle", company: "1Edtech", companyURL: "", role: "Editor" }, 11 | ]; 12 | -------------------------------------------------------------------------------- /extensions/assessmentExtension/v2p0/respec-support/local-biblio.js: -------------------------------------------------------------------------------- 1 | var _localBiblio = { 2 | "OB-ASSMT-20-ERRATA": { 3 | title: "Open Badges Asessment Extension v2.0: Errata", 4 | href: "https://www.imsglobal.org/spec/ob-assessment/v2p0/errata/", 5 | }, 6 | "OB-30": { 7 | title: "Open Badges Specification v3.0", 8 | href: "https://www.imsglobal.org/spec/ob/v3p0/", 9 | status: "Candidate Final Public", 10 | publisher: "1EdTech", 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /extensions/assessmentExtension/v2p0/respec-support/mps-config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/extensions/assessmentExtension/v2p0/respec-support/mps-config.js -------------------------------------------------------------------------------- /extensions/extraDescription/errata.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 20 | 21 |
22 |

Open Badges Extra Description Extension Errata

23 |

No errata at this time.

24 | 25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /extensions/geoCoordinatesExtension/context-3.0.0.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "@protected": true, 4 | "schema": "http://schema.org/", 5 | "Place": "schema:Place" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /extensions/geoCoordinatesExtension/schema_achievement_credential_obv3p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2019-09/schema#", 3 | "$id": "https://openbadgespec.org/extensions/geoCoordinatesExtension/schema_achievement_credential_obv3p0.json", 4 | "type": "object", 5 | "properties": { 6 | "place": { 7 | "$ref": "#/$defs/Place" 8 | } 9 | }, 10 | "required": ["place"], 11 | "additionalProperties": true, 12 | "$defs": { 13 | "Place": { 14 | "type": "object", 15 | "properties": { 16 | "name": { 17 | "type": "string" 18 | }, 19 | "description": { 20 | "type": "string" 21 | }, 22 | "geo": { 23 | "$ref": "#/$defs/GeoCoordinates" 24 | } 25 | } 26 | }, 27 | "GeoCoordinates": { 28 | "description": "The geographic coordinates of a location.", 29 | "type": "object", 30 | "properties": { 31 | "type": { 32 | "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'GeoCoordinates'.", 33 | "$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).", 34 | "type": "string", 35 | "enum": ["GeoCoordinates"] 36 | }, 37 | "latitude": { 38 | "description": "The latitude of the location [[WGS84]].", 39 | "$comment": "Origin: Float (PrimitiveType)", 40 | "type": "number" 41 | }, 42 | "longitude": { 43 | "description": "The longitude of the location [[WGS84]].", 44 | "$comment": "Origin: Float (PrimitiveType)", 45 | "type": "number" 46 | } 47 | }, 48 | "required": ["type", "latitude", "longitude"], 49 | "additionalProperties": true 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /extensions/geoCoordinatesExtension/schema_achievement_obv3p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2019-09/schema#", 3 | "$id": "https://openbadgespec.org/extensions/geoCoordinatesExtension/schema_achievement_obv3p0.json", 4 | "type": "object", 5 | "properties": { 6 | "credentialSubject": { 7 | "type": "object", 8 | "properties": { 9 | "achievement": { 10 | "type": "object", 11 | "properties": { 12 | "place": { 13 | "$ref": "#/$defs/Place" 14 | } 15 | }, 16 | "required": ["place"], 17 | 18 | "additionalProperties": true 19 | } 20 | }, 21 | "additionalProperties": true 22 | } 23 | }, 24 | "additionalProperties": true, 25 | "$defs": { 26 | "Place": { 27 | "type": "object", 28 | "properties": { 29 | "name": { 30 | "type": "string" 31 | }, 32 | "description": { 33 | "type": "string" 34 | }, 35 | "geo": { 36 | "$ref": "#/$defs/GeoCoordinates" 37 | } 38 | } 39 | }, 40 | "GeoCoordinates": { 41 | "description": "The geographic coordinates of a location.", 42 | "type": "object", 43 | "properties": { 44 | "type": { 45 | "description": "The value of the type property MUST be an unordered set. One of the items MUST be the IRI 'GeoCoordinates'.", 46 | "$comment": "Origin: IRI (DerivedType); A `NormalizedString` that represents an Internationalized Resource Identifier (IRI), which extends the ASCII characters subset of the Uniform Resource Identifier (URI).", 47 | "type": "string", 48 | "enum": ["GeoCoordinates"] 49 | }, 50 | "latitude": { 51 | "description": "The latitude of the location [[WGS84]].", 52 | "$comment": "Origin: Float (PrimitiveType)", 53 | "type": "number" 54 | }, 55 | "longitude": { 56 | "description": "The longitude of the location [[WGS84]].", 57 | "$comment": "Origin: Float (PrimitiveType)", 58 | "type": "number" 59 | } 60 | }, 61 | "required": ["type", "latitude", "longitude"], 62 | "additionalProperties": true 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /extensions/issuerAccreditationExtension/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 | "name": "schema:name", 7 | "contactInstructions": "extensions:accreditationContactInstructions", 8 | "email": "schema:email", 9 | "url": "schema:url", 10 | "address": "schema:address", 11 | "streetAddress": "schema:streetAddress", 12 | "addressLocality": "schema:addressLocality", 13 | "addressRegion": "schema:addressRegion", 14 | "postalCode": "schema:postalCode", 15 | "addressCountry": "schema:addressCountry", 16 | "description": "schema:description", 17 | "logo": "schema:logo", 18 | "parentOrganization": "schema:parentOrganization", 19 | "areaServed": "schema:areaServed", 20 | "accreditationDate": "extensions:accreditationDate", 21 | "educationalSector": "extensions:accreditationEducationalSector" 22 | }, 23 | "obi:validation": [ 24 | { 25 | "obi:validatesType": "extensions:IssuerAccreditation", 26 | "obi:validationSchema": "http://purl.imsglobal.org/spec/ob-accred/v1p0/schema/" 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /extensions/issuerAccreditationExtension/v1p0/errata.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 20 | 21 |
22 |

Open Badges Issuer Accreditation Extension Errata

23 |

No errata at this time.

24 | 25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /extensions/issuerAccreditationExtension/v1p0/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "title": "Issuer Accreditation", 4 | "description": "This extension provides a reference to a single or to an array of multiple accreditation bodies as related to the Issuer Profile.", 5 | "type": "object", 6 | "definitions": { 7 | "ISODate": { 8 | "description": "ISO 8601 date format string YYYY-MM-DD or YYYYMMDD", 9 | "type": "string", 10 | "pattern": "^([0-9]{4})(-?)(1[0-2]|0[1-9])\\2(3[01]|0[1-9]|[12][0-9])$" 11 | } 12 | }, 13 | "properties": { 14 | "name": { "type": "string" }, 15 | "contactInstructions": { "type": "string" }, 16 | "email": { "type": "string" }, 17 | "url": { 18 | "type": "string", 19 | "format": "uri" 20 | }, 21 | "description": { "type": "string" }, 22 | "address": { 23 | "type": "object", 24 | "properties": { 25 | "streetAddress": { "type": "string" }, 26 | "addressLocality": { "type": "string" }, 27 | "addressRegion": { "type": "string" }, 28 | "addressCountry": { "type": "string" }, 29 | "postalCode": { "type": "string" } 30 | } 31 | }, 32 | "logo": { 33 | "type": "string", 34 | "format": "uri" 35 | }, 36 | "parentOrganization": { 37 | "type": "object", 38 | "properties": { 39 | "name": { "type": "string" }, 40 | "url": { 41 | "type": "string", 42 | "format": "uri" 43 | }, 44 | "address": { 45 | "type": "object", 46 | "properties": { 47 | "streetAddress": { "type": "string" }, 48 | "addressLocality": { "type": "string" }, 49 | "addressRegion": { "type": "string" }, 50 | "addressCountry": { "type": "string" }, 51 | "postalCode": { "type": "string" } 52 | } 53 | } 54 | } 55 | }, 56 | "areaServed": { "type": "string" }, 57 | "accreditationDate": { 58 | "$ref": "#/definitions/ISODate" 59 | }, 60 | "educationalSector": { "type": "string" } 61 | }, 62 | "required": ["name", "contactInstructions", "url", "address"] 63 | } 64 | -------------------------------------------------------------------------------- /extensions/issuerAccreditationExtension/v2p0/context.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "@protected": true, 4 | "id": "@id", 5 | "type": "@type", 6 | "extensions": "https://w3id.org/openbadges/extensions#", 7 | "schema": "http://schema.org/", 8 | "AccreditationProfile": { 9 | "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#AccreditationProfile", 10 | "@context": { 11 | "contactInstructions": "extensions:accreditationContactInstructions", 12 | "logo": "schema:logo", 13 | "areaServed": "schema:areaServed", 14 | "accreditationDate": "extensions:accreditationDate", 15 | "educationalSector": "extensions:accreditationEducationalSector" 16 | } 17 | }, 18 | "IssuerAccreditationProfile": { 19 | "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#IssuerAccreditationProfile", 20 | "@context": { 21 | "accreditations": { 22 | "@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#accreditations", 23 | "@type": "@id", 24 | "@container": "@set" 25 | } 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /extensions/issuerAccreditationExtension/v2p0/errata.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 20 | 21 |
22 |

Open Badges Issuer Accreditation Extension Errata

23 |

No errata at this time.

24 | 25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /extensions/issuerAccreditationExtension/v2p0/ob-accred_v2p0.lines: -------------------------------------------------------------------------------- 1 | Model ob-accred 2024-09-12 2.0 "s:IMS Base Document" "t:Open Badges Issuer Accreditation Extension" "d:This extension of Open Badges 3.0 provides a reference to a single or to an array of multiple accreditation bodies as related to the Issuer Profile." "i:https://purl.imsglobal.org/spec/vc/ob/vocab.html#" 2 | 3 | Package MainClasses DataModel 4 | 5 | Class IssuerAccreditationProfile Unordered false [] "Profile extension with accreditation information." 6 | Property accreditations AccreditationProfile 0..1 "d:listing of accreditations." 7 | 8 | Class AccreditationProfile Unordered false [] "Profile extension with detailed information about an accrediting organization." 9 | Property type IRI 1 "d:MUST be the IRI 'AccreditationProfile'." 10 | Property contactInstructions String 1 "d:Contact instructions for an accrediting organization." 11 | Property areaServed String 0..1 "d:The geographic area where accreditation services are targeted." 12 | Property accreditationDate DateTimeZ 0..1 "d:The date accreditation was valid" 13 | Property educationSector String 0..1 "d:Focus of accreditation (ex: K12, Postsecondary, CTE, Workforce, Adult Ed)." 14 | 15 | // Core OB types, defined here only for JSON Schema generation 16 | Package OBClasses DataModel 17 | Class AchievementCredential Unordered false [] 18 | Property issuer ProfileRef 1 19 | Mixin Extensions 20 | 21 | Package OBSupportClasses DataModel 22 | Class ProfileRef EmbeddedSelection false [URI, Profile] 23 | 24 | Class Profile Unordered false [IssuerAccreditationProfile, AccreditationProfile] 25 | Property parentOrg Profile 0..1 26 | Mixin Extensions 27 | 28 | 29 | // Derived Types 30 | 31 | Package DerivedTypes DataModel 32 | 33 | Includes [IRI, URI] 34 | 35 | 36 | // PrimitiveTypes 37 | 38 | Package PrimitiveTypes DataModel 39 | 40 | Includes [DateTime, DateTimeZ, Extensions, Namespace, NormalizedString, String] 41 | -------------------------------------------------------------------------------- /extensions/issuerAccreditationExtension/v2p0/respec-support/contributors.js: -------------------------------------------------------------------------------- 1 | var _contributors = [ 2 | { 3 | name: "Nate Otto", 4 | company: "Skybridge Skills", 5 | companyURL: "", 6 | role: "Invited Expert", 7 | }, 8 | { name: "Justin Pitcher", company: "Anthology", companyURL: "", role: "Co-chair, OB" }, 9 | { name: "Xavi Aracil", company: "1Edtech", companyURL: "", role: "Editor" }, 10 | { name: "Rob Coyle", company: "1Edtech", companyURL: "", role: "Editor" }, 11 | ]; 12 | -------------------------------------------------------------------------------- /extensions/issuerAccreditationExtension/v2p0/respec-support/local-biblio.js: -------------------------------------------------------------------------------- 1 | var _localBiblio = { 2 | "OB-ACCRED-20-ERRATA": { 3 | title: "Open Badges Issuer Accreditation Extension v2.0: Errata", 4 | href: "https://www.imsglobal.org/spec/ob-assessment/v2p0/errata/", 5 | }, 6 | "OB-30": { 7 | title: "Open Badges Specification v3.0", 8 | href: "https://www.imsglobal.org/spec/ob/v3p0/", 9 | status: "Candidate Final Public", 10 | publisher: "1EdTech", 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /extensions/issuerAccreditationExtension/v2p0/respec-support/mps-config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/extensions/issuerAccreditationExtension/v2p0/respec-support/mps-config.js -------------------------------------------------------------------------------- /extensions/issuerAccreditationExtension/v2p0/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2019-09/schema#", 3 | "$id": "http://purl.imsglobal.org/spec/ob-accred/v2p0/schema", 4 | "type": "object", 5 | "properties": { 6 | "issuer": { 7 | "type": "object", 8 | "properties": { 9 | "accreditations": { 10 | "type": "array", 11 | "items": { 12 | "$ref": "#/$defs/Accreditation" 13 | } 14 | } 15 | }, 16 | "required": ["accreditations"], 17 | "additionalProperties": true 18 | } 19 | }, 20 | "additionalProperties": true, 21 | "$defs": { 22 | "ISODate": { 23 | "description": "ISO 8601 date format string YYYY-MM-DD or YYYYMMDD", 24 | "type": "string", 25 | "pattern": "^([0-9]{4})(-?)(1[0-2]|0[1-9])\2(3[01]|0[1-9]|[12][0-9])$" 26 | }, 27 | "Accreditation": { 28 | "type": "object", 29 | "properties": { 30 | "contactInstructions": { 31 | "type": "string" 32 | }, 33 | "logo": { 34 | "type": "string", 35 | "format": "uri" 36 | }, 37 | "areaServed": { 38 | "type": "string" 39 | }, 40 | "accreditationDate": { 41 | "$ref": "#/$defs/ISODate" 42 | }, 43 | "educationalSector": { 44 | "type": "string" 45 | } 46 | }, 47 | "required": ["contactInstructions"] 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /extensions/licenseExtension/context-3.0.0.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "@protected": true, 4 | "id": "@id", 5 | "type": "@type", 6 | "CCAchievement": { 7 | "@id": "https://w3id.org/openbadges/extensions#CCAchievement", 8 | "@context": { 9 | "@protected": true, 10 | "id": "@id", 11 | "type": "@type", 12 | "license": "https://w3id.org/openbadges/extensions#License" 13 | } 14 | }, 15 | "License": { 16 | "@id": "https://w3id.org/openbadges/extensions#License", 17 | "@context": { 18 | "@protected": true, 19 | "cc": "http://creativecommons.org/ns#", 20 | "id": "@id", 21 | "type": "@type", 22 | "legalCode": "cc:legalcode", 23 | "License": "cc:License", 24 | "CC-0": "https://creativecommons.org/publicdomain/zero/1.0/", 25 | "CC-BY": "http://creativecommons.org/licenses/by/4.0/", 26 | "CC-BY-SA": "http://creativecommons.org/licenses/by-sa/4.0/", 27 | "CC-BY-NC": "http://creativecommons.org/licenses/by-nc/4.0/", 28 | "CC-BY-NC-SA": "http://creativecommons.org/licenses/by-nc-sa/4.0/", 29 | "CC-BY-ND": "http://creativecommons.org/licenses/by-nd/4.0/", 30 | "CC-BY-NC-ND": "https://creativecommons.org/licenses/by-nc-nd/4.0/" 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /extensions/licenseExtension/schema_obv3p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft/2019-09/schema#", 3 | "$id": "https://openbadgespec.org/extensions/licenseExtension/schema_obv3p0.json", 4 | "type": "object", 5 | "properties": { 6 | "credentialSubject": { 7 | "type": "object", 8 | "properties": { 9 | "achievement": { 10 | "type": "object", 11 | "properties": { 12 | "license": { 13 | "$ref": "#/$defs/License" 14 | } 15 | }, 16 | "required": ["id", "name"], 17 | "additionalProperties": true 18 | } 19 | }, 20 | "additionalProperties": true 21 | } 22 | }, 23 | "additionalProperties": true, 24 | "$defs": { 25 | "License": { 26 | "type": "object", 27 | "properties": { 28 | "id": { 29 | "type": "string", 30 | "format": "url" 31 | }, 32 | "name": { 33 | "type": "string" 34 | }, 35 | "http://creativecommons.org/ns#legalcode": { 36 | "type": "string", 37 | "format": "url" 38 | } 39 | }, 40 | "required": ["id", "name"] 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /extensions/originalCreatorExtension/README.md: -------------------------------------------------------------------------------- 1 | # Original Creator Extension 2 | 3 | _Author: [Antti Koskinen](https://github.com/ajk)_ 4 | 5 | This extension provides a way to track the origin of a badge when one organisation creates it for another. 6 | 7 | For example, presume we have organisations X, Y and Z. A badge is created by X and they grant Y and Z the right to issue it. 8 | IssuerClass of X is stored as the OriginalCreator in the BadgeClass and either Y or Z becomes the issuer. 9 | 10 | ## Open Badges 2.0 11 | 12 | | Property | Type | Value Description | 13 | | ------------ | -------------- | --------------------------------------------------------------------------------------------------------------------- | 14 | | **@context** | context IRI | [https://openbadgespec.org/extensions/originalCreatorExtension/context.json](./originalCreatorExtension/context.json) | 15 | | **type** | type IRI array | `['Extension', 'extensions:OriginalCreator']` | 16 | | **url** | string, uri | Valid url pointing to the Issuer document of the issuer that originally defined this BadgeClass | 17 | 18 | **Extendable Badge Objects:** 19 | BadgeClass 20 | 21 | **Example implementation:** 22 | 23 | ```json 24 | { 25 | "extensions:OriginalCreator": { 26 | "@context": "https://openbadgespec.org/extensions/originalCreatorExtension/context.json", 27 | "type": ["Extension", "extensions:OriginalCreator"], 28 | "url": "https://example.org/creator-organisation.json" 29 | } 30 | } 31 | ``` 32 | 33 | ## Open Badges 3.0 34 | 35 | As the new version of the specs defines the `source` property of an 36 | `AchievementSubject` for, this extension is, therefore, deprecated. 37 | New versions of the specs also defines the `creator` property of an 38 | `Achievement`. Section 2.4.1 Differentiating Issuers and Achievement 39 | Creators of the Open Badges 3.0 Implementation Guide details this 40 | behaviour. 41 | -------------------------------------------------------------------------------- /ob_next/README.md: -------------------------------------------------------------------------------- 1 | # OB Next Collection Box 2 | 3 | This folder is a place to store files related to **potential** new features of future versions of the Open Badges specification as approved by the IMS OB Project Group. 4 | -------------------------------------------------------------------------------- /ob_next/roadmap.md: -------------------------------------------------------------------------------- 1 | 2 | # Roadmap 3 | 4 | This document outlines the steps we believe are required to gain acceptance of DIDs in Open Badges along with usecases that align with the roadmap. 5 | 6 | 7 | ## Tasks 8 | 9 | Tasks define tangible work items that accomplish use cases and progress the timeline. 10 | 11 | Task | Notes | Status | 12 | |-----------------|----------------|----------| 13 | | Document "What is a DID" | Present in [did-in-badges](dids-in-badges.md) | Draft | 14 | | Document "How to get a DID" | Present in [did-in-badges](dids-in-badges.md) | Draft | 15 | | Document DIDs in Badges Value Proposition | Present in [did-in-badges](dids-in-badges.md) | Draft | 16 | | Document Spec Changes | Present in [did-in-badges](dids-in-badges.md) | Draft | 17 | | Pilot Program Proposal | Propose a pilot program with a pilot roadmap, check-ins with IMS staff and workgroup, identified low-risk high-reward items, and piloting principles | TODO | 18 | | Extension Example | Example Extension/Additional Properties Approach AND Example next version “pure OB 2.2” of what this could look like. | TODO | 19 | 20 | 21 | ## Use Cases 22 | 23 | The use cases listed below are what we believe to be the enumeration of problems to be solved in adding DIDs to Open Badges. The order reflect current prioritization and is subject to change. 24 | 25 | Capability | Complexity | Potential Value | Priority | 26 | |-----------------|----------------|-------------------|----------| 27 | | Prove ownership of a DID as a potential recipient | lg | lg | 1 | 28 | | Provide a proof that a particular host account is held by the holder of a particular DID | lg | lg | 1 | 29 | | Determine if a DID-based issuer identity is a trustworthy representation of a real-world (“meatspace”) organization | lg | lg | 1 | 30 | | Award a badge to a DID-based recipient | sm | md | 2 | 31 | | Claim a DID as a recipient and present it to issuer & host | med | med | 2 | 32 | | Include DID-based profile identification in Badge Connect APIs | med | med | 3 | 33 | | Use a DID as an issuer identifier, tied to signing keys for assertions | med | lg | 3 | 34 | | Describe a Badge Connect service (SIOP?) that I use in my DID document | med | med | 3 | 35 | 36 | ## Timeline 37 | 38 | The timeline proposed is broken into three stages of three month intervals. The timeline is subject to changes. 39 | 40 | ### Stage 1 41 | 42 | **August 2020 - October 2020** 43 | 44 | - Recipient brings a DID to an Issuer platform. Issuer platform verifies their control of DID 45 | - Alternatively an Issuer can generate DID for a Recipient 46 | - Consumer trusts Issuer validation for a Recipient’s control of DID 47 | - Create first draft of the specification 48 | - Create supporting documentation for working with DIDs 49 | - Create working sample as an OB Extension 50 | 51 | ### Stage 2 52 | 53 | **October 2020 - December 2020** 54 | 55 | - Look to standardize on technical standard (e.g. OIDC SIOP) for Issuers to validate Recipient control of DID 56 | - Support DIDs in Badge Connect 57 | - Look for two Badge Platforms to trial use of DIDs 58 | - Refine supported DIDs based on experiences from Stage 1 59 | - Update draft specification 60 | 61 | ### Stage 3 62 | 63 | **December 2020 - February 2021** 64 | 65 | - Look to standardize on technical standard for Open Badge stakeholders (Backpacks, Displayers, Consumers) to validate Recipient control of DID 66 | - Finalize specification 67 | - Create compliance tooling 68 | - Make it into OB v.Next 69 | -------------------------------------------------------------------------------- /ob_next/use-cases.md: -------------------------------------------------------------------------------- 1 | # Open Badges Next Use Cases 2 | 3 | This document contains use cases submitted by the members of the Open Badges Workgroup for consideration in the next 4 | version of the Open Badges Specification. Each use case contains a title, user stories and/or information about a 5 | specific problem or opportunity, information about the motivation or importance, and a description of a 6 | specification-level capability or restriction that could serve the use case when implemented in the ecosystem. New use 7 | cases may be submitted by pull request. All information submitted must be compatible with IMS Global intellectual 8 | property rights policies for open implementation of specifications resulting from the contribution. 9 | 10 | When the next version of the specification is assigned a version number and drafted as draft documents, selected use 11 | cases from this document will be incorporated, and this document will be deleted. 12 | 13 | ## Describe a Rubric in a Badgeclass and associated Results in an Assertion 14 | As an Issuer, I would like to augment a BadgeClass with a Rubric, which is a matrix of Rubric Criteria and Performance 15 | Levels at which learners or recipients may be expected to perform. 16 | 17 | I would like to augment an Assertion of a BadgeClass that features a Rubric with a Result, which describes how a 18 | particular learner or recipient performed in terms of an achieved Performance Level for one or more Rubric Criteria in 19 | the BadgeClass that this Assertion recognizes. 20 | 21 | The related Comprehensive Learner Record specification added the concept of 22 | [ResultDescription](https://www.imsglobal.org/sites/default/files/spec/clr/v1p0/InfoModel/clr_InfoModel.html#Data_ResultDescription) 23 | and [Result](https://www.imsglobal.org/sites/default/files/spec/clr/v1p0/InfoModel/clr_InfoModel.html#Data_Result) to 24 | CLR Achievements (BadgeClass) and Assertions, respectively. This concept is a natural fit with the matching Open Badges 25 | classes and could be imported into the Open Badges Specification to enable badge issuers to describe the available 26 | performance levels that assessments may recognize for a BadgeClass and the performance levels particular learners 27 | achieved. Each ResultDescription has an identifier that is unique within the BadgeClass, and each Result in the 28 | Assertion identifies which ResultDescription it applies to and which achievedLevel applies. 29 | 30 | This introduces the concept that an assertion may recognize an achievement that has not yet "passed" a threshold 31 | "required level". The mere existence of an Assertion may no longer be enough to recognize that the Issuer's desired 32 | criteria have been met to the full satisfaction of the Issuer, only that at least some progress toward those criteria 33 | was made. This may pose complications with systems whose existing logic relies on the existence of an assertion. 34 | Specific guidance for interpretation by inspectors or consumers should be provided in the specification for how such 35 | assertions should be interpreted. 36 | 37 | The value of incorporating Rubrics into Open Badges comes from the ability to better describe achievement at a more 38 | granular level. This potentially results in capabilities like understanding how an individual's skill has improved over 39 | time across multiple Assertions of the same BadgeClass. Additionally, application forms and assessment forms within 40 | applications that serve issuers might be automatically generated from Rubric data. 41 | -------------------------------------------------------------------------------- /ob_v2p0/404.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 404 Not Found - Open Badges Technical Specification 3 | show_sidebar: true 4 | permalink: /404.html 5 | --- 6 | # 404 Not Found 7 | We were unable to find the document you requested. 8 | 9 | -------------------------------------------------------------------------------- /ob_v2p0/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'jekyll' 3 | -------------------------------------------------------------------------------- /ob_v2p0/Publishing.md: -------------------------------------------------------------------------------- 1 | # How to publish the Open Badges 2.0 specification 2 | 3 | 1. Install Jekyll ([windows](https://jekyllrb.com/docs/installation/windows/), [macOS](https://jekyllrb.com/docs/installation/macos/)) 4 | 2. Clone this repo to your computer 5 | 3. Open a command prompt and navigate to the directory 6 | 4. Run the `serve` script to start the Jekyll server 7 | ``` 8 | > npm run-script serve 9 | 10 | Server address: http://127.0.0.1:4000/ 11 | ``` 12 | 5. Open a browser and navigate to the address displayed by Jekyll (this will load the spec) 13 | 6. Save the spec document as html -------------------------------------------------------------------------------- /ob_v2p0/README.md: -------------------------------------------------------------------------------- 1 | # Open Badges Specification 2 | This is the official repository for the Open Badges specification. See [the published documentation](https://openbadgespec.org) for information about the current Open Badges standard. The documentation is generated from the contents of this repository and the full set is comprised of the following documents: 3 | * Main Specification 4 | * Bakery Specification 5 | * Examples 6 | * Implementation Guide 7 | * Conformance Certification Guide 8 | 9 | Contribute pull requests here to suggest edits. The Open Badges specification is managed by IMS Global Learning Consortium. All suggested edits will be reviewed by the IMS Open Badges project group. 10 | 11 | ## About Open Badges 12 | [Open Badges](http://openbadges.org) are visual symbols of accomplishments packed with verifiable metadata according to the Open Badges specification. The Open Badges specification defines the properties necessary to define an achievement and award it to a recipient, as well as procedures for verifying badge authenticity and “baking” badge information into portable image files. 13 | 14 | The specification is managed by [IMS Global Learning Consortium](https://www.imsglobal.org/). IMS maintains additional [supporting resources](https://www.imsglobal.org/activity/digital-badges). The Open Badges specification was originally developed by the [Mozilla Foundation](http://mozillafoundation.org) with support from the [MacArthur Foundation](https://www.macfound.org/). 15 | -------------------------------------------------------------------------------- /ob_v2p0/_config.yml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - 3 | scope: 4 | path: "" 5 | values: 6 | layout: "page" 7 | highlighter: pygments 8 | 9 | 10 | baseurl: "/openbadges-specification" 11 | exclude: ["README.md", "Gemfile", "package.json"] -------------------------------------------------------------------------------- /ob_v2p0/_config/rsync_exclude.txt: -------------------------------------------------------------------------------- 1 | .htaccess -------------------------------------------------------------------------------- /ob_v2p0/_config_production.yml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - 3 | scope: 4 | path: "" 5 | values: 6 | layout: "page" 7 | highlighter: pygments 8 | 9 | baseurl: "" 10 | exclude: ["README.md", "Gemfile"] 11 | -------------------------------------------------------------------------------- /ob_v2p0/_includes/footer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /ob_v2p0/_includes/footer2.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ob_v2p0/_includes/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 15 | 16 | {{ page.title }} 17 | -------------------------------------------------------------------------------- /ob_v2p0/_includes/header_sub.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 15 | 16 | {{ page.title }} 17 | -------------------------------------------------------------------------------- /ob_v2p0/_includes/page_bottom.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/ob_v2p0/_includes/page_bottom.html -------------------------------------------------------------------------------- /ob_v2p0/_includes/page_top.html: -------------------------------------------------------------------------------- 1 | 2 |
-------------------------------------------------------------------------------- /ob_v2p0/_layouts/page.html: -------------------------------------------------------------------------------- 1 | {% include header.html %} 2 | {% include page_top.html %} 3 | 4 |
5 | {{ content }} 6 |
7 | 8 | {% include footer.html %} -------------------------------------------------------------------------------- /ob_v2p0/_layouts/page2.html: -------------------------------------------------------------------------------- 1 | {% include header_sub.html %} 2 | {% include page_top.html %} 3 | 4 |
5 | {{ content }} 6 |
7 | 8 | {% include footer2.html %} 9 | -------------------------------------------------------------------------------- /ob_v2p0/_layouts/page_sub.html: -------------------------------------------------------------------------------- 1 | {% include header_sub.html %} 2 | {% include page_top.html %} 3 | 4 |
5 | {{ content }} 6 |
7 | 8 | {% include footer.html %} -------------------------------------------------------------------------------- /ob_v2p0/_sass/colors.scss: -------------------------------------------------------------------------------- 1 | $green-bright: #d6e9c6; 2 | $green-muted: #dff0d8; 3 | $green-dark: #3c763d; 4 | 5 | $blue-bright: #bce8f1; 6 | $blue-muted: #d9edf7; 7 | $blue-dark: #31708f; 8 | 9 | $yellow-bright: #faebcc; 10 | $yellow-muted: #fcf8e3; 11 | $yellow-dark: #8a6d3b; 12 | 13 | $red-bright: #ebccd1; 14 | $red-muted: #f2dede; 15 | $red-dark: #a94442; 16 | -------------------------------------------------------------------------------- /ob_v2p0/_sass/modules/masthead.scss: -------------------------------------------------------------------------------- 1 | .masthead { 2 | position: relative; 3 | height: 60px; 4 | } 5 | 6 | .masthead-x-logo { 7 | background: url(../images/openbadges-logo-dark.png) no-repeat; 8 | width: 200px; 9 | text-indent: -9999em; 10 | display: block; 11 | height: 53px; 12 | } 13 | -------------------------------------------------------------------------------- /ob_v2p0/_sass/modules/note.scss: -------------------------------------------------------------------------------- 1 | .note { 2 | padding: 1em 1.2em 0.5em; 3 | margin: 1em 0; 4 | clear: both; 5 | border-style: none; 6 | } 7 | 8 | .good-news { 9 | border-color: $green-bright; 10 | background: $green-muted; 11 | color: $green-dark; 12 | } 13 | 14 | .info { 15 | border-color: $blue-bright; 16 | background: $blue-muted; 17 | color: $blue-dark; 18 | } 19 | 20 | .issue { 21 | border-color: $yellow-bright; 22 | background: $yellow-muted; 23 | color: $yellow-dark; 24 | } 25 | 26 | .warning { 27 | border-color: $red-bright; 28 | background: $red-muted; 29 | color: $red-dark; 30 | } 31 | 32 | 33 | .good-news, .info, .issue, .warning { 34 | border-left-style: solid; 35 | border-left-width: 0.5em; 36 | overflow: auto; 37 | } 38 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/accessibilityExtension/context.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "obi": "https://w3id.org/openbadges#", 4 | "extensions": "https://w3id.org/openbadges/extensions#", 5 | "url": "extensions:#accessibility", 6 | "accessibilityAPI": "https://schema.org/accessibilityAPI", 7 | "accessibilityControl": "https://schema.org/accessibilityControl", 8 | "accessibilityFeature": "https://schema.org/accessibilityFeature", 9 | "accessibilityHazard": "https://schema.org/accessibilityHazard" 10 | }, 11 | "obi:validation": [ 12 | { 13 | "obi:validatesType": "extensions#accessibility", 14 | "obi:validationSchema": "https://openbadgespec.org/extensions/accessibilityExtension/schema.json" 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /ob_v2p0/extensions/accessibilityExtension/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "title": "Accessibility extension", 4 | "description": "An extension allowing for the addition of the accessibility informations.", 5 | "type": "object", 6 | "properties": { 7 | "accessibilityAPI": { 8 | "type": "string" 9 | }, 10 | "accessibilityControl": { 11 | "type": "array", 12 | "items": { 13 | "type": "string" 14 | } 15 | }, 16 | "accessibilityFeature": { 17 | "type": "string" 18 | }, 19 | "accessibilityHazard": { 20 | "type": "string" 21 | }, 22 | "url":{ 23 | "type": "string", 24 | "format": "uri" 25 | }, 26 | "required": ["url","accessibilityFeature"] 27 | } 28 | } 29 | 30 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/applyLinkExtension/context.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "obi": "https://w3id.org/openbadges#", 4 | "extensions": "https://w3id.org/openbadges/extensions#", 5 | "url": "extensions:applyLink" 6 | }, 7 | "obi:validation": [ 8 | { 9 | "obi:validatesType": "extensions:ApplyLink", 10 | "obi:validationSchema": "https://openbadgespec.org/extensions/applyLinkExtension/schema.json" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/applyLinkExtension/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "title": "Apply Link", 4 | "description": "An extension that allows you to add a single url to a web page providing information on how earners may apply for a badge.", 5 | "type": "object", 6 | "properties": { 7 | "url": { 8 | "type": "string", 9 | "format": "uri" 10 | } 11 | }, 12 | "required": ["url"] 13 | } -------------------------------------------------------------------------------- /ob_v2p0/extensions/assessmentExtension/AssessmentExtension2018-Data-Model-v3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/ob_v2p0/extensions/assessmentExtension/AssessmentExtension2018-Data-Model-v3.png -------------------------------------------------------------------------------- /ob_v2p0/extensions/assessmentExtension/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 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/assessmentExtension/errata.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 20 | 21 |
22 |

Open Badges Assessment Extension Errata

23 |

No errata at this time.

24 | 25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/endorsement/context.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "obi": "https://w3id.org/openbadges#", 4 | "endorsement": "https://w3id.org/openbadges/extensions#Endorsement", 5 | "endorsedObject": { "@id": "endorsement:/endorsedObject"} 6 | }, 7 | "obi:validation": [ 8 | { 9 | "obi:validatesType": "endorsement", 10 | "obi:validationSchema": "https://w3id.org/openbadges/extensions/endorsement/schema.json" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/endorsement/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "title": "Open Badges Endorsement Extension v1.0", 4 | "description": "Endorse another badge object by including this extension in an assertion that has a Badge Object as its recipient. A 'description' property within the extension may be used to describe the specific endorsement instance.", 5 | "type": "object", 6 | "properties": { 7 | "description": { 8 | "type": "string" 9 | }, 10 | "endorsedObject": { 11 | "type": "object" 12 | } 13 | }, 14 | "required": ["description"] 15 | } 16 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/exampleExtension/context.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "obi": "https://w3id.org/openbadges#", 4 | "extensions": "https://w3id.org/openbadges/extensions#", 5 | "exampleProperty": "http://schema.org/text" 6 | }, 7 | "obi:validation": [ 8 | { 9 | "obi:validatesType": "extensions:ExampleExtension", 10 | "obi:validationSchema": "https://openbadgespec.org/extensions/exampleExtension/schema.json" 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /ob_v2p0/extensions/exampleExtension/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "title": "1.1 Open Badge Example Extension", 4 | "description": "An extension that allows you to add a single string exampleProperty to an extension object to represent some of your favorite text.", 5 | "type": "object", 6 | "properties": { 7 | "exampleProperty": { 8 | "type": "string" 9 | } 10 | }, 11 | "required": ["exampleProperty"] 12 | } -------------------------------------------------------------------------------- /ob_v2p0/extensions/extraDescription/context.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "obi": "https://w3id.org/openbadges#", 4 | "extensions": "https://w3id.org/openbadges/extensions#" 5 | }, 6 | "obi:validation": [ 7 | { 8 | "obi:validatesType": "extensions:ExtraDescriptionExtension", 9 | "obi:validationSchema": "http://purl.imsglobal.org/spec/ob-exdesc/v1p0/schema/" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/extraDescription/errata.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 20 | 21 |
22 |

Open Badges Extra Description Extension Errata

23 |

No errata at this time.

24 | 25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/extraDescription/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-06/schema#", 3 | "title": "0.1 Extra Description Extension", 4 | "description": "An extension to Open Badges that allows issuers to add additional titled sections of descriptive content to their badges and profiles.", 5 | "type": "object", 6 | "properties": { 7 | "name": { 8 | "type": "string" 9 | }, 10 | "narrative": { 11 | "type": "string" 12 | } 13 | }, 14 | "required": ["name", "narrative"] 15 | } -------------------------------------------------------------------------------- /ob_v2p0/extensions/geoCoordinatesExtension/context.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "obi": "https://w3id.org/openbadges#", 4 | "schema": "http://schema.org/", 5 | "extensions": "https://w3id.org/openbadges/extensions#", 6 | "geo": "schema:geo", 7 | "name": "schema:name", 8 | "description": "schema:description", 9 | "latitude": "schema:latitude", 10 | "longitude": "schema:longitude" 11 | }, 12 | "obi:validation": [ 13 | { 14 | "obi:validatesType": "extensions:GeoCoordinates", 15 | "obi:validationSchema": "https://w3id.org/openbadges/extensions/geoCoordinatesExtension/schema.json" 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/geoCoordinatesExtension/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "title": "GeoCoordinates Open Badges Extension", 4 | "description": "An extension allowing for the addition of the geographic coordinates associated with a badge object. For example, geolocation could represent where a Badge Class is available, where a badge was earned or the location of an issuer. The required description property allows implementers to be more specific about the reason location is included. Implements Schema.org's Place class", 5 | "type": "object", 6 | "properties": { 7 | "name": {"type": "string"}, 8 | "description": { "type": "string" }, 9 | "geo": { 10 | "type": "object", 11 | "properties": { 12 | "latitude": { "type": "number" }, 13 | "longitude": { "type": "number" } 14 | }, 15 | "required": ["latitude", "longitude"] 16 | } 17 | }, 18 | "required": ["description", "geo"] 19 | } 20 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/issuerAccreditationExtension/context.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "obi": "https://w3id.org/openbadges#", 4 | "extensions": "https://w3id.org/openbadges/extensions#", 5 | "schema": "http://schema.org/", 6 | "name": "schema:name", 7 | "contactInstructions": "extensions:accreditationContactInstructions", 8 | "email": "schema:email", 9 | "url": "schema:url", 10 | "address": "schema:address", 11 | "streetAddress": "schema:streetAddress", 12 | "addressLocality": "schema:addressLocality", 13 | "addressRegion": "schema:addressRegion", 14 | "postalCode": "schema:postalCode", 15 | "addressCountry": "schema:addressCountry", 16 | "description": "schema:description", 17 | "logo": "schema:logo", 18 | "parentOrganization": "schema:parentOrganization", 19 | "areaServed": "schema:areaServed", 20 | "accreditationDate": "extensions:accreditationDate", 21 | "educationalSector": "extensions:accreditationEducationalSector" 22 | }, 23 | "obi:validation": [ 24 | { 25 | "obi:validatesType": "extensions:IssuerAccreditation", 26 | "obi:validationSchema": "http://purl.imsglobal.org/spec/ob-accred/v1p0/schema/" 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/issuerAccreditationExtension/errata.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 20 | 21 |
22 |

Open Badges Issuer Accreditation Extension Errata

23 |

No errata at this time.

24 | 25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/issuerAccreditationExtension/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "title": "Issuer Accreditation", 4 | "description": "This extension provides a reference to a single or to an array of multiple accreditation bodies as related to the Issuer Profile.", 5 | "type": "object", 6 | "definitions": { 7 | "ISODate": { 8 | "description": "ISO 8601 date format string YYYY-MM-DD or YYYYMMDD", 9 | "type": "string", 10 | "pattern": "^([0-9]{4})(-?)(1[0-2]|0[1-9])\\2(3[01]|0[1-9]|[12][0-9])$" 11 | } 12 | }, 13 | "properties": { 14 | "name": {"type": "string"}, 15 | "contactInstructions": {"type": "string"}, 16 | "email": {"type": "string"}, 17 | "url": { 18 | "type": "string", 19 | "format": "uri" 20 | }, 21 | "description": {"type": "string"}, 22 | "address": { 23 | "type": "object", 24 | "properties": { 25 | "streetAddress": {"type": "string"}, 26 | "addressLocality": {"type": "string"}, 27 | "addressRegion": {"type": "string"}, 28 | "addressCountry": {"type": "string"}, 29 | "postalCode": {"type": "string"} 30 | } 31 | }, 32 | "logo": { 33 | "type": "string", 34 | "format": "uri" 35 | }, 36 | "parentOrganization": { 37 | "type": "object", 38 | "properties": { 39 | "name": {"type": "string"}, 40 | "url": { 41 | "type": "string", 42 | "format": "uri" 43 | }, 44 | "address": { 45 | "type": "object", 46 | "properties": { 47 | "streetAddress": {"type": "string"}, 48 | "addressLocality": {"type": "string"}, 49 | "addressRegion": {"type": "string"}, 50 | "addressCountry": {"type": "string"}, 51 | "postalCode": {"type": "string"} 52 | } 53 | } 54 | } 55 | }, 56 | "areaServed": {"type": "string"}, 57 | "accreditationDate": { 58 | "$ref": "#/definitions/ISODate" 59 | }, 60 | "educationalSector": {"type": "string"} 61 | }, 62 | "required": ["name","contactInstructions","url","address"] 63 | 64 | } -------------------------------------------------------------------------------- /ob_v2p0/extensions/licenseExtension/context.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "obi": "https://w3id.org/openbadges#", 4 | "extensions": "https://w3id.org/openbadges/extensions#", 5 | "cc": "http://creativecommons.org/ns#", 6 | "legalCode": "cc:legalcode", 7 | "License": "cc:License", 8 | "CC-0": "https://creativecommons.org/publicdomain/zero/1.0/", 9 | "CC-BY": "http://creativecommons.org/licenses/by/4.0/", 10 | "CC-BY-SA": "http://creativecommons.org/licenses/by-sa/4.0/", 11 | "CC-BY-NC": "http://creativecommons.org/licenses/by-nc/4.0/", 12 | "CC-BY-NC-SA": "http://creativecommons.org/licenses/by-nc-sa/4.0/", 13 | "CC-BY-ND": "http://creativecommons.org/licenses/by-nd/4.0/", 14 | "CC-BY-NC-ND": "https://creativecommons.org/licenses/by-nc-nd/4.0/" 15 | }, 16 | "obi:validation": [{ 17 | "obi:validatesType": "extensions:LicenseExtension", 18 | "obi:validationSchema": "https://openbadgespec.org/extensions/licenseExtension/schema.json" 19 | }] 20 | } 21 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/licenseExtension/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-06/schema#", 3 | "title": "Open Badges License Extension", 4 | "description": "An extension that allows issuers to describe the license of an Open Badges object.", 5 | "type": "object", 6 | "properties": { 7 | "id": { 8 | "description": "The canonical URI of the selected Creative Commons license. For convenience, aliases like 'CC-BY' are provided in the context.", 9 | "type": "string", 10 | "pattern": "^CC\\-" 11 | }, 12 | "name": { 13 | "type": "string" 14 | }, 15 | "legalCode": { 16 | "type": "string", 17 | "format": "url" 18 | } 19 | }, 20 | "required": ["id", "name"] 21 | 22 | } -------------------------------------------------------------------------------- /ob_v2p0/extensions/originalCreatorExtension/context.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "obi": "https://w3id.org/openbadges#", 4 | "extensions": "https://w3id.org/openbadges/extensions#", 5 | "url": "extensions:#originalCreator" 6 | }, 7 | "obi:validation": [ 8 | { 9 | "obi:validatesType": "extensions:originalCreator", 10 | "obi:validationSchema": "https://openbadgespec.org/extensions/originalCreatorExtension/schema.json" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/originalCreatorExtension/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "title": "Original Creator", 4 | "description": "When a badge is shared with another issuer, this extension allows you to show the original creator of the badge.", 5 | "type": "object", 6 | "properties": { 7 | "url": { 8 | "type": "string", 9 | "format": "uri" 10 | } 11 | }, 12 | "required": ["url"] 13 | } 14 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/recipientProfile/context.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": { 3 | "obi": "https://w3id.org/openbadges#", 4 | "extensions": "https://w3id.org/openbadges/extensions#" 5 | }, 6 | "obi:validation": [ 7 | { 8 | "obi:validatesType": "extensions:RecipientProfile", 9 | "obi:validationSchema": "https://openbadgespec.org/extensions/recipientProfile/schema.json" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /ob_v2p0/extensions/recipientProfile/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "title": "RecipientProfile schema", 4 | "description": "A Blockcerts extension allowing inclusion of additional recipient details, including recipient publicKey and name. Inclusion of the recipient publicKey allows the recipient to make a strong claim of ownership over the key, and hence the badge being awarded. In the future, publicKey will be deprecated in favor of a decentralized id (DID) in the `id` field.", 5 | "type": "object", 6 | "properties": { 7 | "id": { 8 | "type": "string", 9 | "description": "reserved for future use as DID" 10 | }, 11 | "name": { 12 | "type": "string", 13 | "description": "Name of recipient, http://schema.org/name" 14 | }, 15 | "publicKey": { 16 | "type": "string", 17 | "format": "uri", 18 | "description": "In Blockcerts `publicKey` IRIs are typically represented with a `:` prefix. For Bitcoin transactions, this would be the recipient public Bitcoin address prefixed with `ecdsa-koblitz-pubkey:`; e.g. `ecdsa-koblitz-pubkey:14RZvYazz9H2DC2skBfpPVxax54g4yabxe`" 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /ob_v2p0/history/1.1.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Open Badges Specification Version 1.1 3 | show_sidebar: true 4 | layout: page_sub 5 | --- 6 |
7 | IMS Global Logo 8 |
9 | 10 | # {{page.title}} 11 | 12 | ## What has changed in version 1.1? 13 | Version 1.1 of the Open Badges spec is a minor change for issuers and is backwards compatible, while introducing several potentially powerful new features including Linked Data and Extensions. 14 | 15 | There are three new properties that should be included in badge objects: `@context`, `id`, and `type`. These are components of JSON-LD (for “linked data”). Linked data makes JSON explicit about the subject and content of a specific document. 16 | 17 | Extensions enable many issuers to add additional data to badges in the same way as one another, so that those who encounter extended badges can easily learn how to interpret unfamiliar data. 18 | 19 | ## What was the motivation for the changes? 20 | Open Badges are adopting Linked Data, because it will allow badges to be better understood by search engines and other applications that were not necessarily built with a knowledge of badges. Apps that were built to understand existing badges will lose no existing functionality, but may benefit from implementing new 1.1 features, which allow them to understand and display a wider range of information in badges. 21 | 22 | ## What does an issuing platform need to do in order to upgrade to the new standard? 23 | To change hosted 1.0 resources to 1.1, add the three new fields to each badge object. 24 | 25 | ### Assertion 26 | {% highlight json %} 27 | { 28 | "@context": "https://w3id.org/openbadges/v1", 29 | "type": "Assertion", 30 | "id": "https://mydomain.org/assertion/50", 31 | ... 32 | } 33 | {% endhighlight %} 34 | 35 | ### BadgeClass 36 | {% highlight json %} 37 | { 38 | "@context": "https://w3id.org/openbadges/v1", 39 | "type": "BadgeClass", 40 | "id": "https://mydomain.org/badges/1", 41 | ... 42 | } 43 | {% endhighlight %} 44 | 45 | ### Issuer 46 | {% highlight json %} 47 | { 48 | "@context": "https://w3id.org/openbadges/v1", 49 | "type": "Issuer", 50 | "id": "https://mydomain.org/issuer", 51 | ... 52 | } 53 | {% endhighlight %} 54 | 55 | 56 | ## Is 1.1 backwards compatible? 57 | Badges released under 1.1 meet all the requirements for 1.0 badges and should be recognized as valid by all applications designed to work with 1.0 badges, though those applications won't be able to take advantage of the new features offered by 1.1 until they are updated to understand it. 58 | 59 | ## What is Linked Data and JSON-LD? 60 | JSON-LD is a linked data format for JSON data. From the JSON-LD website: “Linked Data empowers people that publish and use information on the Web. It is a way to create a network of standards-based, machine-readable data across Web sites. It allows an application to start at one piece of Linked Data, and follow embedded links to other pieces of Linked Data that are hosted on different sites across the Web.” 61 | 62 | Manu Sporny has some good introductory videos [here](https://www.youtube.com/watch?v=vioCbTo3C-4) and [here](https://www.youtube.com/watch?v=UmvWk_TQ30A). 63 | 64 | ## What are Extensions? 65 | Exensions are a way for many issuers to add metadata to badges all in the same way, so that their collaboration better justifies consumer applications adapting to understand the new data. See the [extensions page](/extensions) for some examples. 66 | -------------------------------------------------------------------------------- /ob_v2p0/history/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Open Badges Specification History 3 | show_sidebar: true 4 | layout: page2 5 | --- 6 | 7 |
8 | IMS Global Logo 9 |
10 | 11 | # {{page.title}} 12 | 13 | The following documents and links detail the major changes between versions of the Open Badges spec. 14 | 15 | * [from 1.0 to 1.1](1.1.html) 16 | * [From 0.5 to 1.0](https://github.com/mozilla/openbadges/wiki/Assertion-Specification-Changes) 17 | * [0.5: Early history of the specification](https://github.com/mozilla/openbadges-backpack/wiki/Assertions/_history) -------------------------------------------------------------------------------- /ob_v2p0/images/badge-alliance-logo-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/ob_v2p0/images/badge-alliance-logo-web.png -------------------------------------------------------------------------------- /ob_v2p0/images/core-badge-elements-faq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/ob_v2p0/images/core-badge-elements-faq.png -------------------------------------------------------------------------------- /ob_v2p0/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/ob_v2p0/images/favicon.ico -------------------------------------------------------------------------------- /ob_v2p0/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/ob_v2p0/images/favicon.png -------------------------------------------------------------------------------- /ob_v2p0/images/imsglobal-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/ob_v2p0/images/imsglobal-logo.png -------------------------------------------------------------------------------- /ob_v2p0/images/openbadges-logo-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/ob_v2p0/images/openbadges-logo-dark.png -------------------------------------------------------------------------------- /ob_v2p0/impl/assets/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/ob_v2p0/impl/assets/image1.png -------------------------------------------------------------------------------- /ob_v2p0/javascripts/scale.fix.js: -------------------------------------------------------------------------------- 1 | var metas = document.getElementsByTagName('meta'); 2 | var i; 3 | if (navigator.userAgent.match(/iPhone/i)) { 4 | for (i=0; i The Open API Specification (OAS) defines a standard, programming language-agnostic interface description for HTTP APIs, which allows both humans and computers to discover and understand the capabilities of a service without requiring access to source code, additional documentation, or inspection of network traffic. When properly defined via OpenAPI, a consumer can understand and interact with the remote service with a minimal amount of implementation logic. Similar to what interface descriptions have done for lower-level programming, the OpenAPI Specification removes guesswork in calling a service. 13 | 14 | This standard has OpenAPI 3.0 files for the Badge Connect® API in both JSON and YAML format: 15 | * [JSON OpenAPI File](https://purl.imsglobal.org/spec/ob/v2p1/schema/openapi/imsob_v2p1.json) 16 | * [YAML OpenAPI File](https://purl.imsglobal.org/spec/ob/v2p1/schema/openapi/imsob_v2p1.yaml) 17 | 18 | * [[[OB-JSON-21]]] 19 | * Badge Connect® API JSON-LD Context File 20 | 21 | From the JSON-LD 1.1 Specification [[json-ld11]], 22 | > When two people communicate with one another, the conversation takes place in a shared environment, typically called "the context of the conversation". This shared context allows the individuals to use shortcut terms, like the first name of a mutual friend, to communicate more quickly but without losing accuracy. A context in JSON-LD works in the same way. It allows two applications to use shortcut terms to communicate with one another more efficiently, but without losing accuracy. 23 | 24 | > Simply speaking, a context is used to map terms to IRIs. Terms are case sensitive and any valid string that is not a reserved JSON-LD keyword can be used as a term. 25 | 26 | This specification includes this JSON-LD Context file: 27 | 28 | * https://purl.imsglobal.org/spec/ob/v2p1/context/ob_v2p1.jsonld 29 | `; 30 | -------------------------------------------------------------------------------- /ob_v2p1/ob-errata-v2p1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 27 | 28 | 29 | 30 |
31 | 32 |
33 | 34 |
35 |

Introduction

36 | 37 |
38 | 39 |
40 |
41 | 42 |
43 |

Errata

44 | 45 |

There is no errata.

46 |
47 | 48 |
49 |

Revision History

50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 |
Version No.Document VersionRelease DateComments
Version 2.1 IMS Candidate Final Public4October 25, 2021Fixed a number of specification and documentation issues.
Version 2.1 IMS Candidate Final Public3October 7, 2020Releasing as Candidate Final Public.
Version 2.1 IMS Candidate Final2January 24, 2020Second coordinated release.
v2.1 Candidate Final1August 29, 2019First release of the Candidate Final specification.
v2.1 Final1November 27, 2023Open Badges 2.1 Final release.
92 |
93 | 94 | 95 | -------------------------------------------------------------------------------- /ob_v2p1/ob-terms.md: -------------------------------------------------------------------------------- 1 | var terms = ` 2 | 3 | ### Terminology 4 | The following terms are used throughout this document. 5 | 6 | - **Assertion**: A representation of an awarded badge, used to share information about a badge belonging to one recipient. 7 | - **Backpack**: A term originally used to describe Open Badges services that provide importing, aggregation, and hosting features for recipients. These services match most closely with the role we now define as an Open Badge “Host” application. May also refer to the Mozilla Backpack. 8 | - **BadgeClass**: A collection of information about the accomplishment recognized by the Open Badge. Many assertions may be created corresponding to one BadgeClass. 9 | - **Badge Connect® API**: Name of the RESTful web service for transfering assertions and profiles between systems. 10 | - **Badge Issuer**: A service that allows for the creation of BadgeClasses and the subsequent issuing of Assertions to recipients that conform to the Open Badges specification. Beginning with Open Badges 2.0, the candidate platform must issue a valid baked badge and demonstrate how the badge is retrieved by the recipient. 11 | - **Badge Displayer**: An application that displays verified badges to viewers. Beginning with Open Badges 2.0, the candidate platform must display a minimum set of badge metadata and support viewer-initiated verification of a badge. 12 | - **Badge Host**: An application that can import, aggregate, and publicly host Assertions for recipients. It also supports export of badges at user request. Beginning with Open Badges 2.0, the candidate platform must be able to import all formats of Open Badges as well as prove that badge metadata is not lost upon export of the badge. 13 | - **Baked badge**: Badge Assertions may be “baked” into image files as portable credentials. 14 | - **Candidate platform**: A platform implementing the Open Badges specification with the intent to obtain certification from IMS. They may be in the process to obtain certification. 15 | - **Criteria**: Detailed information about what must be done in order to be recognized with an assertion of a particular BadgeClass. Potential recipients may use criteria to understand what they must do; consumers may use criteria to understand what recipients did in order to earn the badge. 16 | - **Evidence**: Links to and descriptions of evidence related to the issuance of an Assertion, such as portfolio items or narratives that describe a badge recipient's work. 17 | - **Extensions**: Extensions are a means for issuers to add additional functionality through the use of metadata on Badge Objects beyond what the standard specifies itself. 18 | - **Validation and verification (of badge assertions)**: Data validation is a procedure that ensures a cluster of data objects that form an Open Badge are appropriately formatted, published, and linked and that each data object conforms to requirements for its class. Validation of all data class instances used in an Open Badge is a part of badge verification. Verification is the process of ensuring the data that makes up an Open Badge is correct. It includes a number of data validation checks as well as procedures to ensure the badge is trustworthy. Verification is distinct from compliance certification for applications and services that implement the specification, though verification is typically a component of certification programs. See Verification in the current specification. 19 | 20 |
21 | `; 22 | -------------------------------------------------------------------------------- /ob_v2p1/schema/json/imsob_v2p1v2p1-getassertions-200-responsepayload-schemav1p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$id" : "getAssertions-200-responsepayload-schema.json", 4 | "title" : "Open Badges Version 2.1 IMS Candidate Final JSON Schema Binding (getAssertions-200-responsepayload-schema)", 5 | "description" : "Author-Alexander Hripak, Nate Otto, Justin Pitcher, and Chris Houston; Version-2.1; Release Date-August 29, 2019. ", 6 | "type" : "object", 7 | "properties" : { 8 | "status" : { 9 | "description" : "The response status object.", 10 | "$ref" : "#/definitions/StatusDType" 11 | }, 12 | "assertions" : { 13 | "description" : "An array of unsigned assertions in JSON-LD serialization format.", 14 | "type" : "array", 15 | "minItems" : 0, 16 | "items" : { 17 | "$ref" : "#/definitions/AssertionDType" 18 | } 19 | }, 20 | "signedAssertions" : { 21 | "description" : "Model Primitive Datatype = String. An array of signed assertions in JWS Compact Serialization format.", 22 | "type" : "array", 23 | "minItems" : 0, 24 | "items" : { 25 | "type" : "string", 26 | } 27 | } 28 | }, 29 | "required" : [ "status" ], 30 | "additionalProperties" : false, 31 | "definitions" : { 32 | "AssertionDType" : { 33 | "description" : "Open Badges 2.0 Assertion object.", 34 | "type" : "object", 35 | "properties" : { 36 | "id" : { 37 | "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for this object.", 38 | "type" : "string" 39 | }, 40 | "type" : { 41 | "description" : "Model Primitive Datatype = String. The JSON-LD type of this object. Normally 'Assertion'.", 42 | "type" : "string" 43 | } 44 | }, 45 | "required" : [ "id","type" ], 46 | "patternProperties" : { 47 | "^[^:][^:]*:[^:][^:]*$" : { 48 | "oneOf": [{ "type": "string" }, { "type": "array" }, { "type": "boolean" }, { "type": "number" }, { "type": "integer" }] 49 | } 50 | }, 51 | "additionalProperties" : true 52 | }, 53 | "StatusDType" : { 54 | "description" : "Response status.", 55 | "type" : "object", 56 | "properties" : { 57 | "error" : { 58 | "description" : "Model Primitive Datatype = String. A nullable string and the human-readable message describing the problem.", 59 | "type" : "string" 60 | }, 61 | "statusCode" : { 62 | "description" : "Model Primitive Datatype = Integer. The HTTP status code of the response.", 63 | "type" : "integer", 64 | "format" : "int32" 65 | }, 66 | "statusText" : { 67 | "description" : "A string matching one of the enumerated and allowed values for the given endpoint.", 68 | "type" : "string", 69 | "enum" : [ "OK","REQUEST_VALIDATION_ERROR","RECIPIENT_PROFILE_MISMATCH","INVALID_BADGE","BAD_REQUEST","UNAUTHENTICATED","PERMISSION_DENIED","NOT_FOUND","METHOD_NOT_ALLOWED" ] 70 | } 71 | }, 72 | "required" : [ "statusCode" ], 73 | "additionalProperties" : false 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /ob_v2p1/schema/json/imsob_v2p1v2p1-getassertions-400-401-404-405-500-responsepayload-schemav1p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$id" : "getAssertions-400-401-404-405-500-responsepayload-schema.json", 4 | "title" : "Open Badges Version 2.1 IMS Candidate Final JSON Schema Binding (getAssertions-400-401-404-405-500-responsepayload-schema)", 5 | "description" : "Author-Alexander Hripak, Nate Otto, Justin Pitcher, and Chris Houston; Version-2.1; Release Date-August 29, 2019. ", 6 | "type" : "object", 7 | "properties" : { 8 | "status" : { 9 | "description" : "The status of the request.", 10 | "$ref" : "#/definitions/StatusDType" 11 | } 12 | }, 13 | "required" : [ "status" ], 14 | "additionalProperties" : false, 15 | "definitions" : { 16 | "StatusDType" : { 17 | "description" : "Response status.", 18 | "type" : "object", 19 | "properties" : { 20 | "error" : { 21 | "description" : "Model Primitive Datatype = String. A nullable string and the human-readable message describing the problem.", 22 | "type" : "string" 23 | }, 24 | "statusCode" : { 25 | "description" : "Model Primitive Datatype = Integer. The HTTP status code of the response.", 26 | "type" : "integer", 27 | "format" : "int32" 28 | }, 29 | "statusText" : { 30 | "description" : "A string matching one of the enumerated and allowed values for the given endpoint.", 31 | "type" : "string", 32 | "enum" : [ "OK","REQUEST_VALIDATION_ERROR","RECIPIENT_PROFILE_MISMATCH","INVALID_BADGE","BAD_REQUEST","UNAUTHENTICATED","PERMISSION_DENIED","NOT_FOUND","METHOD_NOT_ALLOWED" ] 33 | } 34 | }, 35 | "required" : [ "statusCode" ], 36 | "additionalProperties" : false 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /ob_v2p1/schema/json/imsob_v2p1v2p1-getprofile-200-responsepayload-schemav1p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$id" : "getProfile-200-responsepayload-schema.json", 4 | "title" : "Open Badges Version 2.1 IMS Candidate Final JSON Schema Binding (getProfile-200-responsepayload-schema)", 5 | "description" : "Author-Alexander Hripak, Nate Otto, Justin Pitcher, and Chris Houston; Version-2.1; Release Date-August 29, 2019. ", 6 | "type" : "object", 7 | "properties" : { 8 | "status" : { 9 | "description" : "The status of the request.", 10 | "$ref" : "#/definitions/StatusDType" 11 | }, 12 | "profile" : { 13 | "description" : "The profile.", 14 | "$ref" : "#/definitions/ProfileDType" 15 | } 16 | }, 17 | "required" : [ "status" ], 18 | "additionalProperties" : false, 19 | "definitions" : { 20 | "ProfileDType" : { 21 | "description" : "Open Badges 2.0 Profile object.", 22 | "type" : "object", 23 | "properties" : { 24 | "id" : { 25 | "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for this object.", 26 | "type" : "string" 27 | }, 28 | "type" : { 29 | "description" : "Model Primitive Datatype = String. The JSON-LD type of this object. Normally 'Profile'.", 30 | "type" : "string" 31 | } 32 | }, 33 | "required" : [ "id","type" ], 34 | "patternProperties" : { 35 | "^[^:][^:]*:[^:][^:]*$" : { 36 | "oneOf": [{ "type": "string" }, { "type": "array" }, { "type": "boolean" }, { "type": "number" }, { "type": "integer" }] 37 | } 38 | }, 39 | "additionalProperties" : true 40 | }, 41 | "StatusDType" : { 42 | "description" : "Response status.", 43 | "type" : "object", 44 | "properties" : { 45 | "error" : { 46 | "description" : "Model Primitive Datatype = String. A nullable string and the human-readable message describing the problem.", 47 | "type" : "string" 48 | }, 49 | "statusCode" : { 50 | "description" : "Model Primitive Datatype = Integer. The HTTP status code of the response.", 51 | "type" : "integer", 52 | "format" : "int32" 53 | }, 54 | "statusText" : { 55 | "description" : "A string matching one of the enumerated and allowed values for the given endpoint.", 56 | "type" : "string", 57 | "enum" : [ "OK","REQUEST_VALIDATION_ERROR","RECIPIENT_PROFILE_MISMATCH","INVALID_BADGE","BAD_REQUEST","UNAUTHENTICATED","PERMISSION_DENIED","NOT_FOUND","METHOD_NOT_ALLOWED" ] 58 | } 59 | }, 60 | "required" : [ "statusCode" ], 61 | "additionalProperties" : false 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /ob_v2p1/schema/json/imsob_v2p1v2p1-getprofile-400-401-404-405-500-responsepayload-schemav1p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$id" : "getProfile-400-401-404-405-500-responsepayload-schema.json", 4 | "title" : "Open Badges Version 2.1 IMS Candidate Final JSON Schema Binding (getProfile-400-401-404-405-500-responsepayload-schema)", 5 | "description" : "Author-Alexander Hripak, Nate Otto, Justin Pitcher, and Chris Houston; Version-2.1; Release Date-August 29, 2019. ", 6 | "type" : "object", 7 | "properties" : { 8 | "status" : { 9 | "description" : "The status of the request.", 10 | "$ref" : "#/definitions/StatusDType" 11 | } 12 | }, 13 | "required" : [ "status" ], 14 | "additionalProperties" : false, 15 | "definitions" : { 16 | "StatusDType" : { 17 | "description" : "Response status.", 18 | "type" : "object", 19 | "properties" : { 20 | "error" : { 21 | "description" : "Model Primitive Datatype = String. A nullable string and the human-readable message describing the problem.", 22 | "type" : "string" 23 | }, 24 | "statusCode" : { 25 | "description" : "Model Primitive Datatype = Integer. The HTTP status code of the response.", 26 | "type" : "integer", 27 | "format" : "int32" 28 | }, 29 | "statusText" : { 30 | "description" : "A string matching one of the enumerated and allowed values for the given endpoint.", 31 | "type" : "string", 32 | "enum" : [ "OK","REQUEST_VALIDATION_ERROR","RECIPIENT_PROFILE_MISMATCH","INVALID_BADGE","BAD_REQUEST","UNAUTHENTICATED","PERMISSION_DENIED","NOT_FOUND","METHOD_NOT_ALLOWED" ] 33 | } 34 | }, 35 | "required" : [ "statusCode" ], 36 | "additionalProperties" : false 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /ob_v2p1/schema/json/imsob_v2p1v2p1-postassertion-200-400-401-404-405-500-responsepayload-schemav1p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$id" : "postAssertion-200-400-401-404-405-500-responsepayload-schema.json", 4 | "title" : "Open Badges Version 2.1 IMS Candidate Final JSON Schema Binding (postAssertion-200-400-401-404-405-500-responsepayload-schema)", 5 | "description" : "Author-Alexander Hripak, Nate Otto, Justin Pitcher, and Chris Houston; Version-2.1; Release Date-August 29, 2019. ", 6 | "type" : "object", 7 | "properties" : { 8 | "status" : { 9 | "description" : "The status of the request.", 10 | "$ref" : "#/definitions/StatusDType" 11 | } 12 | }, 13 | "required" : [ "status" ], 14 | "additionalProperties" : false, 15 | "definitions" : { 16 | "StatusDType" : { 17 | "description" : "Response status.", 18 | "type" : "object", 19 | "properties" : { 20 | "error" : { 21 | "description" : "Model Primitive Datatype = String. A nullable string and the human-readable message describing the problem.", 22 | "type" : "string" 23 | }, 24 | "statusCode" : { 25 | "description" : "Model Primitive Datatype = Integer. The HTTP status code of the response.", 26 | "type" : "integer", 27 | "format" : "int32" 28 | }, 29 | "statusText" : { 30 | "description" : "A string matching one of the enumerated and allowed values for the given endpoint.", 31 | "type" : "string", 32 | "enum" : [ "OK","REQUEST_VALIDATION_ERROR","RECIPIENT_PROFILE_MISMATCH","INVALID_BADGE","BAD_REQUEST","UNAUTHENTICATED","PERMISSION_DENIED","NOT_FOUND","METHOD_NOT_ALLOWED" ] 33 | } 34 | }, 35 | "required" : [ "statusCode" ], 36 | "additionalProperties" : false 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /ob_v2p1/schema/json/imsob_v2p1v2p1-postassertion-requestpayload-schemav1p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$id" : "postAssertion-requestpayload-schema.json", 4 | "title" : "Open Badges Version 2.1 IMS Candidate Final JSON Schema Binding (postAssertion-requestpayload-schema)", 5 | "description" : "Author-Alexander Hripak, Nate Otto, Justin Pitcher, and Chris Houston; Version-2.1; Release Date-August 29, 2019. ", 6 | "type" : "object", 7 | "properties" : { 8 | "assertion" : { 9 | "description" : "An unsigned assertion in JSON-LD serialization format.", 10 | "$ref" : "#/definitions/AssertionDType" 11 | }, 12 | "signedAssertion" : { 13 | "description" : "Model Primitive Datatype = String. A signed assertion in JWS Compact Serialization format.", 14 | "type" : "string" 15 | } 16 | }, 17 | "additionalProperties" : false, 18 | "definitions" : { 19 | "AssertionDType" : { 20 | "description" : "Open Badges 2.0 Assertion object.", 21 | "type" : "object", 22 | "properties" : { 23 | "id" : { 24 | "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for this object.", 25 | "type" : "string" 26 | }, 27 | "type" : { 28 | "description" : "Model Primitive Datatype = String. The JSON-LD type of this object. Normally 'Assertion'.", 29 | "type" : "string" 30 | } 31 | }, 32 | "required" : [ "id","type" ], 33 | "patternProperties" : { 34 | "^[^:][^:]*:[^:][^:]*$" : { 35 | "oneOf": [{ "type": "string" }, { "type": "array" }, { "type": "boolean" }, { "type": "number" }, { "type": "integer" }] 36 | } 37 | }, 38 | "additionalProperties" : true 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /ob_v2p1/schema/json/imsob_v2p1v2p1-postprofile-200-responsepayload-schemav1p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$id" : "postProfile-200-responsepayload-schema.json", 4 | "title" : "Open Badges Version 2.1 IMS Candidate Final JSON Schema Binding (postProfile-200-responsepayload-schema)", 5 | "description" : "Author-Alexander Hripak, Nate Otto, Justin Pitcher, and Chris Houston; Version-2.1; Release Date-August 29, 2019. ", 6 | "type" : "object", 7 | "properties" : { 8 | "status" : { 9 | "description" : "The status of the request.", 10 | "$ref" : "#/definitions/StatusDType" 11 | }, 12 | "profile" : { 13 | "description" : "The profile.", 14 | "$ref" : "#/definitions/ProfileDType" 15 | } 16 | }, 17 | "required" : [ "status" ], 18 | "additionalProperties" : false, 19 | "definitions" : { 20 | "ProfileDType" : { 21 | "description" : "Open Badges 2.0 Profile object.", 22 | "type" : "object", 23 | "properties" : { 24 | "id" : { 25 | "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for this object.", 26 | "type" : "string" 27 | }, 28 | "type" : { 29 | "description" : "Model Primitive Datatype = String. The JSON-LD type of this object. Normally 'Profile'.", 30 | "type" : "string" 31 | } 32 | }, 33 | "required" : [ "id","type" ], 34 | "patternProperties" : { 35 | "^[^:][^:]*:[^:][^:]*$" : { 36 | "oneOf": [{ "type": "string" }, { "type": "array" }, { "type": "boolean" }, { "type": "number" }, { "type": "integer" }] 37 | } 38 | }, 39 | "additionalProperties" : true 40 | }, 41 | "StatusDType" : { 42 | "description" : "Response status.", 43 | "type" : "object", 44 | "properties" : { 45 | "error" : { 46 | "description" : "Model Primitive Datatype = String. A nullable string and the human-readable message describing the problem.", 47 | "type" : "string" 48 | }, 49 | "statusCode" : { 50 | "description" : "Model Primitive Datatype = Integer. The HTTP status code of the response.", 51 | "type" : "integer", 52 | "format" : "int32" 53 | }, 54 | "statusText" : { 55 | "description" : "A string matching one of the enumerated and allowed values for the given endpoint.", 56 | "type" : "string", 57 | "enum" : [ "OK","REQUEST_VALIDATION_ERROR","RECIPIENT_PROFILE_MISMATCH","INVALID_BADGE","BAD_REQUEST","UNAUTHENTICATED","PERMISSION_DENIED","NOT_FOUND","METHOD_NOT_ALLOWED" ] 58 | } 59 | }, 60 | "required" : [ "statusCode" ], 61 | "additionalProperties" : false 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /ob_v2p1/schema/json/imsob_v2p1v2p1-postprofile-400-401-404-405-responsepayload-schemav1p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$id" : "postProfile-400-401-404-405-responsepayload-schema.json", 4 | "title" : "Open Badges Version 2.1 IMS Candidate Final JSON Schema Binding (postProfile-400-401-404-405-responsepayload-schema)", 5 | "description" : "Author-Alexander Hripak, Nate Otto, Justin Pitcher, and Chris Houston; Version-2.1; Release Date-August 29, 2019. ", 6 | "type" : "object", 7 | "properties" : { 8 | "status" : { 9 | "description" : "The status of the request.", 10 | "$ref" : "#/definitions/StatusDType" 11 | } 12 | }, 13 | "required" : [ "status" ], 14 | "additionalProperties" : false, 15 | "definitions" : { 16 | "StatusDType" : { 17 | "description" : "Response status.", 18 | "type" : "object", 19 | "properties" : { 20 | "error" : { 21 | "description" : "Model Primitive Datatype = String. A nullable string and the human-readable message describing the problem.", 22 | "type" : "string" 23 | }, 24 | "statusCode" : { 25 | "description" : "Model Primitive Datatype = Integer. The HTTP status code of the response.", 26 | "type" : "integer", 27 | "format" : "int32" 28 | }, 29 | "statusText" : { 30 | "description" : "A string matching one of the enumerated and allowed values for the given endpoint.", 31 | "type" : "string", 32 | "enum" : [ "OK","REQUEST_VALIDATION_ERROR","RECIPIENT_PROFILE_MISMATCH","INVALID_BADGE","BAD_REQUEST","UNAUTHENTICATED","PERMISSION_DENIED","NOT_FOUND","METHOD_NOT_ALLOWED" ] 33 | } 34 | }, 35 | "required" : [ "statusCode" ], 36 | "additionalProperties" : false 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /ob_v2p1/schema/json/imsob_v2p1v2p1-postprofile-requestpayload-schemav1p0.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$id" : "postProfile-requestpayload-schema.json", 4 | "title" : "Open Badges Version 2.1 IMS Candidate Final JSON Schema Binding (postProfile-requestpayload-schema)", 5 | "description" : "Author-Alexander Hripak, Nate Otto, Justin Pitcher, and Chris Houston; Version-2.1; Release Date-August 29, 2019. ", 6 | "type" : "object", 7 | "properties" : { 8 | "id" : { 9 | "description" : "Model Primitive Datatype = NormalizedString. Unique IRI for this object.", 10 | "type" : "string" 11 | }, 12 | "type" : { 13 | "description" : "Model Primitive Datatype = String. The JSON-LD type of this object. Normally 'Profile'.", 14 | "type" : "string" 15 | } 16 | }, 17 | "required" : [ "id","type" ], 18 | "additionalProperties" : true 19 | } 20 | -------------------------------------------------------------------------------- /ob_v2p1/schema/jsonld-context/ob_v2p1.jsonld: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /ob_v3p0/abstract.md: -------------------------------------------------------------------------------- 1 | var abstract = ` 2 | 3 | ## Abstract 4 | 5 | This specification is a new version of the [1EdTech Open Badges Specification](https://www.imsglobal.org/activity/digital-badges) that aligns with the conventions of the [[[VC-DATA-MODEL-2.0]]] for the use cases of [=Defined Achievement Claim=] and a [=Skill Claim=]. The credentials that are produced are easily be bundled into [=Comprehensive Learner Records=] and [=Verifiable Presentations=]. Portability and learner data privacy are improved by expanding the usage of cryptographic proofs/signatures, because this format will be compatible with a growing array of proof schemas that are developed for the Verifiable Credentials Data Model. 6 | 7 | `; 8 | -------------------------------------------------------------------------------- /ob_v3p0/bestpractices.md: -------------------------------------------------------------------------------- 1 | var bestpractices = ` 2 | 3 | ## Best Practices and Implementation Guide 4 | 5 | ### Terminology 6 | 7 | Some of the terms used in this section: 8 | 9 | - Credential: A set of one or more [=claims=] made by an [=issuer=]. A [=verifiable credential=] is a tamper-evident credential that has authorship that can be cryptographically verified. Verifiable credentials can be used to build [=verifiable presentations=], which can also be cryptographically verified. 10 | - DID URL: A DID plus any additional syntactic component that conforms to the definition in Section 3.2 DID URL Syntax of [[DID-CORE]]. This includes an optional DID path (with its leading / character), optional DID query (with its leading ? character), and optional DID fragment (with its leading # character). 11 | - Linked Data Proof: A type of embedded signature proof. 12 | - Presentation: Data derived from one or more [=verifiable credentials=], issued by one or more [=issuers=], that is shared with a specific [=verifier=]. A [=verifiable presentation=] is a tamper-evident presentation encoded in such a way that authorship of the data can be trusted after a process of cryptographic verification. 13 | - Subject: A person about which [=claims=] are made. 14 | 15 | ### Support for Decentralized Identifiers (DIDs) 16 | 17 | This specification supports the use of [=DID URLs=] as an identifier for the [=issuer=] and [=subject=] of a [=credential=]. This specification also supports the use of [=DID URLs=] to identify the public key used to verify [=verifiable credentials=] with [=Linked Data Proofs=]. Until the [[[DID-CORE]]] specification is approved by W3C and this specification is updated, conformance will not require DID support. 18 | 19 | `; 20 | -------------------------------------------------------------------------------- /ob_v3p0/cert/abstract.md: -------------------------------------------------------------------------------- 1 | var abstract = ` 2 | 3 | ## Abstract 4 | 5 | Open Badges are visual symbols of accomplishments packed with verifiable metadata according to the Open Badges specification. The Open Badges 3.0 specification [OB-30] defines the properties necessary to define an achievement and award it to a recipient, as well as procedures for verifying badge authenticity and “baking” badge information into portable image files. It includes term definitions for representations of data in Open Badges and defines an API for exchanging badge information. These term definitions appear in the current Open Badges JSON-LD Context File. 6 | 7 | This version of the specification aligns Open Badges with the conventions of the [[[VC-DATA-MODEL-2.0]]] for the use cases of [=Defined Achievement Claim=] and a [=Skill Claim=]. The credentials that are produced are easily be bundled into [=Comprehensive Learner Records=] and [=Verifiable Presentations=]. Portability and learner data privacy are improved by expanding the usage of cryptographic proofs/signatures, because this format will be compatible with a growing array of proof schemas that are developed for the Verifiable Credentials Data Model. 8 | 9 | `; -------------------------------------------------------------------------------- /ob_v3p0/cert/conformance.md: -------------------------------------------------------------------------------- 1 | var conformance = ` 2 | 3 | ## Conformance and Certification 4 | 5 | The goal of 1EdTech certification for Open Badges [[OB-30]] is to ensure interoperable implementations of badging systems that generate and issue digital badges as well as those that host and display badges. 6 | 7 | 1EdTech certification for Open Badges demands features and capabilities beyond those that are strictly required by the specification. These additional features are defined in this document. The specification is intentionally left very flexible to allow it to be used for many purposes. Gaining this certification is expected to be more difficult than simply meeting the minimum requirements for producing a valid Open Badge. 8 | 9 | Certification may be achieved in one or more of the following services: 10 | 11 | * Open Badges Issuer 12 | * Open Badges Displayer 13 | * Open Badges Host 14 | 15 | The service types and associated certification tests are defined below. 16 | 17 | ### API categorization 18 | 19 | This specification defines a [=RESTful API=] protocol to be implemented by applications serving in the roles of [=Service Consumer=] and [=Service Provider=]. The API uses OAuth 2.0 for authentication and granular resource-based permission scopes. 20 | 21 | All the endpoints defined in the [Open Badges 3.0 API](https://imsglobal.org/spec/ob/v3p0#api) are grouped in four services for certification purposes. This grouping 22 | is based on the role of the [=candidate platform=] in the API architecture and the purpose of the operation. Thus, the resulting grouping is as follows: 23 | 24 | Consumer
(Initiates Requests) | Provider
(Responds to Requests) 25 | :--------------------------------: | :----------------------------------: 26 | [Service Consumer (Read)](#service-consumer-read) | [Service Provider (Read)](#service-provider-read) 27 | [Service Consumer (Write)](#service-consumer-write) | [Service Provider (Write)](#service-provider-write) 28 | 29 | These services contain a set of required endpoints a [=candidate platform=] must support for its further certification. Some services may contain a set of optional endpoints that, if supported by the [=candidate platform=], it must support as well. 30 | 31 | ### The Conformance Process 32 | 33 | The process for conformance testing role implementations of Open Badges includes the following: 34 | 35 | * First, launch the [1EdTech Conformance Test Suite](https://certification.imsglobal.org/certification/verifiable-credentials) for Open Badges 3.0 and follow the onscreen instructions to run the tests. 36 | * Once the tests have been successfully run, submit your test results. A copy of your test results will be sent to your email address. 37 | 38 | To pass certification, you must take the following steps: 39 | 40 | * You must be an 1EdTech Digital Credentials and Badges Alliance Member, an 1EdTech Affiliate Member, or 1EdTech Contributing Member. 41 | * You must pass all the tests associated with the features you are applying for using the certification suite hosted on the 1EdTech website. 42 | * The tests must be completed by a designated representative of the 1EdTech member organization, and you must agree that there is no misrepresentation or manipulation of results in the submitted information. 43 | 44 | After 1EdTech reviews your submitted information and notifies you that your application is approved, you can claim certification to Open Badges 3.0 and display the 1EdTech certified logo on your website and in your software. The 1EdTech Global Certified Products Directory will list your conformance details. 45 | 46 | 47 | 48 | 49 | 50 | `; -------------------------------------------------------------------------------- /ob_v3p0/cert/displayer.md: -------------------------------------------------------------------------------- 1 | var displayer = ` 2 | 3 | ## Open Badges 3.0 Displayer Service Conformance {#displayer-conformance} 4 | 5 | An Open Badges Displayer is an application that displays and verifies badges for viewers. The candidate platform must support viewer-initiated verification of a badge. 6 | 7 | ### Verification and status 8 | 9 | The tests within this section refer to possible values of the status of a badge. The meaning of these values and how to determine them from a credential is defined in sections 9.1 and 9.2 of [[OB-30]]. As a quick summary: 10 | 11 | - A Credential is revoked if the \`credentialStatus\` property is present, and the \`type\` of the CredentialStatus object is "1EdTechRevocationList". 12 | - A Credential is expired if the current date and time is after the \`validUntil\`. 13 | 14 | ### Tests {#display-tests} 15 | 16 | 1. The conformance test system will display the URL of three badges. One of them is neither expired nor revoked, other is expired but not revoked and the last one is not expired but revoked. The candidate platform must verify these badges and submit the status in the conformance test system. Demonstrate through separate videos that the platform allows viewers of badges to see the following data in all provided badges: 17 | 18 | - image (if the badge provided is a baked badge) 19 | - name 20 | - description 21 | - issuer name 22 | - issuedOn Date 23 | - status (expired and/or revoked) 24 | 25 | 1. Demonstrate through video that the platform allows viewers of badges to do the following: 26 | - Trigger verification of the badge and retrieve results verifying that the badge credential is not expired, and not revoked 27 | 28 | 1. The conformance test system will display the URL of three badges created using [[[VC-DATA-MODEL]]] ([[VC-DATA-MODEL]]) with 29 | the same characteristics as in Test 1. The candidate platform must verify these badges and submit the status in the conformance test system. Demonstrate through separate videos that the platform allows viewers of badges to see the following data in all provided badges: 30 | 31 | - image (if the badge provided is a baked badge) 32 | - name 33 | - description 34 | - issuer name 35 | - issuedOn Date 36 | - status (expired and/or revoked) 37 | 38 | 1. Demonstrate through video that the platform allows viewers of badges to do the following: 39 | - Trigger verification of the badge and retrieve results verifying that the badge credential is not expired, and not revoked 40 | 41 | #### Supported Proof Mechanisms 42 | 43 | Open Badges Verifiers must support the following supported proof mechanisms for 44 | Linked Data Proof format: 45 | 46 | - [[[VC-DI-EDDSA]]] suite with the \`eddsa-rdfc-2022\` algorithm. 47 | 48 | `; 49 | -------------------------------------------------------------------------------- /ob_v3p0/cert/documents.md: -------------------------------------------------------------------------------- 1 | var documents = ` 2 | 3 | 4 | `; -------------------------------------------------------------------------------- /ob_v3p0/cert/terms.md: -------------------------------------------------------------------------------- 1 | var terms = ` 2 | 3 | 4 | `; -------------------------------------------------------------------------------- /ob_v3p0/context.md: -------------------------------------------------------------------------------- 1 | # Context 2 | 3 | OB 3.0 context file uses a versioning as a result of https://github.com/1EdTech/openbadges-specification/issues/497. This document recaps the changes made to this file 4 | 5 | ## Changelog 6 | 7 | ### 3.0.3 8 | 9 | - `@id` of `image` in `Achievement` now points to `https://purl.imsglobal.org/spec/vc/ob/vocab.html#image` 10 | - `@id` of `achievement` in `AchievementSubject` now points to `https://purl.imsglobal.org/spec/vc/ob/vocab.html#achievement` 11 | - `@id` of `image` in `AchievementSubject` now points to `https://purl.imsglobal.org/spec/vc/ob/vocab.html#image` 12 | - `@id` of `image` in `Profile` now points to `https://purl.imsglobal.org/spec/vc/ob/vocab.html#image` 13 | - Removed `image` attribute 14 | 15 | ### 3.0.2 16 | 17 | - Added `@protected` to all `@context`. 18 | - `"@type": "xsd:string"`` was removed where it appears. This is the default type, but in rare cases, processing systems handle an explicit declaration of this type differently from allowing the default. For VCs, it is considered more reliable to just allow the default to be applied. 19 | - `id` and `type`` aliases are redeclared in every context. This avoids a narrow type of attack where somebody might place a context that redeclares these terms in between the top layer and a class-specific layer of a credential, changing the values of these terms within the class implementation. 20 | - Changed `@container` of `allowedValue` from `@set` to `@list`, as `allowedValue` is an ordered list. 21 | -`@id` of `image` now points to `https://purl.imsglobal.org/spec/vc/ob/vocab.html#Image`. This prevent a redefinition of the term, since its previous value was incorrectly equals to `Achievement.image`. 22 | 23 | ### 3.0.1 24 | 25 | - Fixed `Achievement`'s `creator` IRI. Now points to `https://purl.imsglobal.org/spec/vc/ob/vocab.html#creator` 26 | - Fixed `AchievementSubject`'s `achievement` IRI. Now points to `https://purl.imsglobal.org/spec/vc/ob/vocab.html#achievement-0` 27 | - Fixed `Profiles`'s `phone` IRI. Now points to `https://purl.imsglobal.org/spec/vc/ob/vocab.html#phone` 28 | - Added `image` attribute to `Achievement`. 29 | - Removed `@type` from `alignment`. This fixes a compaction error. 30 | - Removed `@type` from `otherIdentifier`. This fixes a compaction error. 31 | - Removed `@type` from `Achievement`'s `resultDescription`. This fixes a compaction error. 32 | - Removed `@type` from `AchievementSubject`'s `identifier`. This fixes a compaction error. 33 | - Added `image` attribute to `AchievementSubject`. 34 | - Removed `@type` from `AchievementSubject`'s `result`. This fixes a compaction error. 35 | - Fixed `@type` from `AchievementSubject`'s `source`. This fixes a compaction error. 36 | - Removed `@type` from `ResultDescription`'s `rubricCriterionLevel`. This fixes a compaction error. 37 | - Removed `@type` from `endorsement`. This fixes a compaction error. 38 | - Added `image` attribute to `Profile`. 39 | - Fixed `Profile`'s `address` IRI. Now points to `https://purl.imsglobal.org/spec/vc/ob/vocab.html#address` 40 | - Removed `@type` from `Achievement`'s `related`. This fixes a compaction error. 41 | - Added `type` attribute to `Profile`s `address`. This fixes a compaction error. 42 | - Fixed `type` attribute of `Profile`s `parentOrg`. 43 | - Fixed `type` attribute of `Image`. 44 | - Fixed `@id` attribute of `Alignment`. Now points to `https://schema.org/AlignmentObject`. 45 | 46 | 47 | -------------------------------------------------------------------------------- /ob_v3p0/datamodel.html: -------------------------------------------------------------------------------- 1 | var datamodel = ` 2 | 3 |
4 |

5 | The data models in this section are shared by [[[OB-30]]] and [[[CLR-20]]]. 6 |

7 |
8 |
9 |

10 | The data models in this section are used by the [[[#api]]]. 11 |

12 |
13 |
14 |

15 | The data models in this section are shared by all 1EdTech service specifications. 16 |

17 |
18 |
19 |

20 | The data models in this section are shared by all 1EdTech service specifications. 21 |

22 |
23 |
24 |

25 | The data models in this section are shared by all 1EdTech service specifications. 26 |

27 |
28 |
29 |

30 | Data models for the JSON Web Token Proof Format (VC-JWT) [[VC-DATA-MODEL-2.0]] shared by [[[OB-30]]] and [[[CLR-20]]]. 31 |

32 |
33 |
34 |

35 | The derived types in this section are shared by all 1EdTech specifications. 36 |

37 |
38 |
39 |

40 | The primitive types in this section are shared by all 1EdTech specifications. 41 |

42 |
43 |
44 |

45 | The data models in this section are used by the [[[#verification-and-validation]]] process for supporting older credentials created with [[VC-DATA-MODEL]]. 46 |

47 |
48 | 49 | `; -------------------------------------------------------------------------------- /ob_v3p0/examples/achievementAlignmentCase.html: -------------------------------------------------------------------------------- 1 | var achievementAlignmentCase = ` 2 | 3 |
 9 | {
10 |   "@context": [
11 |     "https://www.w3.org/ns/credentials/v2",
12 |     "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
13 |   ],
14 |   "id": "http://example.edu/credentials/3732",
15 |   "type": ["VerifiableCredential", "OpenBadgeCredential"],
16 |   "issuer": {
17 |     "id": "https://example.edu/issuers/565049",
18 |     "type": ["Profile"],
19 |     "name": "Example University"
20 |   },
21 |   "validFrom": "2010-01-01T00:00:00Z",
22 |   "name": "Example University Degree",
23 |   "credentialSubject": {
24 |     "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
25 |     "type": ["AchievementSubject"],
26 |     "achievement": {
27 |       "id": "https://1edtech.edu/achievements/1",
28 |       "type": ["Achievement"],
29 |       "criteria": {
30 |         "narrative": "Cite strong and thorough textual evidence to support analysis of what the text says explicitly as well as inferences drawn from the text, including determining where the text leaves matters uncertain"
31 |       },
32 |       "description": "Analyze a sample text",
33 |       "name": "Text analysis",
34 |       "alignment": [{
35 |         "type": ["Alignment"],
36 |         "targetCode": "74f5bb7d-d7cc-11e8-824f-0242ac160002",
37 |         "targetFramework": "Alabama Course of Study: English Language Arts",
38 |         "targetName": "Cite strong and thorough textual evidence to support analysis of what the text says explicitly as well as inferences drawn from the text, including determining where the text leaves matters uncertain",
39 |         "targetType": "CFItem",
40 |         "targetUrl": "https://caseregistry.imsglobal.org/uri/74f5bb7d-d7cc-11e8-824f-0242ac160002"
41 |       }]
42 |     }
43 |   }
44 | }
45 | 
46 | 47 | `; 48 | -------------------------------------------------------------------------------- /ob_v3p0/examples/achievementAlignmentCe.html: -------------------------------------------------------------------------------- 1 | var achievementAlignmentCtdl = ` 2 | 3 |
 9 | {
10 |   "@context": [
11 |     "https://www.w3.org/ns/credentials/v2",
12 |     "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
13 |   ],
14 |   "id": "http://example.edu/credentials/3732",
15 |   "type": ["VerifiableCredential", "OpenBadgeCredential"],
16 |   "issuer": {
17 |     "id": "https://example.edu/issuers/565049",
18 |     "type": ["Profile"],
19 |     "name": "Example University"
20 |   },
21 |   "validFrom": "2010-01-01T00:00:00Z",
22 |   "name": "Example University Degree",
23 |   "credentialSubject": {
24 |     "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
25 |     "type": ["AchievementSubject"],
26 |     "achievement": {
27 |       "id": "https://1edtech.edu/achievements/1",
28 |       "type": ["Achievement"],
29 |       "criteria": {
30 |         "narrative": "Cite strong and thorough textual evidence to support analysis of what the text says explicitly as well as inferences drawn from the text, including determining where the text leaves matters uncertain"
31 |       },
32 |       "description": "Analyze a sample text",
33 |       "name": "Text analysis",
34 |       "alignment": [{
35 |         "type": ["Alignment"],
36 |         "targetCode": "ce-cf4dee18-7cea-443a-b920-158a0762c6bf",
37 |         "targetFramework": "Edmonds College Course Catalog",
38 |         "targetName": "Requirements Analysis",
39 |         "targetType": "ceterms:Credential",
40 |         "targetUrl": "https://credentialfinder.org/credential/20229/Requirements_Analysis"
41 |       }]
42 |     }
43 |   }
44 | }
45 | 
46 | 47 | `; 48 | -------------------------------------------------------------------------------- /ob_v3p0/examples/basicOpenBadgeCredential.html: -------------------------------------------------------------------------------- 1 | var basicCredential = ` 2 | 3 |
4 | The following Credential is a minimal achievement assertion. The Achievement 5 | definition here is assumed 6 |
7 |
13 | {
14 |   "@context": [
15 |     "https://www.w3.org/ns/credentials/v2",
16 |     "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
17 |   ],
18 |   "id": "http://example.com/credentials/3527",
19 |   "type": ["VerifiableCredential", "OpenBadgeCredential"],
20 |   "issuer": {
21 |     "id": "https://example.com/issuers/876543",
22 |     "type": ["Profile"],
23 |     "name": "Example Corp"
24 |   },
25 |   "validFrom": "2010-01-01T00:00:00Z",
26 |   "name": "Teamwork Badge",
27 |   "credentialSubject": {
28 |     "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
29 |     "type": ["AchievementSubject"],
30 |     "achievement": {
31 |   			"id": "https://example.com/achievements/21st-century-skills/teamwork",
32 |   			"type": ["Achievement"],
33 |   			"criteria": {
34 |   				"narrative": "Team members are nominated for this badge by their peers and recognized upon review by Example Corp management."
35 |   			},
36 |   			"description": "This badge recognizes the development of the capacity to collaborate within a group environment.",
37 |   			"name": "Teamwork"
38 |   		}
39 |   }
40 | }
41 | 
42 | 43 | `; 44 | -------------------------------------------------------------------------------- /ob_v3p0/examples/endorsement.html: -------------------------------------------------------------------------------- 1 | var endorsement = ` 2 | 3 |
 9 |     {
10 |       "@context": [
11 |         "https://www.w3.org/ns/credentials/v2",
12 |         "https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
13 |         "https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
14 |       ],
15 |       "id": "http://1edtech.edu/endorsementcredential/3732",
16 |       "type": [
17 |         "VerifiableCredential",
18 |         "EndorsementCredential"
19 |       ],
20 |       "name": "SDE endorsement",
21 |       "issuer": {
22 |         "id": "https://state.gov/issuers/565049",
23 |         "type": ["Profile"],
24 |         "name": "State Department of Education"
25 |       },
26 |       "validFrom": "2010-01-01T00:00:00Z",
27 |       "validUntil": "2030-01-01T00:00:00Z",
28 |       "credentialSubject": {
29 |         "id": "https://1edtech.edu/issuers/565049",
30 |         "type": ["EndorsementSubject"],
31 |         "endorsementComment": "1EdTech University is in good standing"
32 |       },
33 |       "credentialSchema": [
34 |         {
35 |           "id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_endorsementcredential_schema.json",
36 |           "type": "1EdTechJsonSchemaValidator2019"
37 |         },
38 |         {
39 |           "id": "https://state.gov/schema/endorsementcredential.json",
40 |           "type": "1EdTechJsonSchemaValidator2019"
41 |         }
42 |       ],
43 |       "credentialStatus": {
44 |         "id": "https://state.gov/credentials/3732/revocations",
45 |         "type": "1EdTechRevocationList"
46 |       },
47 |       "refreshService": {
48 |         "id": "http://state.gov/credentials/3732",
49 |         "type": "1EdTechCredentialRefresh"
50 |       }
51 |     }
52 |     
54 | 55 | `; 56 | -------------------------------------------------------------------------------- /ob_v3p0/examples/skillAssertionCtdl.html: -------------------------------------------------------------------------------- 1 | var skillAssertionCtdl = ` 2 | 3 |
4 | A Skill Assertion credential is just like a basic OpenBadgeCredential in how an Achievement is included, except that it makes a claim referencing an Achievement that is generic to allow for use by many possible issuers. The Achievement here is aligned to a Competency registered on the Credential Registry and described in CTDL. 5 |
6 |
 8 | {
 9 | 	"@context": [
10 | 		"https://www.w3.org/ns/credentials/v2",
11 | 		"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json",
12 | 		"https://purl.imsglobal.org/spec/ob/v3p0/extensions.json"
13 | 	],
14 | 	"id": "http://1edtech.edu/credentials/3732",
15 | 	"type": [
16 | 		"VerifiableCredential",
17 | 		"OpenBadgeCredential"
18 | 	],
19 | 	"name": "Solve and graph linear equations and inequalities",
20 | 	"credentialSubject": {
21 | 		"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
22 | 		"type": ["AchievementSubject"],
23 | 		"achievement": {
24 | 			"id": "https://example.com/achievements/math/linear-1",
25 | 			"type": ["Achievement"],
26 | 			"alignment": [{
27 |         "type": ["Alignment"],
28 |         "targetCode": "ce-6369c51f-4d86-4592-a761-8b32ae70a045",
29 |         "targetFramework": "Ivy Tech Community College of Indiana, MATH 135, FINITE MATH",
30 |         "targetName": "Solve and graph linear equations and inequalities",
31 |         "targetType": "ceasn:Competency",
32 |         "targetUrl": "https://credentialfinder.org/competency/ce-6369c51f-4d86-4592-a761-8b32ae70a045"
33 |       }],
34 | 			"achievementType": "Competency",
35 | 			"creator": {
36 | 				"id": "https://example.com/issuers/123767",
37 | 				"type": ["Profile"],
38 | 				"name": "Example Industry Group",
39 | 				"url": "https://example.com",
40 | 				"description": "Example Industry Group is a consortium of luminaries who publish skills data for common usage.",
41 | 				"email": "info@exammple.com"
42 | 			},
43 | 			"criteria": {
44 | 				"narrative": "Learners must demonstrate understanding of linear algebra and graphic representation of linear equations."
45 | 			},
46 | 			"description": "This achievement represents developing capability to solve and graph linear equations and inequalities",
47 | 			"image": {
48 | 				"id": "https://example.com/achievements/math/linear-1/image",
49 | 				"type": "Image",
50 | 				"caption": "A line, sloping upward optimistically"
51 | 			},
52 | 			"name": "Linear equations and inequalities"
53 | 		}
54 | 	},
55 | 	"issuer": {
56 | 		"id": "https://1edtech.edu/issuers/565049",
57 | 		"type": ["Profile"],
58 | 		"name": "1EdTech University",
59 | 		"url": "https://1edtech.edu",
60 | 		"phone": "1-222-333-4444",
61 | 		"description": "1EdTech University provides online degree programs.",
62 | 		"image": {
63 | 			"id": "https://1edtech.edu/logo.png",
64 | 			"type": "Image",
65 | 			"caption": "1EdTech University logo"
66 | 		},
67 | 		"email": "registrar@1edtech.edu"
68 | 	},
69 | 	"validFrom": "2022-07-01T00:00:00Z",
70 | 	"credentialSchema": [{
71 | 		"id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential_schema.json",
72 | 		"type": "1EdTechJsonSchemaValidator2019"
73 | 	}]
74 | }
75 | 
76 | `; 77 | -------------------------------------------------------------------------------- /ob_v3p0/gettingstarted.md: -------------------------------------------------------------------------------- 1 | var gettingstarted=` 2 | 3 | ## Getting Started 4 | 5 | ### Implementation Guide 6 | 7 | The [[[OB-IMPL-30]]] contains non-normative information on how to implement OB 3.0 and CLR 2.0. 8 | 9 | ### Conformance and Certification 10 | 11 | [[[OB-CERT-30]]] - Specifies the conformance tests and certification requirements for this specification. 12 | 13 | 14 | `; 15 | -------------------------------------------------------------------------------- /ob_v3p0/images/figure01-openbadges-2.0-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/ob_v3p0/images/figure01-openbadges-2.0-diagram.png -------------------------------------------------------------------------------- /ob_v3p0/images/figure02-openbadges-3.0-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/ob_v3p0/images/figure02-openbadges-3.0-diagram.png -------------------------------------------------------------------------------- /ob_v3p0/images/ob30-concept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/ob_v3p0/images/ob30-concept.png -------------------------------------------------------------------------------- /ob_v3p0/impl/.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "semi": false, 4 | "singleQuote": true, 5 | "printWidth": 80, 6 | "tabWidth": 4, 7 | "proseWrap": "always" 8 | } 9 | -------------------------------------------------------------------------------- /ob_v3p0/impl/conformance.md: -------------------------------------------------------------------------------- 1 | ## Conformance and Certification 2 | 3 | The [[OB-CERT-30]] covers the specific requirements that implementers must cover 4 | in order to achieve certification for a successful implementation of Open Badges 5 | 3.0. An accompanying CLR 2.0 guide is forthcoming. Here is a quick summary of 6 | the types of services that can be certified. 7 | 8 | ### Certified Roles in Open Badges 9 | 10 | Services implementing Open Badges fall into one or more ecosystem roles, 11 | depending on their relationship to issued credentials. These roles are named 12 | "Issuer", "Host", and "Displayer". Issuer services may also add on API support 13 | as an additional optional certification level, whereas API support is required 14 | for the other two roles. This recognizes that some issuers deliver signed 15 | credentials directly to holders via file downloads or potential integrations 16 | with wallet 17 | 18 | - Issuer: A product that issues Open Badges and transmits them to learners. 19 | Certification as an issuer covers whether a well-formed signed 20 | `OpenBadgeCredential` is produced by the tested product. 21 | - Optional API support: Issuers can achieve an additional level of 22 | certification for Issuer API support if they can demonstrate successful 23 | registration with the reference Host system, authorization code grant 24 | flow execution for a test user, and transmission of signed Open Badge(s) 25 | to the reference Host system by posting them to the Host API. 26 | - Host: A product implementing the server side of the Open Badges API that 27 | holds badges on behalf of data subjects or holders and controls API access 28 | to them. The Resource Server responds to automatic registration requests, 29 | authorization grant flow initiations, and authenticated resource requests 30 | via the API endpoints. 31 | - Displayer: A product that implements the client side of the Open Badges API. 32 | Certification is granted that the product can demonstrate successful 33 | registration with the reference Host system, authorization code grant flow 34 | execution for a test user, and transmission of signed Open Badge(s) from the 35 | reference Host system by making a request for credentials held by a user who 36 | completed the authorization flow. 37 | 38 | ### Certified Roles in CLR 39 | 40 | Certified CLR 2.0 services require use of the API in the same roles as Open 41 | Badges, except that the credentials transmitted over the API must be 42 | `ClrCredential`s meeting the requirements displayed by the test system. 43 | Issuer-only certification without API support is not listed as an option for 44 | CLR. 45 | 46 | ### Conformance Testing Process 47 | 48 | Follow the conformance and certification guide listed in the specification for 49 | detailed instructions on conformance. A 1EdTech member organization wishing to 50 | submit their product for conformance certification will undergo a semi-automated 51 | process, following onscreen instructions to run the tests. Then they submit 52 | their test results for review by 1EdTech, and if they successfully meet the 53 | requirements, the product will appear in the TrustEd Apps Directory, where 54 | consumers may find it under filters for each of the implementation roles they 55 | are looking for a product to serve. 56 | 57 | - [1EdTech Conformance Test Suite for Open Badges 3.0](https://certification.imsglobal.org/certification/verifiable-credentials/) -------------------------------------------------------------------------------- /ob_v3p0/impl/help.md: -------------------------------------------------------------------------------- 1 | ## Getting Help 2 | 3 | If you have questions or need help with implementing Open Badges 3.0 or 4 | Comprehensive Learning Record 2.0, or achieving conformance certification, here 5 | are some available resources: 6 | 7 | - [Public Forum](https://www.imsglobal.org/forums/open-badges-community-forum/open-badges-community-discussion) 8 | for all members of the 1EdTech community. 9 | - Affiliate Forum for Learning Tools and Content Alliance, Affiliate, and 10 | Contributing Members. 11 | - 1EdTech Contributing Members have access to private GitHub repositories and 12 | a Slack channel for Digital Credentials Project Group discussions and 13 | collaborations. Contact an 1EdTech staff member to gain access. 14 | - [Digital Credentials and Open Badges FAQs](https://support.imsglobal.org/support/solutions/48000452348) 15 | If you have a question, an answer may already be waiting. If not, please 16 | [contact us](https://www.imsglobal.org/contactus.cfm). 17 | -------------------------------------------------------------------------------- /ob_v3p0/impl/reference-impls.md: -------------------------------------------------------------------------------- 1 | ## Using Reference Implementations 2 | 3 | The Reference Implementation is an 1EdTech implementation of Open Badges 3.0 and 4 | Comprehensive Learner Record 2.0 which contains a Issuer, a Displayer and a 5 | Host. The reference implementation is written in Java. We provide source code 6 | and a hosted version of the tool. Our reference implementation has passed 7 | Conformance Certification and is complete with 100% automated tests. Developers 8 | can run it locally and develop against this tool. We are working to have this 9 | available in multiple languages and common functionality eventually available as 10 | libraries. From OB 3.0 and CLR 2.0 on, 1EdTech, with the support of the working 11 | group, will be keeping this implementation up-to-date, to have all versions 12 | supported. 13 | 14 | - Source Code is a member-only resource. 15 | - Hosted version will be available to the public, with services being a 16 | member-only resource. 17 | -------------------------------------------------------------------------------- /ob_v3p0/impl/respec-support/contributors.js: -------------------------------------------------------------------------------- 1 | var _contributors = [ 2 | {name: "Nate Otto", company: "Skybridge Skills", companyURL: "", role: "Invited Expert"}, 3 | {name: "Justin Pitcher", company: "Anthology", companyURL: "", role: "Co-chair, OB"}, 4 | {name: "Xavi Aracil", company: "1Edtech", companyURL: "", role: "Editor"}, 5 | {name: "Rob Coyle", company: "1Edtech", companyURL: "", role: "Editor"} 6 | ]; 7 | -------------------------------------------------------------------------------- /ob_v3p0/impl/test-vectors/clrv2p0/proof-canon.txt: -------------------------------------------------------------------------------- 1 | _:c14n0 "2010-01-01T19:23:24Z"^^ . 2 | _:c14n0 . 3 | _:c14n0 "eddsa-rdfc-2022"^^ . 4 | _:c14n0 . 5 | _:c14n0 . 6 | -------------------------------------------------------------------------------- /ob_v3p0/impl/test-vectors/obv3p0/document-canon.txt: -------------------------------------------------------------------------------- 1 | . 2 | . 3 | . 4 | . 5 | "Teamwork Badge" . 6 | . 7 | . 8 | "2010-01-01T00:00:00Z"^^ . 9 | . 10 | _:c14n0 . 11 | "This badge recognizes the development of the capacity to collaborate within a group environment." . 12 | "Teamwork" . 13 | . 14 | "Example Corp" . 15 | "https://www.imsglobal.org"^^ . 16 | _:c14n0 "Team members are nominated for this badge by their peers and recognized upon review by Example Corp management." . 17 | -------------------------------------------------------------------------------- /ob_v3p0/impl/test-vectors/obv3p0/proof-canon.txt: -------------------------------------------------------------------------------- 1 | _:c14n0 "2010-01-01T19:23:24Z"^^ . 2 | _:c14n0 . 3 | _:c14n0 "eddsa-rdfc-2022"^^ . 4 | _:c14n0 . 5 | _:c14n0 . 6 | -------------------------------------------------------------------------------- /ob_v3p0/mps-config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/ob_v3p0/mps-config.js -------------------------------------------------------------------------------- /ob_v3p0/respec-support/contributors.js: -------------------------------------------------------------------------------- 1 | var _contributors = [ 2 | {name: "Nate Otto", company: "Concentric Sky, Skybridge Skills", companyURL: "", role: "Invited Expert"}, 3 | {name: "Kerri Lemoie", company: "Digital Credentials Consortium (MIT)", companyURL: "", role: "Editor"}, 4 | {name: "Phillip Long", company: "T3 Innovation Network", companyURL: "", role: "Invited Expert"}, 5 | {name: "Marty Reed", company: "RANDA Solutions", companyURL: "", role: "Co-chair, CLR"}, 6 | {name: "Justin Pitcher", company: "Anthology", companyURL: "", role: "Co-chair, OB"}, 7 | {name: "Brent Capriotti", company: "Western Governors University (WGU)", companyURL: "", role: "Co-chair, CLR"}, 8 | {name: "Sherri Braxton", company: "Bowdoin College", companyURL: "", role: "Co-chair, OB"}, 9 | {name: "Jock Wright", company: "VerifyEd", companyURL: "", role: ""}, 10 | {name: "Jen Schreiber", company: "Workday", companyURL: "", role: ""}, 11 | {name: "Viktor Haag", company: "D2L", companyURL: "", role: ""}, 12 | {name: "Alex Hripak", company: "Credly", companyURL: "", role: ""}, 13 | {name: "David Ward", company: "PCG", companyURL: "", role: ""}, 14 | {name: "Laura Janusek", company: "D2L", companyURL: "", role: ""}, 15 | {name: "John Kuo", company: "Arizona State University", companyURL: "", role: ""}, 16 | {name: "Sara Arjona", company: "Moodle HQ", companyURL: "", role: ""}, 17 | {name: "Mark McConahay", company: "AACRAO", companyURL: "", role: ""}, 18 | {name: "Dmitri Zagidulin", company: "DCC", companyURL: "", role: "Invited Expert"}, 19 | {name: "Tracy Korsmo", company: "North Dakota IT (NDIT)", companyURL: "", role: ""}, 20 | {name: "Kate Giovacchini", company: "Arizona State University", companyURL: "", role: ""}, 21 | {name: "Andy Miller", company: "1Edtech", companyURL: "", role: "Editor"}, 22 | {name: "Markus Gylling", company: "1Edtech", companyURL: "", role: "Editor"}, 23 | {name: "Dan Blickensderfer", company: "1Edtech", companyURL: "", role: "Editor"}, 24 | {name: "Xavi Aracil", company: "1Edtech", companyURL: "", role: "Editor"} 25 | ]; 26 | -------------------------------------------------------------------------------- /ob_v3p0/respec-support/iprs.js: -------------------------------------------------------------------------------- 1 | var _iprs = [ 2 | { specVersion: "3.0", company: "Concentric Sky", electionDate: "October 24, 2019", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 3 | { specVersion: "3.0", company: "Arizona State University", electionDate: "June 21, 2022", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 4 | { specVersion: "3.0", company: "Temple University", electionDate: "June 10, 2022", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 5 | { specVersion: "3.0", company: "Credly", electionDate: "October 3, 2019", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 6 | { specVersion: "3.0", company: "Workday, Inc.", electionDate: "June 10, 2022", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 7 | { specVersion: "3.0", company: "RANDA Solutions", electionDate: "June 9, 2022", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 8 | { specVersion: "3.0", company: "Anthology", electionDate: "April 16, 2024", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 9 | { specVersion: "3.0", company: "Unicon", electionDate: "April 22, 2024", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 10 | { specVersion: "3.0", company: "Bowdoin College", electionDate: "June 11, 2022", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 11 | { specVersion: "3.0", company: "American Association of Collegiate Registrars and Admissions Officers (AACARO)", electionDate: "April 15, 2024", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 12 | { specVersion: "3.0", company: "Desire to Learn (D2L)", electionDate: "April 16, 2024", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" } , 13 | { specVersion: "3.0", company: "Digital Knowledge EdTech Lab Inc.", electionDate: "April 24, 2024", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 14 | { specVersion: "3.0", company: "IQC Italian Quality Company", electionDate: "April 19, 2024", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 15 | { specVersion: "3.0", company: "Skybridge Skills", electionDate: "April 16, 2024", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 16 | { specVersion: "3.0", company: "Navigatr", electionDate: "April 25, 2024", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 17 | { specVersion: "3.0", company: "T3 Innovation Network, US Chamber of Commerce Foundation", electionDate: "April 25, 2024", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 18 | { specVersion: "3.0", company: "Territorium", electionDate: "April 23, 2024", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" }, 19 | { specVersion: "3.0", company: "Western Governors University (WGU) ", electionDate: "June 11, 2022", necessaryClaims: "No", type: "RF RAND (Required & Optional Elements)" } 20 | ]; 21 | -------------------------------------------------------------------------------- /ob_v3p0/vc-extensions.html: -------------------------------------------------------------------------------- 1 | var vc_extensions = ` 2 | 3 |
4 |

Verifiable Credentials Extensions

5 | 6 |

7 | The [[[VC-DATA-MODEL-2.0]]] standard defines several types of extensions to enable "permissionless innovation". 8 | Conformant extensions are tracked in the [[[VC-EXTENSION-REGISTRY]]]. 9 |

10 |

11 | This standard references four VC Extensions: 12 |

13 |
    14 |
  • A Proof Method called DataIntegrityProof defined at [[[VC-DI-EDDSA]]]
  • 15 |
  • A Status Method called [[[VCRL-10]]]
  • 16 |
  • A Refresh Method called [[[VCCR-10]]]
  • 17 |
  • A Data Schema Validation Method called [[[VCCS-10]]]
  • 18 |
19 |
20 | The 1EdTech extensions are designed to work with any [=verifiable credential=] and may be contributed to the 21 | [[VC-EXTENSION-REGISTRY]] in the future. 22 |
23 |
24 | 25 | `; -------------------------------------------------------------------------------- /proposals/OBv3p0/Proposal-Open-Badges-3.0.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/proposals/OBv3p0/Proposal-Open-Badges-3.0.pdf -------------------------------------------------------------------------------- /proposals/OBv3p0/abstract.md: -------------------------------------------------------------------------------- 1 | var abstract = ` 2 | 3 | ## Abstract 4 | 5 | This is a proposal to recharter the Open Badges Workgroup to develop a new version of the [IMS Global Open Badges Specification](https://openbadgespec.org) to align it to the conventions of the [W3C Verifiable Credentials Data Model](https://w3c.github.io/vc-data-model/) for the use cases of Defined Achievement Claim and a Skill Claim. The credentials that would be produced under this proposal could easily be bundled into Comprehensive Learner Records and Verifiable Presentations. Portability and learner data privacy may be improved by expanding the usage of cryptographic proofs/signatures, because this format will be compatible with a growing array of proof schemas that are developed for the Verifiable Credentials Data Model. 6 | 7 | `; 8 | -------------------------------------------------------------------------------- /proposals/OBv3p0/figure01-openbadges-2.0-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/proposals/OBv3p0/figure01-openbadges-2.0-diagram.png -------------------------------------------------------------------------------- /proposals/OBv3p0/figure02-openbadges-3.0-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/proposals/OBv3p0/figure02-openbadges-3.0-diagram.png -------------------------------------------------------------------------------- /proposals/OBv3p0/figure03-skill-assertion-with-evidence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/proposals/OBv3p0/figure03-skill-assertion-with-evidence.png -------------------------------------------------------------------------------- /proposals/OBv3p0/figure04-defined-achievement-with-skill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1EdTech/openbadges-specification/0bb4140efbe70c472230a70f086682c68ee83aa9/proposals/OBv3p0/figure04-defined-achievement-with-skill.png -------------------------------------------------------------------------------- /proposals/OBv3p0/respec-support/contributors.js: -------------------------------------------------------------------------------- 1 | var _contributors = [ 2 | {name: "Nate Otto", company: "Concentric Sky", companyURL: "concentricsky.com", role: "Editor"}, 3 | {name: "Kerri Lemoie", company: "Concentric Sky", companyURL: "concentricsky.com", role: "Editor"}, 4 | {name: "Phillip Long", company: "Concentric Sky", companyURL: "concentricsky.com", role: "Editor"}, 5 | ]; 6 | -------------------------------------------------------------------------------- /proposals/OBv3p0/respec-support/local-biblio.js: -------------------------------------------------------------------------------- 1 | var _localBiblio = { 2 | "OBv3p0": { 3 | title: "Open Badges 3.0", 4 | href: "https://www.imsglobal.org/example/v3p0/", 5 | publisher: "IMS Global Learning Consortium", 6 | } 7 | }; 8 | -------------------------------------------------------------------------------- /proposals/OBv3p0/respec-support/specification-wrapper.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 14 | 29 | 30 | 31 | 32 |
33 | 34 |
35 | 36 |
37 |

Conformance

38 |
39 | 40 |
41 | 42 |
43 | 44 |
45 | 46 |
47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /proposals/README.md: -------------------------------------------------------------------------------- 1 | # Open Badge Proposals 2 | 3 | ## Before you start your proposal 4 | 5 | Open Badges is a stable and widely adopted specification. Before adding new features the workgroup must go through a process of documenting 6 | 7 | - Create a ticket to pitch your idea to the Open Badges working group. The ticket needs to be created in the [openbadges-specification](https://github.com/IMSGlobal/openbadges-specification/issues/new) repository. 8 | - Discuss your idea with the Open Badges working group. 9 | - The working group will make sure that the is right for an Open Badges feature, then if approved, you can start your proposal document. 10 | 11 | ## Creating a new proposal 12 | 13 | - Create a new branch or fork on this repo. 14 | - Create a copy of the `proposals/a-template` folder and rename it with your proposal name (e.g. `proposals/openbadges-my-awesome-proposal`). 15 | - In your new proposal folder, follow the instructions in the README.md file on how to set up and organize your proposal. 16 | - Once you are happy with your proposal, or if you wish to get feedback from the working group, create a pull request against the `develop` branch, then link it in your ticket so that the working group knows you wish for them to review it. 17 | - Discuss your proposal in the working group and on the pull request. 18 | - At this point your proposal will continue to be iterated upon until it is approved by the working group for wider review. 19 | 20 | ```md 21 | | [ProperProjectName](https://github.com/IMSGlobal/openbadges-specification/tree/develop/proposals/OBv3p0/specification.md) | Proposal | Open Badges 3.0 | 22 | ``` 23 | -------------------------------------------------------------------------------- /proposals/a-template/abstract.md: -------------------------------------------------------------------------------- 1 | var abstract = ` 2 | 3 | ## Abstract 4 | 5 | Here you will describe the proposal from a high-level to set the tone of the document. 6 | 7 | `; 8 | -------------------------------------------------------------------------------- /proposals/a-template/introduction.md: -------------------------------------------------------------------------------- 1 | var introduction = ` 2 | 3 | ## Introduction 4 | 5 | ### Design Goals and Rationale 6 | 7 | ### Use Cases 8 | 9 | ### Terms 10 | 11 | * _Term Name_: Short description linking to relevant sources for further definition. 12 | 13 | `; 14 | -------------------------------------------------------------------------------- /proposals/a-template/readme.md: -------------------------------------------------------------------------------- 1 | # ProperProjectName 2 | 3 | This is a change for [Open Badges](https://www.imsglobal.org/activity/digital-badges). 4 | 5 | Description of what the change does 6 | 7 | 8 | # Extension folder setup process 9 | 10 | - [x] Free space 11 | - [ ] Name the service/message/extension: `Proper Project Name` 12 | - [ ] Create a short name/code name: `proper-project` 13 | - [ ] Copy `proposals/a-template` directory to a new directory with the short name `proposals/proper-project` 14 | - [ ] In new proposal directory find & replace: `ProperProjectName` with the actual name 15 | - [ ] In new proposal directory find & replace: `ShortProjectName` with the actual short name 16 | - [ ] Add a short description of the proposal at the top of this readme 17 | - [ ] Update this readme with other details as needed 18 | - [ ] Update the table in `proposals/readme.md` with the snippet below this checklist 19 | - [ ] (process decision needed) - See `GitHub Workflow Decisions below` 20 | - [ ] Delete this setup section and move onto work steps :) 21 | 22 | ## Proposal readme table row 23 | 24 | ```md 25 | | [ProperProjectName](https://github.com/IMSGlobal/openbadges-specification/tree/develop/proposals/ShortProjectName/specification.md) | Proposal | _Very_ short description | 26 | ``` 27 | 28 | 29 | ## Documents 30 | 31 | - [The ProperProjectName Specification](specification.md) 32 | 33 | ### Current Status 34 | 35 | Proposal 36 | 37 | ## Process 38 | 39 | ### Work steps 40 | 41 | - Update `specification.md` with the proposal 42 | - Push changes to feature branch `ShortProjectName` as appropriate 43 | - Discuss with Open Badges workgroup 44 | - Tag issues with `ShortProjectName` 45 | - Do work 46 | - GOTO 1 47 | 48 | ### Documentation finalization steps 49 | 50 | - [ ] Update `respec-support/contributors.js` 51 | - [ ] Update `respec-support/local-biblio.js` 52 | - [ ] Access respec document via `respec-support/specification-wrapper.html` (needs web server to work properly) 53 | - [ ] Clean up any respec errors in `specification.md` ([common markdown problems in respec](https://github.com/IMSGlobal/spec-central/blob/master/markdown-notes.md)) 54 | - [ ] Make sure the final respec formatting and structure works well for `specification.md` 55 | 56 | -------------------------------------------------------------------------------- /proposals/a-template/respec-support/contributors.js: -------------------------------------------------------------------------------- 1 | var _contributors = [ 2 | {name: "First Last", company: "Acme Co Inc (Sweden)", companyURL: "www.example.com", role: "Editor"}, 3 | {name: "Second Third", company: "Acme Co Inc (UK)", companyURL: "www.example.com", role: "Editor"}, 4 | {name: "Fourth Fifth", company: "Acme Co Inc (India)", companyURL: "www.example.com", role: "Working Group Co-chair"}, 5 | {name: "Sixth Seventh", company: "Acme Co Inc (Japan)", companyURL: "www.example.com", role: "Working Group Co-chair"}, 6 | {name: "Eighth Ninth", company: "Acme Co Inc (Japan)", companyURL: "www.example.com"}, 7 | {name: "Tenth Eleventh", company: "Acme Co Inc (Japan)", companyURL: "www.example.com"}, 8 | ]; -------------------------------------------------------------------------------- /proposals/a-template/respec-support/local-biblio.js: -------------------------------------------------------------------------------- 1 | var _localBiblio = { 2 | "ShortProjectName": { 3 | title: "ProperProjectName", 4 | href: "https://www.imsglobal.org/example/v1p1/", 5 | publisher: "IMS Global Learning Consortium", 6 | } 7 | }; -------------------------------------------------------------------------------- /proposals/a-template/respec-support/specification-wrapper.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 14 | 29 | 30 | 31 | 32 |
33 | 34 |
35 | 36 |
37 |

Conformance

38 |
39 | 40 |
41 | 42 |
43 | 44 |
45 | 46 |
47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /proposals/a-template/specification.md: -------------------------------------------------------------------------------- 1 | var specification=` 2 | 3 | ## Specification 4 | 5 | ### What is the problem this solves for? 6 | 7 | ### Changes to the data model 8 | 9 | ### Changes to the API 10 | 11 | ### Considerations 12 | 13 | 14 | 15 | ### Examples 16 | 17 |
18 |
19 |     {
20 |       "@context": "https://w3id.org/openbadges/v2",
21 |       "id": "https://example.org/my-badge.json",
22 |       "revoked": true,
23 |       "revocationReason": "Issued in error."
24 |     }
25 |   
26 |
Example of the a revoked Assertion.
27 |
28 | 29 | 39 | 40 | ### Example Admonitions 41 | 42 | 43 | 44 | 45 | 46 | `; 47 | --------------------------------------------------------------------------------