-
-
Save stain/4ae12d225b094246227740d7a93f0bde to your computer and use it in GitHub Desktop.
{ | |
"@context": [ | |
{ | |
"@vocab": "https://www.iana.org/assignments/link-relations/", | |
"anchor": "@id", | |
"href": "@id", | |
"dct": "http://purl.org/dc/terms/", | |
"link": "https://www.iana.org/assignments/link-relations#", | |
"title": { | |
"@id": "http://purl.org/dc/terms/title" | |
}, | |
"title*": { | |
"@id": "http://purl.org/dc/terms/title" | |
}, | |
"type": { | |
"@id": "dct:format", | |
"@type": "@vocab" | |
} | |
}, | |
{ | |
"language": "@language", | |
"value": "@value", | |
"hreflang": { | |
"@id": "https://www.w3.org/ns/activitystreams#hreflang", | |
"@container": "@set" | |
} | |
} | |
], | |
"linkset": [ | |
{ | |
"anchor": "https://example.org/article/view/7507", | |
"author": [ | |
{ | |
"href": "https://orcid.org/0000-0002-4311-0897", | |
"type": "rdf/xml" | |
} | |
], | |
"item": [ | |
{ | |
"href": "https://example.org/article/7507/item/1", | |
"type": "application/pdf" | |
}, | |
{ | |
"href": "https://example.org/article/7507/item/2", | |
"type": "text/csv" | |
} | |
], | |
"cite-as": [ | |
{ | |
"href": "https://doi.org/10.841/zk2557" | |
} | |
] | |
}, | |
{ | |
"anchor": "https://example.com/links", | |
"alternate": [ | |
{ | |
"href": "https://mirror.example.com/links" | |
} | |
] | |
} | |
] | |
} |
<https://example.com/links> <https://www.iana.org/assignments/link-relations/alternate> <https://mirror.example.com/links> . | |
<https://example.org/article/7507/item/1> <http://purl.org/dc/terms/format> <https://www.iana.org/assignments/link-relations/application/pdf> . | |
<https://example.org/article/7507/item/2> <http://purl.org/dc/terms/format> <https://www.iana.org/assignments/link-relations/text/csv> . | |
<https://example.org/article/view/7507> <https://www.iana.org/assignments/link-relations/author> <https://orcid.org/0000-0002-4311-0897> . | |
<https://example.org/article/view/7507> <https://www.iana.org/assignments/link-relations/cite-as> <https://doi.org/10.841/zk2557> . | |
<https://example.org/article/view/7507> <https://www.iana.org/assignments/link-relations/item> <https://example.org/article/7507/item/1> . | |
<https://example.org/article/view/7507> <https://www.iana.org/assignments/link-relations/item> <https://example.org/article/7507/item/2> . | |
<https://orcid.org/0000-0002-4311-0897> <http://purl.org/dc/terms/format> <https://www.iana.org/assignments/link-relations/rdf/xml> . | |
_:b0 <https://www.iana.org/assignments/link-relations/linkset> <https://example.com/links> . | |
_:b0 <https://www.iana.org/assignments/link-relations/linkset> <https://example.org/article/view/7507> . |
Try adding "linkset": "@graph"
to the @context
, and it should get you the triples you want:
<https://example.com/links> <https://www.iana.org/assignments/link-relations/alternate> <https://mirror.example.com/links> .
<https://example.org/article/7507/item/1> <http://purl.org/dc/terms/format> <https://www.iana.org/assignments/link-relations/application/pdf> .
<https://example.org/article/7507/item/2> <http://purl.org/dc/terms/format> <https://www.iana.org/assignments/link-relations/text/csv> .
<https://example.org/article/view/7507> <https://www.iana.org/assignments/link-relations/author> <https://orcid.org/0000-0002-4311-0897> .
<https://example.org/article/view/7507> <https://www.iana.org/assignments/link-relations/cite-as> <https://doi.org/10.841/zk2557> .
<https://example.org/article/view/7507> <https://www.iana.org/assignments/link-relations/item> <https://example.org/article/7507/item/1> .
<https://example.org/article/view/7507> <https://www.iana.org/assignments/link-relations/item> <https://example.org/article/7507/item/2> .
<https://orcid.org/0000-0002-4311-0897> <http://purl.org/dc/terms/format> <https://www.iana.org/assignments/link-relations/rdf/xml> .
Yes, @BigBlueHat, that would work, except then you can't use "linkset" as an inner relation type, which is a bit odd given that this RFC would introduce that relationship.. So if we combine your trick with also calling the outer key @linkset
instead of linkset
we are good to go without needing to use JSON-LD 1.1 (which is still in draft stages)
About type
I think we can't use @vocab
trick here as it should map to some base URI for formats, like https://www.iana.org/assignments/media-types/
making https://www.iana.org/assignments/media-types/text/html etc -- but IANA never managed to decide on such a base URI. In addition that would mean format
would not work with parameters like charset
.
That means we should not use dct:format
- which is defined with range http://purl.org/dc/terms/MediaTypeOrExtent aka an object property to a URI resource - but rather the more simple dc:format
which allows plain literals. Then simply remove @type
for format
. That is how we mapped mediatype
in https://researchobject.github.io/specifications/bundle/#json-ld
Yeah...don't introduce any new @
prefixed terms... That'll run into issues in the future for sure.
In digging a bit more, I think "linkset": {"@container": "@list"}
gets a more correct result. It preserves the "linkset" relationship between multiple blank nodes: one for the linkset and one for each of the contained links (in this example).
Also, excellent points about format
. We used dc:format
(for likely very similar reasons) in the Web Annotation Data Model spec's context file.
Looks like
type
is also misinterpreted. Its value is rendered as a link relation URI rather than as a format string, eg<https://www.iana.org/assignments/link-relations/application/pdf>
instead of"application/pdf"