@singi-labs/sifa-sdk 0.19.44 → 0.19.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atproto/index.js +9 -3
- package/dist/atproto/index.js.map +1 -1
- package/dist/badge/index.cjs.map +1 -1
- package/dist/badge/index.js +5 -141
- package/dist/badge/index.js.map +1 -1
- package/dist/cards/adult-content.js +14 -0
- package/dist/cards/adult-content.js.map +1 -0
- package/dist/cards/app-url-patterns.js +369 -0
- package/dist/cards/app-url-patterns.js.map +1 -0
- package/dist/cards/index.js +24 -0
- package/dist/cards/index.js.map +1 -0
- package/dist/cards/resolve-card-url.js +198 -0
- package/dist/cards/resolve-card-url.js.map +1 -0
- package/dist/cards/visibility.js +45 -0
- package/dist/cards/visibility.js.map +1 -0
- package/dist/flags/index.js +4 -3
- package/dist/flags/index.js.map +1 -1
- package/dist/format/collapse-contributors.js +19 -0
- package/dist/format/collapse-contributors.js.map +1 -0
- package/dist/format/company-name.js +61 -0
- package/dist/format/company-name.js.map +1 -0
- package/dist/format/compare-text.js +9 -0
- package/dist/format/compare-text.js.map +1 -0
- package/dist/format/doi.js +8 -0
- package/dist/format/doi.js.map +1 -0
- package/dist/format/embed.js +131 -0
- package/dist/format/embed.js.map +1 -0
- package/dist/format/endorsement-context.js +35 -0
- package/dist/format/endorsement-context.js.map +1 -0
- package/dist/format/format-display-url.js +42 -0
- package/dist/format/format-display-url.js.map +1 -0
- package/dist/format/format-duration.js +13 -0
- package/dist/format/format-duration.js.map +1 -0
- package/dist/format/format-time.js +30 -0
- package/dist/format/format-time.js.map +1 -0
- package/dist/format/handle-utils.js +19 -0
- package/dist/format/handle-utils.js.map +1 -0
- package/dist/format/index.js +106 -0
- package/dist/format/index.js.map +1 -0
- package/dist/format/location-segments.js +29 -0
- package/dist/format/location-segments.js.map +1 -0
- package/dist/format/location-utils.js +42 -0
- package/dist/format/location-utils.js.map +1 -0
- package/dist/format/meta-description.js +35 -0
- package/dist/format/meta-description.js.map +1 -0
- package/dist/format/normalize-company-key.js +12 -0
- package/dist/format/normalize-company-key.js.map +1 -0
- package/dist/format/normalize-legal-form.js +71 -0
- package/dist/format/normalize-legal-form.js.map +1 -0
- package/dist/format/pds-utils.js +73 -0
- package/dist/format/pds-utils.js.map +1 -0
- package/dist/format/sort-by-date.js +39 -0
- package/dist/format/sort-by-date.js.map +1 -0
- package/dist/format/summarize-deliveries.js +37 -0
- package/dist/format/summarize-deliveries.js.map +1 -0
- package/dist/format/talk-slug.js +21 -0
- package/dist/format/talk-slug.js.map +1 -0
- package/dist/format/text-sanitize.js +29 -0
- package/dist/format/text-sanitize.js.map +1 -0
- package/dist/format/text-truncate.js +14 -0
- package/dist/format/text-truncate.js.map +1 -0
- package/dist/format/time-utils.js +19 -0
- package/dist/format/time-utils.js.map +1 -0
- package/dist/format/timeline.js +33 -0
- package/dist/format/timeline.js.map +1 -0
- package/dist/format/wcag-contrast.js +34 -0
- package/dist/format/wcag-contrast.js.map +1 -0
- package/dist/import/index.js +22 -0
- package/dist/import/index.js.map +1 -0
- package/dist/import/presentation-csv.js +116 -0
- package/dist/import/presentation-csv.js.map +1 -0
- package/dist/index.cjs +7 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.js +677 -7086
- package/dist/index.js.map +1 -1
- package/dist/jev/index.js +18 -5
- package/dist/jev/index.js.map +1 -1
- package/dist/jsonld/index.cjs.map +1 -1
- package/dist/jsonld/index.js +30 -987
- package/dist/jsonld/index.js.map +1 -1
- package/dist/jsonld/profile.js +222 -0
- package/dist/jsonld/profile.js.map +1 -0
- package/dist/jsonld/terms.js +496 -0
- package/dist/jsonld/terms.js.map +1 -0
- package/dist/jsonld/url.js +17 -0
- package/dist/jsonld/url.js.map +1 -0
- package/dist/jsonld/works-graph.js +41 -0
- package/dist/jsonld/works-graph.js.map +1 -0
- package/dist/jsonld/works.js +178 -0
- package/dist/jsonld/works.js.map +1 -0
- package/dist/logic/actor-identity.js +8 -0
- package/dist/logic/actor-identity.js.map +1 -0
- package/dist/logic/agent-ref.js +24 -0
- package/dist/logic/agent-ref.js.map +1 -0
- package/dist/logic/company-page-indexable.js +23 -0
- package/dist/logic/company-page-indexable.js.map +1 -0
- package/dist/logic/date-lookahead.js +33 -0
- package/dist/logic/date-lookahead.js.map +1 -0
- package/dist/logic/domain-detect.js +43 -0
- package/dist/logic/domain-detect.js.map +1 -0
- package/dist/logic/entity-disambiguation.js +24 -0
- package/dist/logic/entity-disambiguation.js.map +1 -0
- package/dist/logic/entity-ref-anchor.js +33 -0
- package/dist/logic/entity-ref-anchor.js.map +1 -0
- package/dist/logic/index.js +91 -0
- package/dist/logic/index.js.map +1 -0
- package/dist/logic/org-floor.js +66 -0
- package/dist/logic/org-floor.js.map +1 -0
- package/dist/logic/primary-item.js +9 -0
- package/dist/logic/primary-item.js.map +1 -0
- package/dist/logic/primary-position.js +16 -0
- package/dist/logic/primary-position.js.map +1 -0
- package/dist/logic/profile-completeness.js +21 -0
- package/dist/logic/profile-completeness.js.map +1 -0
- package/dist/logic/profile-dimensions.js +50 -0
- package/dist/logic/profile-dimensions.js.map +1 -0
- package/dist/logic/profile-summary.js +23 -0
- package/dist/logic/profile-summary.js.map +1 -0
- package/dist/logic/pseudo-employer.js +34 -0
- package/dist/logic/pseudo-employer.js.map +1 -0
- package/dist/logic/recent-activity.js +10 -0
- package/dist/logic/recent-activity.js.map +1 -0
- package/dist/logic/self-app.js +10 -0
- package/dist/logic/self-app.js.map +1 -0
- package/dist/{org-BCrvebcf.d.ts → org-CxTEjjrm.d.ts} +1 -1
- package/dist/{org-settings-C73Sin5E.d.ts → org-settings-BShvhyFp.d.ts} +1 -1
- package/dist/profile/headline-role-dedupe.js +12 -0
- package/dist/profile/headline-role-dedupe.js.map +1 -0
- package/dist/profile/highlights.js +200 -0
- package/dist/profile/highlights.js.map +1 -0
- package/dist/profile/index.js +66 -0
- package/dist/profile/index.js.map +1 -0
- package/dist/profile/involvement-grouping.js +31 -0
- package/dist/profile/involvement-grouping.js.map +1 -0
- package/dist/profile/language-sort.js +24 -0
- package/dist/profile/language-sort.js.map +1 -0
- package/dist/profile/publication-versions.js +98 -0
- package/dist/profile/publication-versions.js.map +1 -0
- package/dist/profile/range-sort.js +14 -0
- package/dist/profile/range-sort.js.map +1 -0
- package/dist/profile/section-model.js +122 -0
- package/dist/profile/section-model.js.map +1 -0
- package/dist/profile/section-sorts.js +33 -0
- package/dist/profile/section-sorts.js.map +1 -0
- package/dist/publishers/index.js +16 -0
- package/dist/publishers/index.js.map +1 -0
- package/dist/publishers/registry.js +87 -0
- package/dist/publishers/registry.js.map +1 -0
- package/dist/publishing/index.js +46 -184
- package/dist/publishing/index.js.map +1 -1
- package/dist/publishing/linkblog.js +42 -0
- package/dist/publishing/linkblog.js.map +1 -0
- package/dist/publishing/registry.js +32 -0
- package/dist/publishing/registry.js.map +1 -0
- package/dist/publishing/schemas.js +74 -0
- package/dist/publishing/schemas.js.map +1 -0
- package/dist/publishing/types.js +32 -0
- package/dist/publishing/types.js.map +1 -0
- package/dist/query/client.js +119 -0
- package/dist/query/client.js.map +1 -0
- package/dist/query/config.js +23 -0
- package/dist/query/config.js.map +1 -0
- package/dist/query/fetchers/accounts.js +29 -0
- package/dist/query/fetchers/accounts.js.map +1 -0
- package/dist/query/fetchers/activity-items-hide.js +31 -0
- package/dist/query/fetchers/activity-items-hide.js.map +1 -0
- package/dist/query/fetchers/activity.js +61 -0
- package/dist/query/fetchers/activity.js.map +1 -0
- package/dist/query/fetchers/actor.js +30 -0
- package/dist/query/fetchers/actor.js.map +1 -0
- package/dist/query/fetchers/admin-feature-allowlists.js +41 -0
- package/dist/query/fetchers/admin-feature-allowlists.js.map +1 -0
- package/dist/query/fetchers/admin-review-queues.js +30 -0
- package/dist/query/fetchers/admin-review-queues.js.map +1 -0
- package/dist/query/fetchers/apps.js +31 -0
- package/dist/query/fetchers/apps.js.map +1 -0
- package/dist/query/fetchers/bsky-preferences.js +55 -0
- package/dist/query/fetchers/bsky-preferences.js.map +1 -0
- package/dist/query/fetchers/confirmations.js +55 -0
- package/dist/query/fetchers/confirmations.js.map +1 -0
- package/dist/query/fetchers/destructive.js +34 -0
- package/dist/query/fetchers/destructive.js.map +1 -0
- package/dist/query/fetchers/discovery.js +67 -0
- package/dist/query/fetchers/discovery.js.map +1 -0
- package/dist/query/fetchers/education.js +23 -0
- package/dist/query/fetchers/education.js.map +1 -0
- package/dist/query/fetchers/endorsement-inbox.js +36 -0
- package/dist/query/fetchers/endorsement-inbox.js.map +1 -0
- package/dist/query/fetchers/endorsement.js +23 -0
- package/dist/query/fetchers/endorsement.js.map +1 -0
- package/dist/query/fetchers/endorsements.js +20 -0
- package/dist/query/fetchers/endorsements.js.map +1 -0
- package/dist/query/fetchers/entities.js +65 -0
- package/dist/query/fetchers/entities.js.map +1 -0
- package/dist/query/fetchers/external-accounts.js +74 -0
- package/dist/query/fetchers/external-accounts.js.map +1 -0
- package/dist/query/fetchers/follow-extras.js +38 -0
- package/dist/query/fetchers/follow-extras.js.map +1 -0
- package/dist/query/fetchers/follow.js +105 -0
- package/dist/query/fetchers/follow.js.map +1 -0
- package/dist/query/fetchers/get-profile-view.js +21 -0
- package/dist/query/fetchers/get-profile-view.js.map +1 -0
- package/dist/query/fetchers/github-prs.js +45 -0
- package/dist/query/fetchers/github-prs.js.map +1 -0
- package/dist/query/fetchers/inbox.js +29 -0
- package/dist/query/fetchers/inbox.js.map +1 -0
- package/dist/query/fetchers/index.cjs.map +1 -1
- package/dist/query/fetchers/index.d.ts +2 -2
- package/dist/query/fetchers/index.js +360 -2045
- package/dist/query/fetchers/index.js.map +1 -1
- package/dist/query/fetchers/investments.js +18 -0
- package/dist/query/fetchers/investments.js.map +1 -0
- package/dist/query/fetchers/keytrace-claims.js +23 -0
- package/dist/query/fetchers/keytrace-claims.js.map +1 -0
- package/dist/query/fetchers/marque-domains.js +23 -0
- package/dist/query/fetchers/marque-domains.js.map +1 -0
- package/dist/query/fetchers/network-map.js +36 -0
- package/dist/query/fetchers/network-map.js.map +1 -0
- package/dist/query/fetchers/org.js +48 -0
- package/dist/query/fetchers/org.js.map +1 -0
- package/dist/query/fetchers/positions.js +77 -0
- package/dist/query/fetchers/positions.js.map +1 -0
- package/dist/query/fetchers/profile-completeness.js +45 -0
- package/dist/query/fetchers/profile-completeness.js.map +1 -0
- package/dist/query/fetchers/profile-items-hide.js +36 -0
- package/dist/query/fetchers/profile-items-hide.js.map +1 -0
- package/dist/query/fetchers/profile-locations.js +23 -0
- package/dist/query/fetchers/profile-locations.js.map +1 -0
- package/dist/query/fetchers/profile-mutations.js +82 -0
- package/dist/query/fetchers/profile-mutations.js.map +1 -0
- package/dist/query/fetchers/profile-summary.js +14 -0
- package/dist/query/fetchers/profile-summary.js.map +1 -0
- package/dist/query/fetchers/profile.js +31 -0
- package/dist/query/fetchers/profile.js.map +1 -0
- package/dist/query/fetchers/publications.js +66 -0
- package/dist/query/fetchers/publications.js.map +1 -0
- package/dist/query/fetchers/quoted-posts.js +40 -0
- package/dist/query/fetchers/quoted-posts.js.map +1 -0
- package/dist/query/fetchers/reactions.js +85 -0
- package/dist/query/fetchers/reactions.js.map +1 -0
- package/dist/query/fetchers/received-endorsements.js +20 -0
- package/dist/query/fetchers/received-endorsements.js.map +1 -0
- package/dist/query/fetchers/reciprocity.js +23 -0
- package/dist/query/fetchers/reciprocity.js.map +1 -0
- package/dist/query/fetchers/records.js +27 -0
- package/dist/query/fetchers/records.js.map +1 -0
- package/dist/query/fetchers/repo-inventory.js +23 -0
- package/dist/query/fetchers/repo-inventory.js.map +1 -0
- package/dist/query/fetchers/roadmap.js +73 -0
- package/dist/query/fetchers/roadmap.js.map +1 -0
- package/dist/query/fetchers/rpg.js +36 -0
- package/dist/query/fetchers/rpg.js.map +1 -0
- package/dist/query/fetchers/search.js +78 -0
- package/dist/query/fetchers/search.js.map +1 -0
- package/dist/query/fetchers/section-primary.js +23 -0
- package/dist/query/fetchers/section-primary.js.map +1 -0
- package/dist/query/fetchers/skills.js +30 -0
- package/dist/query/fetchers/skills.js.map +1 -0
- package/dist/query/fetchers/speakers.js +42 -0
- package/dist/query/fetchers/speakers.js.map +1 -0
- package/dist/query/fetchers/stats.js +16 -0
- package/dist/query/fetchers/stats.js.map +1 -0
- package/dist/query/fetchers/stream.js +30 -0
- package/dist/query/fetchers/stream.js.map +1 -0
- package/dist/query/fetchers/unlinked-positions.js +30 -0
- package/dist/query/fetchers/unlinked-positions.js.map +1 -0
- package/dist/query/hooks/index.d.ts +3 -3
- package/dist/query/hooks/index.js +283 -3555
- package/dist/query/hooks/index.js.map +1 -1
- package/dist/query/hooks/use-accounts.js +19 -0
- package/dist/query/hooks/use-accounts.js.map +1 -0
- package/dist/query/hooks/use-activity-items-hide.js +52 -0
- package/dist/query/hooks/use-activity-items-hide.js.map +1 -0
- package/dist/query/hooks/use-activity.js +44 -0
- package/dist/query/hooks/use-activity.js.map +1 -0
- package/dist/query/hooks/use-admin-review-queues.js +21 -0
- package/dist/query/hooks/use-admin-review-queues.js.map +1 -0
- package/dist/query/hooks/use-apps.js +31 -0
- package/dist/query/hooks/use-apps.js.map +1 -0
- package/dist/query/hooks/use-bsky-content-prefs.js +45 -0
- package/dist/query/hooks/use-bsky-content-prefs.js.map +1 -0
- package/dist/query/hooks/use-confirmations.js +121 -0
- package/dist/query/hooks/use-confirmations.js.map +1 -0
- package/dist/query/hooks/use-create-position.js +28 -0
- package/dist/query/hooks/use-create-position.js.map +1 -0
- package/dist/query/hooks/use-destructive.js +63 -0
- package/dist/query/hooks/use-destructive.js.map +1 -0
- package/dist/query/hooks/use-discovery.js +53 -0
- package/dist/query/hooks/use-discovery.js.map +1 -0
- package/dist/query/hooks/use-education-mutations.js +67 -0
- package/dist/query/hooks/use-education-mutations.js.map +1 -0
- package/dist/query/hooks/use-endorsement-inbox.js +80 -0
- package/dist/query/hooks/use-endorsement-inbox.js.map +1 -0
- package/dist/query/hooks/use-endorsement-mutations.js +33 -0
- package/dist/query/hooks/use-endorsement-mutations.js.map +1 -0
- package/dist/query/hooks/use-endorsement.js +20 -0
- package/dist/query/hooks/use-endorsement.js.map +1 -0
- package/dist/query/hooks/use-entity-search.js +73 -0
- package/dist/query/hooks/use-entity-search.js.map +1 -0
- package/dist/query/hooks/use-external-accounts.js +143 -0
- package/dist/query/hooks/use-external-accounts.js.map +1 -0
- package/dist/query/hooks/use-feature-allowlist.js +104 -0
- package/dist/query/hooks/use-feature-allowlist.js.map +1 -0
- package/dist/query/hooks/use-follow-extras.js +38 -0
- package/dist/query/hooks/use-follow-extras.js.map +1 -0
- package/dist/query/hooks/use-follow.js +113 -0
- package/dist/query/hooks/use-follow.js.map +1 -0
- package/dist/query/hooks/use-get-profile-view.js +20 -0
- package/dist/query/hooks/use-get-profile-view.js.map +1 -0
- package/dist/query/hooks/use-github-prs.js +21 -0
- package/dist/query/hooks/use-github-prs.js.map +1 -0
- package/dist/query/hooks/use-inbox.js +19 -0
- package/dist/query/hooks/use-inbox.js.map +1 -0
- package/dist/query/hooks/use-investment-mutations.js +65 -0
- package/dist/query/hooks/use-investment-mutations.js.map +1 -0
- package/dist/query/hooks/use-keytrace-claims.js +50 -0
- package/dist/query/hooks/use-keytrace-claims.js.map +1 -0
- package/dist/query/hooks/use-location-mutations.js +71 -0
- package/dist/query/hooks/use-location-mutations.js.map +1 -0
- package/dist/query/hooks/use-marque-domains.js +50 -0
- package/dist/query/hooks/use-marque-domains.js.map +1 -0
- package/dist/query/hooks/use-org-claim.js +29 -0
- package/dist/query/hooks/use-org-claim.js.map +1 -0
- package/dist/query/hooks/use-org-domains.js +28 -0
- package/dist/query/hooks/use-org-domains.js.map +1 -0
- package/dist/query/hooks/use-org-notification-emails.js +28 -0
- package/dist/query/hooks/use-org-notification-emails.js.map +1 -0
- package/dist/query/hooks/use-org-profile-settings.js +29 -0
- package/dist/query/hooks/use-org-profile-settings.js.map +1 -0
- package/dist/query/hooks/use-org-profile.js +21 -0
- package/dist/query/hooks/use-org-profile.js.map +1 -0
- package/dist/query/hooks/use-position-mutations.js +128 -0
- package/dist/query/hooks/use-position-mutations.js.map +1 -0
- package/dist/query/hooks/use-profile-completeness.js +21 -0
- package/dist/query/hooks/use-profile-completeness.js.map +1 -0
- package/dist/query/hooks/use-profile-items-hide.js +53 -0
- package/dist/query/hooks/use-profile-items-hide.js.map +1 -0
- package/dist/query/hooks/use-profile-mutations.js +143 -0
- package/dist/query/hooks/use-profile-mutations.js.map +1 -0
- package/dist/query/hooks/use-profile.js +30 -0
- package/dist/query/hooks/use-profile.js.map +1 -0
- package/dist/query/hooks/use-publication-mutations.js +90 -0
- package/dist/query/hooks/use-publication-mutations.js.map +1 -0
- package/dist/query/hooks/use-reaction-mutations.js +48 -0
- package/dist/query/hooks/use-reaction-mutations.js.map +1 -0
- package/dist/query/hooks/use-reactions.js +32 -0
- package/dist/query/hooks/use-reactions.js.map +1 -0
- package/dist/query/hooks/use-received-endorsements.js +23 -0
- package/dist/query/hooks/use-received-endorsements.js.map +1 -0
- package/dist/query/hooks/use-reciprocity.js +19 -0
- package/dist/query/hooks/use-reciprocity.js.map +1 -0
- package/dist/query/hooks/use-record-mutations.js +67 -0
- package/dist/query/hooks/use-record-mutations.js.map +1 -0
- package/dist/query/hooks/use-repo-inventory.js +43 -0
- package/dist/query/hooks/use-repo-inventory.js.map +1 -0
- package/dist/query/hooks/use-roadmap-mutations.js +51 -0
- package/dist/query/hooks/use-roadmap-mutations.js.map +1 -0
- package/dist/query/hooks/use-roadmap.js +31 -0
- package/dist/query/hooks/use-roadmap.js.map +1 -0
- package/dist/query/hooks/use-search.js +63 -0
- package/dist/query/hooks/use-search.js.map +1 -0
- package/dist/query/hooks/use-section-primary-mutations.js +53 -0
- package/dist/query/hooks/use-section-primary-mutations.js.map +1 -0
- package/dist/query/hooks/use-skill-mutations.js +91 -0
- package/dist/query/hooks/use-skill-mutations.js.map +1 -0
- package/dist/query/hooks/use-stats.js +19 -0
- package/dist/query/hooks/use-stats.js.map +1 -0
- package/dist/query/hooks/use-stream.js +20 -0
- package/dist/query/hooks/use-stream.js.map +1 -0
- package/dist/query/hooks/use-unlinked-positions.js +45 -0
- package/dist/query/hooks/use-unlinked-positions.js.map +1 -0
- package/dist/query/index.cjs.map +1 -1
- package/dist/query/index.d.ts +4 -4
- package/dist/query/index.js +685 -3744
- package/dist/query/index.js.map +1 -1
- package/dist/query/keys.js +138 -0
- package/dist/query/keys.js.map +1 -0
- package/dist/repo/groups.js +81 -0
- package/dist/repo/groups.js.map +1 -0
- package/dist/repo/index.js +9 -0
- package/dist/repo/index.js.map +1 -0
- package/dist/repo/labels.js +121 -0
- package/dist/repo/labels.js.map +1 -0
- package/dist/repo/types.js +1 -0
- package/dist/repo/types.js.map +1 -0
- package/dist/resume/index.js +5 -179
- package/dist/resume/index.js.map +1 -1
- package/dist/resume/json-resume.js +153 -0
- package/dist/resume/json-resume.js.map +1 -0
- package/dist/roadmap/index.js +101 -0
- package/dist/roadmap/index.js.map +1 -0
- package/dist/rpg/catalog.js +101 -0
- package/dist/rpg/catalog.js.map +1 -0
- package/dist/rpg/index.js +13 -116
- package/dist/rpg/index.js.map +1 -1
- package/dist/rpg/unlocks.js +21 -0
- package/dist/rpg/unlocks.js.map +1 -0
- package/dist/schemas/blob-ref.js +12 -0
- package/dist/schemas/blob-ref.js.map +1 -0
- package/dist/schemas/confirmation.js +23 -0
- package/dist/schemas/confirmation.js.map +1 -0
- package/dist/schemas/endorsement-confirmation.js +18 -0
- package/dist/schemas/endorsement-confirmation.js.map +1 -0
- package/dist/schemas/endorsement.js +19 -0
- package/dist/schemas/endorsement.js.map +1 -0
- package/dist/schemas/entity.js +74 -0
- package/dist/schemas/entity.js.map +1 -0
- package/dist/schemas/feed.js +73 -0
- package/dist/schemas/feed.js.map +1 -0
- package/dist/schemas/follow-profile.js +32 -0
- package/dist/schemas/follow-profile.js.map +1 -0
- package/dist/schemas/graph-follow.js +19 -0
- package/dist/schemas/graph-follow.js.map +1 -0
- package/dist/schemas/index.js +164 -629
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/org-employment-attestation.js +28 -0
- package/dist/schemas/org-employment-attestation.js.map +1 -0
- package/dist/schemas/org-profile.js +64 -0
- package/dist/schemas/org-profile.js.map +1 -0
- package/dist/schemas/profile-certification.js +28 -0
- package/dist/schemas/profile-certification.js.map +1 -0
- package/dist/schemas/profile-course.js +32 -0
- package/dist/schemas/profile-course.js.map +1 -0
- package/dist/schemas/profile-education.js +33 -0
- package/dist/schemas/profile-education.js.map +1 -0
- package/dist/schemas/profile-external-account.js +15 -0
- package/dist/schemas/profile-external-account.js.map +1 -0
- package/dist/schemas/profile-honor.js +18 -0
- package/dist/schemas/profile-honor.js.map +1 -0
- package/dist/schemas/profile-investment.js +48 -0
- package/dist/schemas/profile-investment.js.map +1 -0
- package/dist/schemas/profile-involvement.js +47 -0
- package/dist/schemas/profile-involvement.js.map +1 -0
- package/dist/schemas/profile-language.js +12 -0
- package/dist/schemas/profile-language.js.map +1 -0
- package/dist/schemas/profile-position.js +42 -0
- package/dist/schemas/profile-position.js.map +1 -0
- package/dist/schemas/profile-presentation-delivery.js +38 -0
- package/dist/schemas/profile-presentation-delivery.js.map +1 -0
- package/dist/schemas/profile-presentation.js +36 -0
- package/dist/schemas/profile-presentation.js.map +1 -0
- package/dist/schemas/profile-project.js +48 -0
- package/dist/schemas/profile-project.js.map +1 -0
- package/dist/schemas/profile-publication.js +30 -0
- package/dist/schemas/profile-publication.js.map +1 -0
- package/dist/schemas/profile-self.js +22 -0
- package/dist/schemas/profile-self.js.map +1 -0
- package/dist/schemas/profile-skill.js +13 -0
- package/dist/schemas/profile-skill.js.map +1 -0
- package/dist/schemas/profile-volunteering.js +20 -0
- package/dist/schemas/profile-volunteering.js.map +1 -0
- package/dist/schemas/shared.js +56 -0
- package/dist/schemas/shared.js.map +1 -0
- package/dist/schemas/write/certification.js +16 -0
- package/dist/schemas/write/certification.js.map +1 -0
- package/dist/schemas/write/course.js +36 -0
- package/dist/schemas/write/course.js.map +1 -0
- package/dist/schemas/write/education.js +18 -0
- package/dist/schemas/write/education.js.map +1 -0
- package/dist/schemas/write/external-account.js +13 -0
- package/dist/schemas/write/external-account.js.map +1 -0
- package/dist/schemas/write/honor.js +14 -0
- package/dist/schemas/write/honor.js.map +1 -0
- package/dist/schemas/write/index.d.ts +1 -1
- package/dist/schemas/write/index.js +89 -593
- package/dist/schemas/write/index.js.map +1 -1
- package/dist/schemas/write/investment.js +32 -0
- package/dist/schemas/write/investment.js.map +1 -0
- package/dist/schemas/write/involvement.js +34 -0
- package/dist/schemas/write/involvement.js.map +1 -0
- package/dist/schemas/write/language.js +10 -0
- package/dist/schemas/write/language.js.map +1 -0
- package/dist/schemas/write/org-claim.js +56 -0
- package/dist/schemas/write/org-claim.js.map +1 -0
- package/dist/schemas/write/org-employment-attestation.js +19 -0
- package/dist/schemas/write/org-employment-attestation.js.map +1 -0
- package/dist/schemas/write/org-profile.js +54 -0
- package/dist/schemas/write/org-profile.js.map +1 -0
- package/dist/schemas/write/org-settings.js +81 -0
- package/dist/schemas/write/org-settings.js.map +1 -0
- package/dist/schemas/write/position.js +24 -0
- package/dist/schemas/write/position.js.map +1 -0
- package/dist/schemas/write/presentation-delivery.js +34 -0
- package/dist/schemas/write/presentation-delivery.js.map +1 -0
- package/dist/schemas/write/presentation.js +23 -0
- package/dist/schemas/write/presentation.js.map +1 -0
- package/dist/schemas/write/profile-location.js +21 -0
- package/dist/schemas/write/profile-location.js.map +1 -0
- package/dist/schemas/write/profile-self.js +27 -0
- package/dist/schemas/write/profile-self.js.map +1 -0
- package/dist/schemas/write/project.js +27 -0
- package/dist/schemas/write/project.js.map +1 -0
- package/dist/schemas/write/publication.js +41 -0
- package/dist/schemas/write/publication.js.map +1 -0
- package/dist/schemas/write/shared.js +96 -0
- package/dist/schemas/write/shared.js.map +1 -0
- package/dist/schemas/write/skill.js +18 -0
- package/dist/schemas/write/skill.js.map +1 -0
- package/dist/schemas/write/volunteering.js +16 -0
- package/dist/schemas/write/volunteering.js.map +1 -0
- package/dist/stream/activity-item.js +1 -0
- package/dist/stream/activity-item.js.map +1 -0
- package/dist/stream/index.js +49 -0
- package/dist/stream/index.js.map +1 -0
- package/dist/stream/stream-card-vm-schema.js +265 -0
- package/dist/stream/stream-card-vm-schema.js.map +1 -0
- package/dist/stream/stream-card-vm.js +1 -0
- package/dist/stream/stream-card-vm.js.map +1 -0
- package/dist/stream/to-stream-card-vm.js +793 -0
- package/dist/stream/to-stream-card-vm.js.map +1 -0
- package/dist/stream/two-tier.js +30 -0
- package/dist/stream/two-tier.js.map +1 -0
- package/dist/stream/verbs.js +120 -0
- package/dist/stream/verbs.js.map +1 -0
- package/dist/taxonomy/activity-tiers.js +956 -0
- package/dist/taxonomy/activity-tiers.js.map +1 -0
- package/dist/taxonomy/app-categories.js +42 -0
- package/dist/taxonomy/app-categories.js.map +1 -0
- package/dist/taxonomy/app-category-map.js +166 -0
- package/dist/taxonomy/app-category-map.js.map +1 -0
- package/dist/taxonomy/artifact-link-kind.js +29 -0
- package/dist/taxonomy/artifact-link-kind.js.map +1 -0
- package/dist/taxonomy/calendar-event.js +28 -0
- package/dist/taxonomy/calendar-event.js.map +1 -0
- package/dist/taxonomy/continents.js +215 -0
- package/dist/taxonomy/continents.js.map +1 -0
- package/dist/taxonomy/countries.js +203 -0
- package/dist/taxonomy/countries.js.map +1 -0
- package/dist/taxonomy/course-role.js +37 -0
- package/dist/taxonomy/course-role.js.map +1 -0
- package/dist/taxonomy/employment-type.js +82 -0
- package/dist/taxonomy/employment-type.js.map +1 -0
- package/dist/taxonomy/eqf-level.js +59 -0
- package/dist/taxonomy/eqf-level.js.map +1 -0
- package/dist/taxonomy/index.js +263 -0
- package/dist/taxonomy/index.js.map +1 -0
- package/dist/taxonomy/industry-taxonomy.js +281 -0
- package/dist/taxonomy/industry-taxonomy.js.map +1 -0
- package/dist/taxonomy/investment.js +54 -0
- package/dist/taxonomy/investment.js.map +1 -0
- package/dist/taxonomy/involvement-kind.js +30 -0
- package/dist/taxonomy/involvement-kind.js.map +1 -0
- package/dist/taxonomy/open-to.js +128 -0
- package/dist/taxonomy/open-to.js.map +1 -0
- package/dist/taxonomy/platforms.js +56 -0
- package/dist/taxonomy/platforms.js.map +1 -0
- package/dist/taxonomy/presentation-link-type.js +22 -0
- package/dist/taxonomy/presentation-link-type.js.map +1 -0
- package/dist/taxonomy/presentation-role.js +21 -0
- package/dist/taxonomy/presentation-role.js.map +1 -0
- package/dist/taxonomy/publication-type.js +54 -0
- package/dist/taxonomy/publication-type.js.map +1 -0
- package/dist/taxonomy/relational.js +25 -0
- package/dist/taxonomy/relational.js.map +1 -0
- package/dist/taxonomy/search-filter-defs.js +66 -0
- package/dist/taxonomy/search-filter-defs.js.map +1 -0
- package/dist/taxonomy/skill-categories.js +28 -0
- package/dist/taxonomy/skill-categories.js.map +1 -0
- package/dist/taxonomy/skill-display-groups.js +12 -0
- package/dist/taxonomy/skill-display-groups.js.map +1 -0
- package/dist/taxonomy/skill-grouping.js +90 -0
- package/dist/taxonomy/skill-grouping.js.map +1 -0
- package/dist/taxonomy/verification-providers.js +69 -0
- package/dist/taxonomy/verification-providers.js.map +1 -0
- package/dist/taxonomy/workplace-type.js +38 -0
- package/dist/taxonomy/workplace-type.js.map +1 -0
- package/dist/tokens/colors.js +11 -0
- package/dist/tokens/colors.js.map +1 -0
- package/dist/tokens/icons.js +15 -0
- package/dist/tokens/icons.js.map +1 -0
- package/dist/tokens/index.js +10 -39
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/typography.js +23 -0
- package/dist/tokens/typography.js.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/profile-view.js +1 -0
- package/dist/types/profile-view.js.map +1 -0
- package/dist/{use-org-notification-emails-0hjt-dEw.d.ts → use-org-notification-emails-CWWi1D8t.d.ts} +2 -2
- package/package.json +4 -3
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
// src/jsonld/term-mappings.json
|
|
2
|
+
var term_mappings_default = {
|
|
3
|
+
$schema: "https://sifa.id/schemas/term-mappings/v1.json",
|
|
4
|
+
version: "1.0.0",
|
|
5
|
+
description: "Reconciliation between id.sifa.* lexicon terms and existing RDF vocabularies. RDF is used here as vocabulary only: Sifa records are Lexicon JSON on the AT Protocol, and nothing here changes how they are stored or transmitted. Match strengths use SKOS mapping relations.",
|
|
6
|
+
vocabularies: {
|
|
7
|
+
schema: "https://schema.org/",
|
|
8
|
+
bibo: "http://purl.org/ontology/bibo/",
|
|
9
|
+
dcterms: "http://purl.org/dc/terms/",
|
|
10
|
+
foaf: "http://xmlns.com/foaf/0.1/",
|
|
11
|
+
org: "http://www.w3.org/ns/org#",
|
|
12
|
+
prism: "http://prismstandard.org/namespaces/basic/2.1/",
|
|
13
|
+
event: "http://purl.org/NET/c4dm/event.owl#",
|
|
14
|
+
skos: "http://www.w3.org/2004/02/skos/core#"
|
|
15
|
+
},
|
|
16
|
+
mappings: [
|
|
17
|
+
{
|
|
18
|
+
lexicon: "id.sifa.org.profile",
|
|
19
|
+
match: "exactMatch",
|
|
20
|
+
terms: ["schema:Organization", "org:FormalOrganization"],
|
|
21
|
+
note: "ROR is the value anchor."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
lexicon: "id.sifa.profile.certification",
|
|
25
|
+
match: "exactMatch",
|
|
26
|
+
terms: ["schema:EducationalOccupationalCredential"]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
lexicon: "id.sifa.profile.certification",
|
|
30
|
+
field: "credentialUrl",
|
|
31
|
+
match: "exactMatch",
|
|
32
|
+
terms: ["schema:url"]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
lexicon: "id.sifa.profile.certification",
|
|
36
|
+
field: "expiresAt",
|
|
37
|
+
match: "exactMatch",
|
|
38
|
+
terms: ["schema:validUntil"]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
lexicon: "id.sifa.profile.course",
|
|
42
|
+
match: "exactMatch",
|
|
43
|
+
terms: ["schema:Course"]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
lexicon: "id.sifa.profile.course",
|
|
47
|
+
field: "number",
|
|
48
|
+
match: "exactMatch",
|
|
49
|
+
terms: ["schema:courseCode"]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
lexicon: "id.sifa.profile.education",
|
|
53
|
+
match: "closeMatch",
|
|
54
|
+
terms: ["schema:EducationalOccupationalCredential"],
|
|
55
|
+
note: "One record maps to two schema.org assertions: alumniOf for the institution and hasCredential for the degree."
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
lexicon: "id.sifa.profile.education",
|
|
59
|
+
field: "degree",
|
|
60
|
+
match: "closeMatch",
|
|
61
|
+
terms: ["schema:hasCredential", "bibo:degree"]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
lexicon: "id.sifa.profile.education",
|
|
65
|
+
field: "eqfLevel",
|
|
66
|
+
match: "closeMatch",
|
|
67
|
+
terms: ["schema:educationalLevel"],
|
|
68
|
+
note: "EQF is the value anchor."
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
lexicon: "id.sifa.profile.education",
|
|
72
|
+
field: "fieldOfStudy",
|
|
73
|
+
match: "closeMatch",
|
|
74
|
+
terms: ["schema:educationalCredentialAwarded"],
|
|
75
|
+
note: "ISCED-F is the value anchor."
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
lexicon: "id.sifa.profile.education",
|
|
79
|
+
field: "institution",
|
|
80
|
+
match: "exactMatch",
|
|
81
|
+
terms: ["schema:alumniOf"]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
lexicon: "id.sifa.profile.externalAccount",
|
|
85
|
+
match: "exactMatch",
|
|
86
|
+
terms: ["schema:sameAs", "foaf:account"]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
lexicon: "id.sifa.profile.honor",
|
|
90
|
+
match: "broadMatch",
|
|
91
|
+
terms: ["schema:award"],
|
|
92
|
+
note: "schema:award is a bare string, so issuer and date are lost. No better term exists in BIBO either."
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
lexicon: "id.sifa.profile.involvement",
|
|
96
|
+
match: "broadMatch",
|
|
97
|
+
terms: ["org:Membership"],
|
|
98
|
+
note: "The kind known values have no external equivalent."
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
lexicon: "id.sifa.profile.language",
|
|
102
|
+
match: "exactMatch",
|
|
103
|
+
terms: ["schema:knowsLanguage"]
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
lexicon: "id.sifa.profile.position",
|
|
107
|
+
match: "closeMatch",
|
|
108
|
+
terms: ["org:Membership", "schema:OrganizationRole"]
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
lexicon: "id.sifa.profile.position",
|
|
112
|
+
field: "company",
|
|
113
|
+
match: "exactMatch",
|
|
114
|
+
terms: ["org:organization", "schema:worksFor"]
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
lexicon: "id.sifa.profile.position",
|
|
118
|
+
field: "description",
|
|
119
|
+
match: "exactMatch",
|
|
120
|
+
terms: ["dcterms:description"]
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
lexicon: "id.sifa.profile.position",
|
|
124
|
+
field: "employmentType",
|
|
125
|
+
match: "closeMatch",
|
|
126
|
+
terms: ["schema:employmentType"],
|
|
127
|
+
note: "schema:employmentType is free text. ESCO is the better value anchor."
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
lexicon: "id.sifa.profile.position",
|
|
131
|
+
field: "endedAt",
|
|
132
|
+
match: "exactMatch",
|
|
133
|
+
terms: ["schema:endDate"]
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
lexicon: "id.sifa.profile.position",
|
|
137
|
+
field: "entityRef",
|
|
138
|
+
match: "closeMatch",
|
|
139
|
+
terms: ["schema:sameAs"]
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
lexicon: "id.sifa.profile.position",
|
|
143
|
+
field: "location",
|
|
144
|
+
match: "exactMatch",
|
|
145
|
+
terms: ["schema:jobLocation"]
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
lexicon: "id.sifa.profile.position",
|
|
149
|
+
field: "startedAt",
|
|
150
|
+
match: "exactMatch",
|
|
151
|
+
terms: ["schema:startDate"]
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
lexicon: "id.sifa.profile.position",
|
|
155
|
+
field: "title",
|
|
156
|
+
match: "exactMatch",
|
|
157
|
+
terms: ["org:role", "schema:roleName"]
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
lexicon: "id.sifa.profile.position",
|
|
161
|
+
field: "workplaceType",
|
|
162
|
+
match: "narrowMatch",
|
|
163
|
+
terms: ["schema:jobLocationType"],
|
|
164
|
+
note: "schema.org models only a remote flag; Sifa distinguishes onSite, remote, and hybrid."
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
lexicon: "id.sifa.profile.presentation",
|
|
168
|
+
match: "closeMatch",
|
|
169
|
+
terms: ["bibo:Slideshow", "schema:PresentationDigitalDocument"],
|
|
170
|
+
note: 'Neither term carries the "reusable, deliverable more than once" semantics of the Sifa record.'
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
lexicon: "id.sifa.profile.presentation",
|
|
174
|
+
field: "coverImage",
|
|
175
|
+
match: "exactMatch",
|
|
176
|
+
terms: ["schema:image", "foaf:depiction"]
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
lexicon: "id.sifa.profile.presentation",
|
|
180
|
+
field: "description",
|
|
181
|
+
match: "exactMatch",
|
|
182
|
+
terms: ["bibo:abstract", "schema:abstract"]
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
lexicon: "id.sifa.profile.presentation",
|
|
186
|
+
field: "duration",
|
|
187
|
+
match: "narrowMatch",
|
|
188
|
+
terms: ["schema:timeRequired"],
|
|
189
|
+
note: "The lexicon models a range; schema:timeRequired is a single ISO 8601 duration."
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
lexicon: "id.sifa.profile.presentation",
|
|
193
|
+
field: "intendedAudiences",
|
|
194
|
+
match: "closeMatch",
|
|
195
|
+
terms: ["schema:audience"]
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
lexicon: "id.sifa.profile.presentation",
|
|
199
|
+
field: "title",
|
|
200
|
+
match: "exactMatch",
|
|
201
|
+
terms: ["dcterms:title", "schema:name"]
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
lexicon: "id.sifa.profile.presentation",
|
|
205
|
+
field: "writeupRef",
|
|
206
|
+
match: "closeMatch",
|
|
207
|
+
terms: ["dcterms:isReferencedBy", "schema:subjectOf"]
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
lexicon: "id.sifa.profile.presentationDelivery",
|
|
211
|
+
match: "closeMatch",
|
|
212
|
+
terms: ["schema:Event", "event:Event"],
|
|
213
|
+
note: "BIBO models this relation as bibo:Slideshow bibo:presentedAt event:Event."
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
lexicon: "id.sifa.profile.presentationDelivery",
|
|
217
|
+
field: "address",
|
|
218
|
+
match: "exactMatch",
|
|
219
|
+
terms: ["schema:location", "event:place"]
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
lexicon: "id.sifa.profile.presentationDelivery",
|
|
223
|
+
field: "coSpeakers",
|
|
224
|
+
match: "exactMatch",
|
|
225
|
+
terms: ["schema:performer"]
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
lexicon: "id.sifa.profile.presentationDelivery",
|
|
229
|
+
field: "date",
|
|
230
|
+
match: "exactMatch",
|
|
231
|
+
terms: ["schema:startDate", "event:time"]
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
lexicon: "id.sifa.profile.presentationDelivery",
|
|
235
|
+
field: "eventName",
|
|
236
|
+
match: "closeMatch",
|
|
237
|
+
terms: ["schema:superEvent", "bibo:Conference"]
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
lexicon: "id.sifa.profile.presentationDelivery",
|
|
241
|
+
field: "mode",
|
|
242
|
+
match: "exactMatch",
|
|
243
|
+
terms: ["schema:eventAttendanceMode"],
|
|
244
|
+
note: "The community.lexicon.calendar.event known values are already one-to-one with the schema.org enumeration."
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
lexicon: "id.sifa.profile.presentationDelivery",
|
|
248
|
+
field: "presentationRef",
|
|
249
|
+
match: "closeMatch",
|
|
250
|
+
terms: ["bibo:presentedAt", "schema:workPerformed"]
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
lexicon: "id.sifa.profile.presentationDelivery",
|
|
254
|
+
field: "role",
|
|
255
|
+
match: "closeMatch",
|
|
256
|
+
terms: ["bibo:performer", "schema:performer"],
|
|
257
|
+
note: "No external vocabulary distinguishes presenter, panelist, keynote, workshop and host at this granularity."
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
lexicon: "id.sifa.profile.presentationDelivery",
|
|
261
|
+
field: "status",
|
|
262
|
+
match: "exactMatch",
|
|
263
|
+
terms: ["schema:eventStatus"],
|
|
264
|
+
note: "As with mode, already one-to-one with the schema.org enumeration."
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
lexicon: "id.sifa.profile.presentationDelivery",
|
|
268
|
+
field: "title",
|
|
269
|
+
match: "exactMatch",
|
|
270
|
+
terms: ["dcterms:title", "schema:name"]
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
lexicon: "id.sifa.profile.project",
|
|
274
|
+
match: "exactMatch",
|
|
275
|
+
terms: ["schema:Project", "foaf:Project"]
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
lexicon: "id.sifa.profile.publication",
|
|
279
|
+
match: "broadMatch",
|
|
280
|
+
terms: ["bibo:Document", "schema:CreativeWork"],
|
|
281
|
+
note: "Refine to bibo:AcademicArticle, bibo:Book, bibo:Report or bibo:Thesis when a resource type is known. COAR is the value anchor."
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
lexicon: "id.sifa.profile.publication",
|
|
285
|
+
field: "authors",
|
|
286
|
+
match: "exactMatch",
|
|
287
|
+
terms: ["bibo:authorList", "schema:author"],
|
|
288
|
+
note: "bibo:authorList is an ordered rdf:List and preserves author order, which schema:author does not guarantee."
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
lexicon: "id.sifa.profile.publication",
|
|
292
|
+
field: "description",
|
|
293
|
+
match: "exactMatch",
|
|
294
|
+
terms: ["bibo:abstract", "schema:abstract"]
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
lexicon: "id.sifa.profile.publication",
|
|
298
|
+
field: "doi",
|
|
299
|
+
match: "exactMatch",
|
|
300
|
+
terms: ["bibo:doi", "prism:doi"],
|
|
301
|
+
note: "schema:identifier with a PropertyValue of propertyID 'doi' is the JSON-LD serialization; bibo:doi is the direct term."
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
lexicon: "id.sifa.profile.publication",
|
|
305
|
+
field: "publishedAt",
|
|
306
|
+
match: "exactMatch",
|
|
307
|
+
terms: ["dcterms:issued", "schema:datePublished"]
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
lexicon: "id.sifa.profile.publication",
|
|
311
|
+
field: "publisher",
|
|
312
|
+
match: "exactMatch",
|
|
313
|
+
terms: ["dcterms:publisher", "schema:publisher"]
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
lexicon: "id.sifa.profile.publication",
|
|
317
|
+
field: "relatedIdentifiers",
|
|
318
|
+
match: "closeMatch",
|
|
319
|
+
terms: ["dcterms:relation"]
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
lexicon: "id.sifa.profile.publication",
|
|
323
|
+
field: "subtitle",
|
|
324
|
+
match: "closeMatch",
|
|
325
|
+
terms: ["schema:alternativeHeadline"]
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
lexicon: "id.sifa.profile.publication",
|
|
329
|
+
field: "title",
|
|
330
|
+
match: "exactMatch",
|
|
331
|
+
terms: ["dcterms:title", "schema:name"]
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
lexicon: "id.sifa.profile.publication",
|
|
335
|
+
field: "type",
|
|
336
|
+
match: "closeMatch",
|
|
337
|
+
terms: ["dcterms:type", "schema:additionalType"],
|
|
338
|
+
note: "COAR Resource Types is the anchor a consumer should map to. The values here are ORCID's because that is the vocabulary the data arrives in; deviating from the id.sifa.defs token convention is deliberate, since the vocabulary is ORCID's rather than Sifa's."
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
lexicon: "id.sifa.profile.publication",
|
|
342
|
+
field: "url",
|
|
343
|
+
match: "exactMatch",
|
|
344
|
+
terms: ["bibo:uri", "schema:url"]
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
lexicon: "id.sifa.profile.self",
|
|
348
|
+
match: "exactMatch",
|
|
349
|
+
terms: ["schema:Person", "foaf:Person"]
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
lexicon: "id.sifa.profile.self",
|
|
353
|
+
field: "about",
|
|
354
|
+
match: "exactMatch",
|
|
355
|
+
terms: ["schema:description"]
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
lexicon: "id.sifa.profile.self",
|
|
359
|
+
field: "avatar",
|
|
360
|
+
match: "exactMatch",
|
|
361
|
+
terms: ["schema:image", "foaf:depiction"]
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
lexicon: "id.sifa.profile.self",
|
|
365
|
+
field: "displayName",
|
|
366
|
+
match: "exactMatch",
|
|
367
|
+
terms: ["schema:name", "foaf:name"]
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
lexicon: "id.sifa.profile.self",
|
|
371
|
+
field: "familyName",
|
|
372
|
+
match: "exactMatch",
|
|
373
|
+
terms: ["schema:familyName", "foaf:family_name"]
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
lexicon: "id.sifa.profile.self",
|
|
377
|
+
field: "givenName",
|
|
378
|
+
match: "exactMatch",
|
|
379
|
+
terms: ["schema:givenName", "foaf:givenname"]
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
lexicon: "id.sifa.profile.self",
|
|
383
|
+
field: "headline",
|
|
384
|
+
match: "closeMatch",
|
|
385
|
+
terms: ["schema:jobTitle"]
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
lexicon: "id.sifa.profile.self",
|
|
389
|
+
field: "location",
|
|
390
|
+
match: "closeMatch",
|
|
391
|
+
terms: ["schema:homeLocation"]
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
lexicon: "id.sifa.profile.skill",
|
|
395
|
+
match: "closeMatch",
|
|
396
|
+
terms: ["schema:knowsAbout", "schema:DefinedTerm"],
|
|
397
|
+
note: "ESCO is the value anchor."
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
lexicon: "id.sifa.profile.volunteering",
|
|
401
|
+
match: "closeMatch",
|
|
402
|
+
terms: ["org:Membership", "schema:OrganizationRole"]
|
|
403
|
+
}
|
|
404
|
+
],
|
|
405
|
+
unmapped: [
|
|
406
|
+
{
|
|
407
|
+
lexicon: "id.sifa.profile.self",
|
|
408
|
+
field: "pronouns",
|
|
409
|
+
reason: "No stable external term. schema.org has no pronouns property."
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
lexicon: "id.sifa.profile.self",
|
|
413
|
+
field: "discoverable",
|
|
414
|
+
reason: "Sifa indexing control, not a fact about the person."
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
lexicon: "id.sifa.profile.position",
|
|
418
|
+
field: "isPrimary",
|
|
419
|
+
reason: "Sifa display ordering concern."
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
lexicon: "id.sifa.profile.education",
|
|
423
|
+
field: "grade",
|
|
424
|
+
reason: "No comparable external term; grading scales are not portable."
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
lexicon: "id.sifa.profile.language",
|
|
428
|
+
field: "proficiency",
|
|
429
|
+
reason: "The known values are CEFR-shaped but not CEFR-named. Map only; renaming a published lexicon for a cosmetic gain is not worth the break."
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
lexicon: "id.sifa.confirmation",
|
|
433
|
+
reason: "A record affirming another record is reification. schema:Review and schema:ClaimReview both imply an evaluation that a confirmation does not make."
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
lexicon: "id.sifa.endorsement",
|
|
437
|
+
reason: "Same reification problem as confirmation. Any mapping that lets a consumer aggregate endorsements into a score works against the descriptive-only trust model."
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
lexicon: "id.sifa.graph.connection",
|
|
441
|
+
reason: "foaf:knows carries no consent semantics. A Sifa connection is bilateral and confirmed; flattening it to foaf:knows would misrepresent an unconfirmed acquaintance claim as mutual."
|
|
442
|
+
},
|
|
443
|
+
{
|
|
444
|
+
lexicon: "id.sifa.graph.follow",
|
|
445
|
+
reason: "See id.sifa.graph.connection."
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
lexicon: "id.sifa.meeting",
|
|
449
|
+
reason: "Attestation semantics; same reification problem as confirmation."
|
|
450
|
+
}
|
|
451
|
+
]
|
|
452
|
+
};
|
|
453
|
+
|
|
454
|
+
// src/jsonld/terms.ts
|
|
455
|
+
var VOCABULARIES = term_mappings_default.vocabularies;
|
|
456
|
+
var TERM_MAPPINGS = [
|
|
457
|
+
...term_mappings_default.mappings.map((m) => ({
|
|
458
|
+
lexicon: m.lexicon,
|
|
459
|
+
...m.field ? { field: m.field } : {},
|
|
460
|
+
terms: m.terms,
|
|
461
|
+
match: m.match,
|
|
462
|
+
...m.note ? { note: m.note } : {}
|
|
463
|
+
})),
|
|
464
|
+
...term_mappings_default.unmapped.map((u) => ({
|
|
465
|
+
lexicon: u.lexicon,
|
|
466
|
+
...u.field ? { field: u.field } : {},
|
|
467
|
+
terms: [],
|
|
468
|
+
match: "noMatch",
|
|
469
|
+
note: u.reason
|
|
470
|
+
}))
|
|
471
|
+
];
|
|
472
|
+
function expandCurie(curie) {
|
|
473
|
+
const separator = curie.indexOf(":");
|
|
474
|
+
if (separator <= 0) return null;
|
|
475
|
+
const prefix = curie.slice(0, separator);
|
|
476
|
+
const local = curie.slice(separator + 1);
|
|
477
|
+
if (!local) return null;
|
|
478
|
+
if (!Object.prototype.hasOwnProperty.call(VOCABULARIES, prefix)) return null;
|
|
479
|
+
return `${VOCABULARIES[prefix]}${local}`;
|
|
480
|
+
}
|
|
481
|
+
function mappingsForLexicon(nsid) {
|
|
482
|
+
return TERM_MAPPINGS.filter((m) => m.lexicon === nsid);
|
|
483
|
+
}
|
|
484
|
+
function isDeliberatelyUnmapped(nsid, field) {
|
|
485
|
+
return TERM_MAPPINGS.some(
|
|
486
|
+
(m) => m.lexicon === nsid && m.field === field && m.match === "noMatch"
|
|
487
|
+
);
|
|
488
|
+
}
|
|
489
|
+
export {
|
|
490
|
+
TERM_MAPPINGS,
|
|
491
|
+
VOCABULARIES,
|
|
492
|
+
expandCurie,
|
|
493
|
+
isDeliberatelyUnmapped,
|
|
494
|
+
mappingsForLexicon
|
|
495
|
+
};
|
|
496
|
+
//# sourceMappingURL=terms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/jsonld/term-mappings.json","../../src/jsonld/terms.ts"],"sourcesContent":["{\n \"$schema\": \"https://sifa.id/schemas/term-mappings/v1.json\",\n \"version\": \"1.0.0\",\n \"description\": \"Reconciliation between id.sifa.* lexicon terms and existing RDF vocabularies. RDF is used here as vocabulary only: Sifa records are Lexicon JSON on the AT Protocol, and nothing here changes how they are stored or transmitted. Match strengths use SKOS mapping relations.\",\n \"vocabularies\": {\n \"schema\": \"https://schema.org/\",\n \"bibo\": \"http://purl.org/ontology/bibo/\",\n \"dcterms\": \"http://purl.org/dc/terms/\",\n \"foaf\": \"http://xmlns.com/foaf/0.1/\",\n \"org\": \"http://www.w3.org/ns/org#\",\n \"prism\": \"http://prismstandard.org/namespaces/basic/2.1/\",\n \"event\": \"http://purl.org/NET/c4dm/event.owl#\",\n \"skos\": \"http://www.w3.org/2004/02/skos/core#\"\n },\n \"mappings\": [\n {\n \"lexicon\": \"id.sifa.org.profile\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:Organization\", \"org:FormalOrganization\"],\n \"note\": \"ROR is the value anchor.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.certification\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:EducationalOccupationalCredential\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.certification\",\n \"field\": \"credentialUrl\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:url\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.certification\",\n \"field\": \"expiresAt\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:validUntil\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.course\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:Course\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.course\",\n \"field\": \"number\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:courseCode\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.education\",\n \"match\": \"closeMatch\",\n \"terms\": [\"schema:EducationalOccupationalCredential\"],\n \"note\": \"One record maps to two schema.org assertions: alumniOf for the institution and hasCredential for the degree.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.education\",\n \"field\": \"degree\",\n \"match\": \"closeMatch\",\n \"terms\": [\"schema:hasCredential\", \"bibo:degree\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.education\",\n \"field\": \"eqfLevel\",\n \"match\": \"closeMatch\",\n \"terms\": [\"schema:educationalLevel\"],\n \"note\": \"EQF is the value anchor.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.education\",\n \"field\": \"fieldOfStudy\",\n \"match\": \"closeMatch\",\n \"terms\": [\"schema:educationalCredentialAwarded\"],\n \"note\": \"ISCED-F is the value anchor.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.education\",\n \"field\": \"institution\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:alumniOf\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.externalAccount\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:sameAs\", \"foaf:account\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.honor\",\n \"match\": \"broadMatch\",\n \"terms\": [\"schema:award\"],\n \"note\": \"schema:award is a bare string, so issuer and date are lost. No better term exists in BIBO either.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.involvement\",\n \"match\": \"broadMatch\",\n \"terms\": [\"org:Membership\"],\n \"note\": \"The kind known values have no external equivalent.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.language\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:knowsLanguage\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.position\",\n \"match\": \"closeMatch\",\n \"terms\": [\"org:Membership\", \"schema:OrganizationRole\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.position\",\n \"field\": \"company\",\n \"match\": \"exactMatch\",\n \"terms\": [\"org:organization\", \"schema:worksFor\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.position\",\n \"field\": \"description\",\n \"match\": \"exactMatch\",\n \"terms\": [\"dcterms:description\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.position\",\n \"field\": \"employmentType\",\n \"match\": \"closeMatch\",\n \"terms\": [\"schema:employmentType\"],\n \"note\": \"schema:employmentType is free text. ESCO is the better value anchor.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.position\",\n \"field\": \"endedAt\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:endDate\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.position\",\n \"field\": \"entityRef\",\n \"match\": \"closeMatch\",\n \"terms\": [\"schema:sameAs\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.position\",\n \"field\": \"location\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:jobLocation\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.position\",\n \"field\": \"startedAt\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:startDate\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.position\",\n \"field\": \"title\",\n \"match\": \"exactMatch\",\n \"terms\": [\"org:role\", \"schema:roleName\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.position\",\n \"field\": \"workplaceType\",\n \"match\": \"narrowMatch\",\n \"terms\": [\"schema:jobLocationType\"],\n \"note\": \"schema.org models only a remote flag; Sifa distinguishes onSite, remote, and hybrid.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.presentation\",\n \"match\": \"closeMatch\",\n \"terms\": [\"bibo:Slideshow\", \"schema:PresentationDigitalDocument\"],\n \"note\": \"Neither term carries the \\\"reusable, deliverable more than once\\\" semantics of the Sifa record.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.presentation\",\n \"field\": \"coverImage\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:image\", \"foaf:depiction\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.presentation\",\n \"field\": \"description\",\n \"match\": \"exactMatch\",\n \"terms\": [\"bibo:abstract\", \"schema:abstract\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.presentation\",\n \"field\": \"duration\",\n \"match\": \"narrowMatch\",\n \"terms\": [\"schema:timeRequired\"],\n \"note\": \"The lexicon models a range; schema:timeRequired is a single ISO 8601 duration.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.presentation\",\n \"field\": \"intendedAudiences\",\n \"match\": \"closeMatch\",\n \"terms\": [\"schema:audience\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.presentation\",\n \"field\": \"title\",\n \"match\": \"exactMatch\",\n \"terms\": [\"dcterms:title\", \"schema:name\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.presentation\",\n \"field\": \"writeupRef\",\n \"match\": \"closeMatch\",\n \"terms\": [\"dcterms:isReferencedBy\", \"schema:subjectOf\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.presentationDelivery\",\n \"match\": \"closeMatch\",\n \"terms\": [\"schema:Event\", \"event:Event\"],\n \"note\": \"BIBO models this relation as bibo:Slideshow bibo:presentedAt event:Event.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.presentationDelivery\",\n \"field\": \"address\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:location\", \"event:place\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.presentationDelivery\",\n \"field\": \"coSpeakers\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:performer\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.presentationDelivery\",\n \"field\": \"date\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:startDate\", \"event:time\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.presentationDelivery\",\n \"field\": \"eventName\",\n \"match\": \"closeMatch\",\n \"terms\": [\"schema:superEvent\", \"bibo:Conference\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.presentationDelivery\",\n \"field\": \"mode\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:eventAttendanceMode\"],\n \"note\": \"The community.lexicon.calendar.event known values are already one-to-one with the schema.org enumeration.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.presentationDelivery\",\n \"field\": \"presentationRef\",\n \"match\": \"closeMatch\",\n \"terms\": [\"bibo:presentedAt\", \"schema:workPerformed\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.presentationDelivery\",\n \"field\": \"role\",\n \"match\": \"closeMatch\",\n \"terms\": [\"bibo:performer\", \"schema:performer\"],\n \"note\": \"No external vocabulary distinguishes presenter, panelist, keynote, workshop and host at this granularity.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.presentationDelivery\",\n \"field\": \"status\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:eventStatus\"],\n \"note\": \"As with mode, already one-to-one with the schema.org enumeration.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.presentationDelivery\",\n \"field\": \"title\",\n \"match\": \"exactMatch\",\n \"terms\": [\"dcterms:title\", \"schema:name\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.project\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:Project\", \"foaf:Project\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.publication\",\n \"match\": \"broadMatch\",\n \"terms\": [\"bibo:Document\", \"schema:CreativeWork\"],\n \"note\": \"Refine to bibo:AcademicArticle, bibo:Book, bibo:Report or bibo:Thesis when a resource type is known. COAR is the value anchor.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.publication\",\n \"field\": \"authors\",\n \"match\": \"exactMatch\",\n \"terms\": [\"bibo:authorList\", \"schema:author\"],\n \"note\": \"bibo:authorList is an ordered rdf:List and preserves author order, which schema:author does not guarantee.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.publication\",\n \"field\": \"description\",\n \"match\": \"exactMatch\",\n \"terms\": [\"bibo:abstract\", \"schema:abstract\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.publication\",\n \"field\": \"doi\",\n \"match\": \"exactMatch\",\n \"terms\": [\"bibo:doi\", \"prism:doi\"],\n \"note\": \"schema:identifier with a PropertyValue of propertyID 'doi' is the JSON-LD serialization; bibo:doi is the direct term.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.publication\",\n \"field\": \"publishedAt\",\n \"match\": \"exactMatch\",\n \"terms\": [\"dcterms:issued\", \"schema:datePublished\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.publication\",\n \"field\": \"publisher\",\n \"match\": \"exactMatch\",\n \"terms\": [\"dcterms:publisher\", \"schema:publisher\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.publication\",\n \"field\": \"relatedIdentifiers\",\n \"match\": \"closeMatch\",\n \"terms\": [\"dcterms:relation\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.publication\",\n \"field\": \"subtitle\",\n \"match\": \"closeMatch\",\n \"terms\": [\"schema:alternativeHeadline\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.publication\",\n \"field\": \"title\",\n \"match\": \"exactMatch\",\n \"terms\": [\"dcterms:title\", \"schema:name\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.publication\",\n \"field\": \"type\",\n \"match\": \"closeMatch\",\n \"terms\": [\"dcterms:type\", \"schema:additionalType\"],\n \"note\": \"COAR Resource Types is the anchor a consumer should map to. The values here are ORCID's because that is the vocabulary the data arrives in; deviating from the id.sifa.defs token convention is deliberate, since the vocabulary is ORCID's rather than Sifa's.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.publication\",\n \"field\": \"url\",\n \"match\": \"exactMatch\",\n \"terms\": [\"bibo:uri\", \"schema:url\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.self\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:Person\", \"foaf:Person\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.self\",\n \"field\": \"about\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:description\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.self\",\n \"field\": \"avatar\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:image\", \"foaf:depiction\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.self\",\n \"field\": \"displayName\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:name\", \"foaf:name\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.self\",\n \"field\": \"familyName\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:familyName\", \"foaf:family_name\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.self\",\n \"field\": \"givenName\",\n \"match\": \"exactMatch\",\n \"terms\": [\"schema:givenName\", \"foaf:givenname\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.self\",\n \"field\": \"headline\",\n \"match\": \"closeMatch\",\n \"terms\": [\"schema:jobTitle\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.self\",\n \"field\": \"location\",\n \"match\": \"closeMatch\",\n \"terms\": [\"schema:homeLocation\"]\n },\n {\n \"lexicon\": \"id.sifa.profile.skill\",\n \"match\": \"closeMatch\",\n \"terms\": [\"schema:knowsAbout\", \"schema:DefinedTerm\"],\n \"note\": \"ESCO is the value anchor.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.volunteering\",\n \"match\": \"closeMatch\",\n \"terms\": [\"org:Membership\", \"schema:OrganizationRole\"]\n }\n ],\n \"unmapped\": [\n {\n \"lexicon\": \"id.sifa.profile.self\",\n \"field\": \"pronouns\",\n \"reason\": \"No stable external term. schema.org has no pronouns property.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.self\",\n \"field\": \"discoverable\",\n \"reason\": \"Sifa indexing control, not a fact about the person.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.position\",\n \"field\": \"isPrimary\",\n \"reason\": \"Sifa display ordering concern.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.education\",\n \"field\": \"grade\",\n \"reason\": \"No comparable external term; grading scales are not portable.\"\n },\n {\n \"lexicon\": \"id.sifa.profile.language\",\n \"field\": \"proficiency\",\n \"reason\": \"The known values are CEFR-shaped but not CEFR-named. Map only; renaming a published lexicon for a cosmetic gain is not worth the break.\"\n },\n {\n \"lexicon\": \"id.sifa.confirmation\",\n \"reason\": \"A record affirming another record is reification. schema:Review and schema:ClaimReview both imply an evaluation that a confirmation does not make.\"\n },\n {\n \"lexicon\": \"id.sifa.endorsement\",\n \"reason\": \"Same reification problem as confirmation. Any mapping that lets a consumer aggregate endorsements into a score works against the descriptive-only trust model.\"\n },\n {\n \"lexicon\": \"id.sifa.graph.connection\",\n \"reason\": \"foaf:knows carries no consent semantics. A Sifa connection is bilateral and confirmed; flattening it to foaf:knows would misrepresent an unconfirmed acquaintance claim as mutual.\"\n },\n {\n \"lexicon\": \"id.sifa.graph.follow\",\n \"reason\": \"See id.sifa.graph.connection.\"\n },\n {\n \"lexicon\": \"id.sifa.meeting\",\n \"reason\": \"Attestation semantics; same reification problem as confirmation.\"\n }\n ]\n}\n","/**\n * Reconciliation between `id.sifa.*` lexicon terms and existing RDF\n * vocabularies.\n *\n * The facts live in sifa-lexicons, as `x-skos:*` annotations on the lexicon\n * defs and properties. Those annotations are published to the authority PDS,\n * so a third party resolving `id.sifa.*` already reads them; that makes the\n * lexicons the source of truth and `./term-mappings.json` a derived copy,\n * refreshed by `scripts/sync-term-mappings.mjs` and drift-checked in CI.\n *\n * To change a mapping, change the lexicon, not this file.\n *\n * Scope note: RDF is adopted here as *vocabulary only*. Sifa records are\n * Lexicon JSON on the AT Protocol; nothing in this module changes how records\n * are stored or transmitted. A mapping is a one-directional annotation over a\n * lexicon designed on its own merits, never a constraint on lexicon design.\n * When a term does not fit, the correct answer is `noMatch`, not a different\n * lexicon.\n */\n\nimport document from './term-mappings.json';\n\n/** Vocabulary prefix -> namespace IRI. */\nexport const VOCABULARIES: Readonly<Record<string, string>> = document.vocabularies;\n\nexport type VocabularyPrefix = keyof typeof document.vocabularies;\n\n/**\n * Strength of a mapping, using SKOS mapping relations so the table is itself\n * expressible as RDF.\n *\n * `noMatch` is not the absence of an entry. It is a deliberate statement that\n * no external term should be used for this concept, and it carries a reason.\n */\nexport type MatchStrength =\n 'exactMatch' | 'closeMatch' | 'broadMatch' | 'narrowMatch' | 'relatedMatch' | 'noMatch';\n\nexport interface TermMapping {\n /** Lexicon NSID, e.g. `id.sifa.profile.presentation`. */\n readonly lexicon: string;\n /**\n * Field name within the record. Omitted for a record-level class mapping\n * (what the record *is*, rather than what one of its fields means).\n */\n readonly field?: string;\n /** CURIEs, e.g. `dcterms:title`. Empty when `match` is `noMatch`. */\n readonly terms: readonly string[];\n readonly match: MatchStrength;\n /** Rationale. Always present when `match` is `noMatch`. */\n readonly note?: string;\n}\n\ninterface RawMapping {\n lexicon: string;\n field?: string;\n terms: string[];\n match: string;\n note?: string;\n}\n\ninterface RawUnmapped {\n lexicon: string;\n field?: string;\n reason: string;\n}\n\n/**\n * Every reconciliation Sifa asserts, including the deliberate non-mappings.\n *\n * The published document splits these into `mappings` and `unmapped`, which\n * reads better over the wire. Callers here want one list, so they are\n * flattened back together.\n */\nexport const TERM_MAPPINGS: readonly TermMapping[] = [\n ...(document.mappings as RawMapping[]).map((m): TermMapping => ({\n lexicon: m.lexicon,\n ...(m.field ? { field: m.field } : {}),\n terms: m.terms,\n match: m.match as MatchStrength,\n ...(m.note ? { note: m.note } : {}),\n })),\n ...(document.unmapped as RawUnmapped[]).map((u): TermMapping => ({\n lexicon: u.lexicon,\n ...(u.field ? { field: u.field } : {}),\n terms: [],\n match: 'noMatch',\n note: u.reason,\n })),\n];\n\n/**\n * Expand a CURIE (`dcterms:title`) to a full IRI. Returns null for an unknown\n * prefix rather than guessing a namespace.\n */\nexport function expandCurie(curie: string): string | null {\n const separator = curie.indexOf(':');\n if (separator <= 0) return null;\n const prefix = curie.slice(0, separator);\n const local = curie.slice(separator + 1);\n if (!local) return null;\n if (!Object.prototype.hasOwnProperty.call(VOCABULARIES, prefix)) return null;\n return `${VOCABULARIES[prefix]}${local}`;\n}\n\n/** All mappings declared for one lexicon NSID, record level and field level. */\nexport function mappingsForLexicon(nsid: string): readonly TermMapping[] {\n return TERM_MAPPINGS.filter((m) => m.lexicon === nsid);\n}\n\n/** True when Sifa has deliberately declined to map this lexicon or field. */\nexport function isDeliberatelyUnmapped(nsid: string, field?: string): boolean {\n return TERM_MAPPINGS.some(\n (m) => m.lexicon === nsid && m.field === field && m.match === 'noMatch',\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// src/jsonld/url.ts
|
|
2
|
+
var DEFAULT_BASE_URL = "https://sifa.id";
|
|
3
|
+
function normaliseBaseUrl(baseUrl) {
|
|
4
|
+
const value = baseUrl ?? DEFAULT_BASE_URL;
|
|
5
|
+
let end = value.length;
|
|
6
|
+
while (end > 0 && value.charCodeAt(end - 1) === 47) end -= 1;
|
|
7
|
+
return value.slice(0, end);
|
|
8
|
+
}
|
|
9
|
+
function profileUrl(baseUrl, handle) {
|
|
10
|
+
return `${baseUrl}/p/${handle}`;
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
DEFAULT_BASE_URL,
|
|
14
|
+
normaliseBaseUrl,
|
|
15
|
+
profileUrl
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/jsonld/url.ts"],"sourcesContent":["/** Shared URL helpers for the JSON-LD emitters. */\n\nexport const DEFAULT_BASE_URL = 'https://sifa.id';\n\n/**\n * Drop trailing slashes from a caller-supplied base URL.\n *\n * Written as a scan rather than `replace(/\\/+$/, '')` on purpose: the regex\n * form is a polynomial-backtracking hazard on input the library does not\n * control (CodeQL js/polynomial-redos). This runs in linear time.\n */\nexport function normaliseBaseUrl(baseUrl: string | undefined): string {\n const value = baseUrl ?? DEFAULT_BASE_URL;\n let end = value.length;\n while (end > 0 && value.charCodeAt(end - 1) === 0x2f) end -= 1;\n return value.slice(0, end);\n}\n\nexport function profileUrl(baseUrl: string, handle: string): string {\n return `${baseUrl}/p/${handle}`;\n}\n"],"mappings":";AAEO,IAAM,mBAAmB;AASzB,SAAS,iBAAiB,SAAqC;AACpE,QAAM,QAAQ,WAAW;AACzB,MAAI,MAAM,MAAM;AAChB,SAAO,MAAM,KAAK,MAAM,WAAW,MAAM,CAAC,MAAM,GAAM,QAAO;AAC7D,SAAO,MAAM,MAAM,GAAG,GAAG;AAC3B;AAEO,SAAS,WAAW,SAAiB,QAAwB;AAClE,SAAO,GAAG,OAAO,MAAM,MAAM;AAC/B;","names":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// src/jsonld/works-graph.ts
|
|
2
|
+
import { filterHidden } from "../profile/section-model.js";
|
|
3
|
+
import { normaliseBaseUrl } from "./url.js";
|
|
4
|
+
import {
|
|
5
|
+
buildCourseJsonLd,
|
|
6
|
+
buildPresentationJsonLd,
|
|
7
|
+
buildProjectJsonLd,
|
|
8
|
+
buildPublicationJsonLd
|
|
9
|
+
} from "./works.js";
|
|
10
|
+
function visible(items) {
|
|
11
|
+
return filterHidden(items ? [...items] : void 0);
|
|
12
|
+
}
|
|
13
|
+
function buildProfileWorksJsonLd(profile, author, options = {}) {
|
|
14
|
+
const personId = options.canonicalUrl ?? `${normaliseBaseUrl(options.baseUrl)}/p/${profile.handle}`;
|
|
15
|
+
const strip = (node) => {
|
|
16
|
+
const { "@context": _context, ...rest } = node;
|
|
17
|
+
return rest;
|
|
18
|
+
};
|
|
19
|
+
const authorRef = [{ "@id": personId }];
|
|
20
|
+
const graph = [
|
|
21
|
+
...visible(profile.publications).map((p) => ({
|
|
22
|
+
...strip(buildPublicationJsonLd(p, author, options)),
|
|
23
|
+
author: authorRef
|
|
24
|
+
})),
|
|
25
|
+
...visible(profile.presentations).map((p) => ({
|
|
26
|
+
...strip(buildPresentationJsonLd(p, author, options)),
|
|
27
|
+
author: authorRef
|
|
28
|
+
})),
|
|
29
|
+
...visible(profile.courses).map((c) => strip(buildCourseJsonLd(c, options))),
|
|
30
|
+
...visible(profile.projects).map((p) => ({
|
|
31
|
+
...strip(buildProjectJsonLd(p, author, options)),
|
|
32
|
+
member: authorRef
|
|
33
|
+
}))
|
|
34
|
+
];
|
|
35
|
+
if (graph.length === 0) return null;
|
|
36
|
+
return { "@context": "https://schema.org", "@graph": graph };
|
|
37
|
+
}
|
|
38
|
+
export {
|
|
39
|
+
buildProfileWorksJsonLd
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=works-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/jsonld/works-graph.ts"],"sourcesContent":["/**\n * The works on a profile as one JSON-LD `@graph`.\n *\n * A profile page already emits a `ProfilePage` whose `mainEntity` is the\n * Person. Publications, talks, courses and projects are separate entities\n * rather than properties of that Person, so they go in their own block and\n * point back at the Person by `@id` instead of repeating the whole node.\n */\n\nimport { filterHidden } from '../profile/section-model.js';\nimport type { JsonLdOptions } from './profile.js';\nimport { normaliseBaseUrl } from './url.js';\nimport {\n buildCourseJsonLd,\n buildPresentationJsonLd,\n buildProjectJsonLd,\n buildPublicationJsonLd,\n type CourseInput,\n type PresentationInput,\n type ProjectInput,\n type PublicationInput,\n type WorkAuthor,\n} from './works.js';\n\nexport interface ProfileWorksInput {\n readonly handle: string;\n readonly publications?: readonly PublicationInput[];\n readonly presentations?: readonly PresentationInput[];\n readonly courses?: readonly CourseInput[];\n readonly projects?: readonly ProjectInput[];\n}\n\n/** `filterHidden` takes a mutable array; inputs here are readonly. */\nfunction visible<T extends { hidden?: boolean }>(items: readonly T[] | undefined): T[] {\n return filterHidden(items ? [...items] : undefined);\n}\n\n/**\n * Returns null when there is nothing to say, so a caller can skip the script\n * block entirely rather than emitting an empty graph.\n */\nexport function buildProfileWorksJsonLd(\n profile: ProfileWorksInput,\n author: WorkAuthor,\n options: JsonLdOptions = {},\n) {\n const personId =\n options.canonicalUrl ?? `${normaliseBaseUrl(options.baseUrl)}/p/${profile.handle}`;\n\n // Each work is built by its own emitter, then its `@context` is dropped: the\n // graph carries one context for every node in it.\n const strip = <T extends { '@context': string }>(node: T) => {\n const { '@context': _context, ...rest } = node;\n return rest;\n };\n\n // The Person is emitted in full by the ProfilePage block. Referencing it by\n // `@id` keeps one Person in the graph rather than several partial copies for\n // a consumer to reconcile.\n const authorRef = [{ '@id': personId }];\n\n const graph: Record<string, unknown>[] = [\n ...visible(profile.publications).map((p) => ({\n ...strip(buildPublicationJsonLd(p, author, options)),\n author: authorRef,\n })),\n ...visible(profile.presentations).map((p) => ({\n ...strip(buildPresentationJsonLd(p, author, options)),\n author: authorRef,\n })),\n ...visible(profile.courses).map((c) => strip(buildCourseJsonLd(c, options))),\n ...visible(profile.projects).map((p) => ({\n ...strip(buildProjectJsonLd(p, author, options)),\n member: authorRef,\n })),\n ];\n\n if (graph.length === 0) return null;\n\n return { '@context': 'https://schema.org', '@graph': graph };\n}\n"],"mappings":";AASA,SAAS,oBAAoB;AAE7B,SAAS,wBAAwB;AACjC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAMK;AAWP,SAAS,QAAwC,OAAsC;AACrF,SAAO,aAAa,QAAQ,CAAC,GAAG,KAAK,IAAI,MAAS;AACpD;AAMO,SAAS,wBACd,SACA,QACA,UAAyB,CAAC,GAC1B;AACA,QAAM,WACJ,QAAQ,gBAAgB,GAAG,iBAAiB,QAAQ,OAAO,CAAC,MAAM,QAAQ,MAAM;AAIlF,QAAM,QAAQ,CAAmC,SAAY;AAC3D,UAAM,EAAE,YAAY,UAAU,GAAG,KAAK,IAAI;AAC1C,WAAO;AAAA,EACT;AAKA,QAAM,YAAY,CAAC,EAAE,OAAO,SAAS,CAAC;AAEtC,QAAM,QAAmC;AAAA,IACvC,GAAG,QAAQ,QAAQ,YAAY,EAAE,IAAI,CAAC,OAAO;AAAA,MAC3C,GAAG,MAAM,uBAAuB,GAAG,QAAQ,OAAO,CAAC;AAAA,MACnD,QAAQ;AAAA,IACV,EAAE;AAAA,IACF,GAAG,QAAQ,QAAQ,aAAa,EAAE,IAAI,CAAC,OAAO;AAAA,MAC5C,GAAG,MAAM,wBAAwB,GAAG,QAAQ,OAAO,CAAC;AAAA,MACpD,QAAQ;AAAA,IACV,EAAE;AAAA,IACF,GAAG,QAAQ,QAAQ,OAAO,EAAE,IAAI,CAAC,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,CAAC;AAAA,IAC3E,GAAG,QAAQ,QAAQ,QAAQ,EAAE,IAAI,CAAC,OAAO;AAAA,MACvC,GAAG,MAAM,mBAAmB,GAAG,QAAQ,OAAO,CAAC;AAAA,MAC/C,QAAQ;AAAA,IACV,EAAE;AAAA,EACJ;AAEA,MAAI,MAAM,WAAW,EAAG,QAAO;AAE/B,SAAO,EAAE,YAAY,sBAAsB,UAAU,MAAM;AAC7D;","names":[]}
|