[JSON-LD]”Compact IRIs”についてW3C勧告書を読んでみた
JSON-LDの仕様の1つ「compact IRIs」についてW3Cの勧告書を読んでみた覚書です。Vocabularyの設定を接頭辞・接尾辞を組み合わせて簡単に実装できるような内容でした。
目次
JSON-LD 1.0のCompact IRIsについてGoogle翻訳を使いながら読んでみました。
おおよそこの解釈で合っているとは思うのですが、間違いや漏れがあればご指摘ください。
:(Compact IRIs)ってなに?
平たく言えば、RDFに必要な「IRIを楽に指定できる Syntax Tokens」の1つです。
毎回「https://」から始まる絶対IRIを指定するのではなく、「prefix:suffix」という書き方でコンパクトにIRIを指定することが可能になります。
Compact IRIsがないとき
[js]
{
"@context": {
"name" : "https://schema.org/name",
"image" : "https://schema.org/image",
"description" : "https://schema.org/description",
"url" : "https://schema.org/url",
"knows" : "https://schema.org/knows",
"jobTitle" : "https://schema.org/jobTitle",
"owns" : "https://schema.org/owns",
"relatedTo" : "https://schema.org/relatedTo",
"height" : "https://schema.org/height",
"hasPOS" : "https://schema.org/hasPOS",
"gender" : "https://schema.org/gender",
}
}
[/js]
使用するIRIを1つ1つ定義することになり、非常に煩雑で汎用性が失われます。
Compact IRIsがあるとき
[js]
{
"@context": {
"schema" : "https://schema.org/"
}
}
[/js]
“schema”で定義して「schema:name」「schema:image」などで使用するので、定義部分が非常にシンプルかつ軽量になります。
例と簡単な解説
[js]
{
"@context":
{
"foaf": "https://xmlns.com/foaf/0.1/"
…
},
"@type": "foaf:Person"
"foaf:name": "Dave Longley",
…
}
[/js]
この場合、「Dave Longley」のIRIは「https://xmlns.com/foaf/0.1/name」となります。
これは@contextで「foaf:https://xmlns.com/foaf/0.1/」が指定されている状態で、”Dave Longley”に”foaf:name”が指定されているからで、「foaf」と「name」が「:」で接続されて「https://xmlns.com/foaf/0.1/name」というIRIになるというものです。
同様に@typeの「”foaf:Person」は「https://xmlns.com/foaf/0.1/Person」になります。
Prefix(接頭辞)に求められるもの
接頭辞は@contextで定義されたものでなければなりません。
また、接頭辞に_(アンダースコア)やスペースを使用することができます。
Suffix(接尾辞)に求められるもの
Suffixに「//」から始まるものは使用できません。
これはCompact IRIsとつながると「://」となるため、「https://」などの表記と混同してしまうことを回避しようという狙いがあるのではと思われます。
不適切なPrefix / Suffixを使用した場合
未定義のPrefixを使用したりSuffixに「//」から始まる語句を入れた場合、Compact IRIsではなく「絶対IRI」として解釈されてしまいます。
[js]
{
"@context":
{
"foaf": "https://xmlns.com/foaf/0.1/"
},
"@id": "https://me.markus-lanthaler.com/",
"@type": "foaf:Person",
"schema:name":"Dave Longley",
"foaf://name": "Dave Longley"
}
[/js]
Prefixに「schema:name」を指定しているが「schema」が未定義
→「https://schema.org/name」ではなく「schema:name」というIRIになる。
「foaf」は定義されているが、「//」からsuffixが始まっている
→「https://schema.org/name」ではなく「foaf://name」というIRIになる。
@context内でも使用可能
このCompact IRIsは「@context」内の定義にも利用可能です。
[js]
{
"@context":
{
"xsd": "https://www.w3.org/2001/XMLSchema#",
"foaf": "https://xmlns.com/foaf/0.1/",
"picture": { "@id": "foaf:depiction", "@type": "@id" }
},
"@id": "https://me.markus-lanthaler.com/",
"@type": "foaf:Person",
"picture": "https://twitter.com/account/profile_image/markuslanthaler"
}
[/js]
この場合、「https://twitter.com/account/profile_image/markuslanthaler」は「”https://me.markus-lanthaler.com/”」の「”https://xmlns.com/foaf/0.1/depiction”」というRDF構造になります。
まとめ:CompactIRIsいいよCompactIRIs
JSON-LDに興味のない人からするとなんのこっちゃらな話ですが、とにかく@contextの設定が簡単なんで便利なんです。
日本語ドキュメントがあんまり見当たらないんで、こんな感じでちょいちょいJSON-LDのドキュメントについてまとめてみます。