1. ikeyasu

    Posted

    ikeyasu
Changes in title
+JSON-LD
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,104 @@
+本当は、"JSON-LDとXML"というタイトルにしようと思ったが、XMLは語るにはあまりに広い世界で恐ろしいし、詳しい先生方が多い領域なので、JSON-LD だけを書くことにした、そんなエントリーです。
+(もっとも、Linked Data 初心者であることは確かですので、誤りが有れば、ご指摘下さい)
+
+みんな大好き[JSON](http://www.json.org/) ですが、JSONでは、複雑なデータを記述できません。端的に言うと、XMLのように、[XML Namespace](http://www.w3.org/TR/REC-xml-names/)を使って、スキーマを使った意味づけができません。これでは、意味づけが曖昧になって、利用に制限が生じるので、何とかしよう、というのが JSON-LD です。
+
+http://json-ld.org
+
+W3C の仕様
+http://www.w3.org/TR/json-ld/
+
+[W3C の仕様のサンプル](http://www.w3.org/TR/json-ld/#basic-concepts)がすばらしいので、こちらをベースに紹介します
+(以下のサンプルは、[W3Cのサイト](http://www.w3.org/TR/json-ld/#basic-concepts)からの転載です。)
+
+# 初めに、神はJSONを創造された。
+
+```json
+{
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "image": "http://manu.sporny.org/images/manu.png"
+}
+```
+
+普通ですね。でも、それぞれの項目の意味は、感覚的です。人間には分かりますが、機械は、その意味を、曖昧さを排除して理解することはできません。 (つまり、Machine readable ではありません。)
+また、全ての項目が文字列になっていますが、URL なのか、文字列なのかは、明確に区別されるべきです。
+
+# 神は言われた。「Linked Data たれ。」こうして、JSON-LDがあった。
+
+```js
+{
+ "http://schema.org/name": "Manu Sporny",
+ "http://schema.org/url": { "@id": "http://manu.sporny.org/" }, // <=@id は、IRI(URL)だから必要
+ "http://schema.org/image": { "@id": "http://manu.sporny.org/images/manu.png" }
+}
+```
+
+この例では、全ての項目を schema.org を使って定義しました。
+`url`と`image`で、`@id`を使っているのは、この値が[IRI](http://www.w3.org/TR/json-ld/#dfn-iri)(Internationalized Resource Identifier。IRIは、URLを拡張したもので、リソースを一意に示す識別子。) であるためです。
+
+# Context
+そろそろ旧約聖書ネタは止めますが、上の例だと、機械には分かりやすいですが、人間には書きにくい/分かりにくいですよね。
+そこで、JSON-LD では、Context というものを定義できます。
+
+Context は、JSON-LD のデータ自身に埋め込むこともできますし、別に書くこともできます。
+
+別に描く場合、まず、以下のようなファイルを書きます。
+
+person.jsonld
+
+```js
+{
+ "@context":
+ {
+ "name": "http://schema.org/name", // <= 'name' は、'http://schema.org/name' の略として定義
+ "image": {
+ "@id": "http://schema.org/image", // 'image' は 'http://schema.org/image' の略として定義
+ "@type": "@id" //型はIRIであるとして定義
+ },
+ "homepage": {
+ "@id": "http://schema.org/url",
+ "@type": "@id"
+ }
+ }
+}
+```
+
+そして、これをどこかに置きます。例えば、 http://json-ld.org/contexts/person.jsonld
+
+そうすると、以下のように書けます。
+
+```json
+{
+ "@context": "http://json-ld.org/contexts/person.jsonld",
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "image": "http://manu.sporny.org/images/manu.png"
+}
+```
+
+同じく、以下のように、インラインにも書けます。
+
+```json
+{
+ "@context":
+ {
+ "name": "http://schema.org/name",
+ "image": {
+ "@id": "http://schema.org/image",
+ "@type": "@id"
+ },
+ "homepage": {
+ "@id": "http://schema.org/url",
+ "@type": "@id"
+ }
+ },
+ "name": "Manu Sporny",
+ "homepage": "http://manu.sporny.org/",
+ "image": "http://manu.sporny.org/images/manu.png"
+}
+```
+
+# まとめ?
+
+いかがでしょうか。JSON-LD の利用例は、まだほとんどありませんが、今後、国際標準化で活発に使われることが予想されます。そのため、しばらくすると、W3Cの仕様書などで、目にすることも増えると思われます。