とほほのセマンティック・ウェブ入門
目次
セマンティック・ウェブとは
- 1998年に W3C のティム・バーナーズ=リー氏が提供しました。
- Webサイト上の情報などに意味(semantics)を持たせることで、コンピュータが、より豊富で正確な情報を分析・整理・再利用・提供できるようになることを目指した思想・構想・技術・プロジェクトを表します。
- Web等で公開されるデータに対して メタデータ を付加することにより実現されます。構造化データ とも呼ばれます。
- メタデータとは「データに付加するデータ」といった意味で、例えば、<div>山田太郎</div> というデータに対して、<div property="creator">山田太郎</div> というデータを付加することで、山田太郎が単なる文字列ではなく、作成者であることを明示します。
- creator などの 意味・語彙・スキーマ を定義するものと、定義されたものをどの様に表現するかの 記法・文法・言語 に大別されます。
- 意味・語彙・スキーマとしては、Schema.org, ダブリン・コア などが利用されます。
- 記法・文法・言語としては、RDFa, microdata, JSON-LD などが利用されます。
- 現時点では Google が推奨していることもあり、Schema.org と JSON-LD の組み合わせがよく利用されているようです。
意味・語彙・スキーマ
Schema.org
Schema.orgの定義の例
Person (type):
- name (Text)
- address (Text or PostalAddress)
- gender (Text or GenderType)
- birthDate (Date)
ダブリン・コア (Dublin Core)
- RDF でよく用いられる語彙を定義しています。
- メタデータに関する第1回会合が開かれた地名によりダブリンコアと呼ばれ、DC や DCMI とも略されます。
- サイトの更新情報を配信する RSS でも使用されています。
- 下記など 50~60個ほどの基本的な語彙(vocabulary)を定義しています。
- それぞれの語彙は、http://purl.org/dc/terms/title といった URI で表されます。
Dublin Core の定義例
tltle: タイトル
subject: サブジェクト
creator: 作成者
publisher: 発行者
:
FOAF (Friend of a Friend)
- 語彙の中でも特に「人の関係」に関するものを定義し、人のつながりをデータとして表すことを主眼として定義されています。
- Person, Organization, Project など 13個のクラス(class)と、name, phone, img など約60個の属性(property)を定義しています。
- ダブリン・コア と併用されることもよくあります。
FOAF の定義例
<foaf:Person>
<foaf:name>山田太郎</foaf:name>
<foaf:img rdf:resource="/images/yamada.jpg" />
<foaf:homepage rdf:resource="http://yamada.example.com/" />
</foaf:Person>
記法・文法・言語
RDF (Resource Description Framework)
- RSS や DBpedia などで使用されています。
- 主語(subject), 述語(predicate), 目的語(object) の3要素をトリプルと呼び、すべてのデータをこの関係で記述します。
- 例えば [山田太郎は(主語)]-[名乗ります(述語)]-[山田太郎と(目的語)] など。
- 例えば [山田太郎は(主語)]-[住んでいます(述語)]-[東京都港区に(目的語)] など。
- 例えば [サザンオールスターズは(主語)]-[バンドメンバを含んでいます(述語)]-[桑田佳祐を(目的語)] など。
- 主語、述語、目的語はすべて URI で表します。
- RDF 自体はフレームワークで、このフレームワークに従った具体的な表現形式として、N-Triples, Turtle, TriG, N-Quads, RDFa, RDF/XML, JSON-LD があります。
- 詳細は下記を参照してください。
N-Triples
- 1行に主語、述語、目的語を記述します。
- 行はピリオド(.)で終わります。
N-Triples
<http://ja.dbpedia.org/resource/東京タワー> <http://ja.dbpedia.org/property/住所> "芝公園4-2-8" .
Turtle
- N-Triples を拡張したものです。
- @prefix でプレフィックスを定義し、URI を短縮して記述することができます。
- 主語の次に述語と目的語のセットをセミコロン(;)でつなげて複数記述することができます。
N-Triples
@prefix dbpedia-ja: <http://ja.dbpedia.org/resource/> .
@prefix prop-ja: <http://ja.dbpedia.org/property/> .
dbpedia-ja:東京タワー
prop-ja:住所 "芝公園4-2-8" ;
prop-ja:階数 "地上16階、地下2階" .
TriG
未稿。
N-Quads
未稿。
RDF/XML
RDF/XML
<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:prop-ja="http://ja.dbpedia.org/property/">
<rdf:Description rdf:about="http://ja.dbpedia.org/resource/東京タワー">
<prop-ja:住所 xml:lang="ja">芝公園4-2-8</prop-ja:住所>
<prop-ja:階数 xml:lang="ja">地上16階、地下2階</prop-ja:階数>
</rdf:Description>
</rdf:RDF>
RDFa (RDF in Attribute)
- RDF を XHTML や HTML5 に埋め込む規格です。
- 下記の5つの規格から構成されます。
RDFaの例
<html>
<head>
...
</head>
<body>
...
<h2 property="http://purl.org/dc/terms/title">The Trouble with Bob</h2>
<p>Date: <span property="http://purl.org/dc/terms/created">2011-09-10</span></p>
...
</body>
RDFa Lite
- RDFa のサブセットです。
- HTML や XHTML に対して vocab, typeof, property, resource, prefix の五個の属性でメタデータを定義します。
- vocab は参照するスキーマを指定します。
- typeof は参照するオブジェクトの種別(タイプ・クラス)を指定します。
- property は属性名(プロパティ)指定します。
- resource はリソース(オブジェクト)のIDを指定します。
RDFa Liteの例
<div vocab="http://schema.org/" typeof="Person" resource="#Yamada">
<div property="name">山田太郎</div>
<div property="telephone">03-XXXX-XXXX</div>
<a href="mailto:yamada@example.com" property="email">yamada@example.com</a>
</div>
- prefix には属性名のプレフィックスを指定します。
RDFa Liteの例
<div vocab="http://schema.org/" prefix="ov: http://open.vocab.org/terms/">
<div property="name">山田太郎</div>
<div property="ov:preferredAnimal">Dog</div>
</div>
JSON-LD
- RDF を JSON 形式で表現するものです。
- HTML に埋め込む際は <script type="application/ld+json">...</script> を用います。
- Google も推奨している形式であり、今後しばらくは最も利用されるであろうフォーマットです。
- @context はオブジェクトのスキーマを指定します。
- @type はオブジェクトの種別(タイプ・クラス)を指定します。
JSON-LD の例
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Person",
"name": "山田太郎",
"email": "mailto:yamada@example.com",
"telephone": "03-XXXX-XXXX"
}
</script>
下記は、Google の検索結果で、記事をリッチリザルトとして上部に写真付きで表示してもらうための例です。
JSON-LD の例
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "NewsArticle",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://news.example.com/20200412/article-123456/"
},
"headline": "記事のタイトル・・・",
"image": "https://news.exapmpe.com/20200412/img-123456.jpg",
"datePublished": "2020-04-12T18:02:08+09:00",
"dateModified": "2020-04-12T22:41:53+09:00",
"author": {
"@type": "Organization",
"name": "山田太郎"
},
"publisher": {
"@type": "Organization",
"name": "Exampleニュース",
"logo": {
"@type": "ImageObject",
"url": "https://news.example.com/img/logo.png",
"width": 412,
"height": 68
}
},
"description": "記事の説明・・・・・"
}
</script>
Microdata
- HTML に対して itemscope, itemtype, itemprop プロパティを用いてメタデータを定義します。
- itemscope は、アイテム(=オブジェクト)要素を指定します。
- itemtype は、アイテムの種別(タイプ・クラス)を指定します。
- itemprop は、アイテムの属性(プロパティ)を指定します。
RDFa Liteの例
<div itemscope itemtype="http://schema.org/Person">
<div itemprop="name">山田太郎</div>
<div itemprop="telephone">03-xxxx-xxxx</div>
<a itemporp="email" href="mailto:yamada@example.com">yamada@example.com</a>
</div>
- HTML に対して class rel rev プロパティを用いてメタデータを定義します。
- <link rel="profile" ...> は、スキーマを指定します。
- class でオブジェクトの種別(タイプ・クラス)や属性(プロパティ)を指定します。
Microformats の例
<link rel="profile" href="http://microformats.org/profile/hcard">
:
<div class="vcard">
<div class="fn">山田太郎</div>
<div class="tel">03-XXXX-XXXX</div>
<a href="mailto:yamada@example.com" class="email">yamada@example.com</a>
</div>
OWL (Web Ontology Language)
- Webオントロジー言語。
- オントロジー(ontology)は哲学用語では「存在論」を意味します。
- IT用語としては「世の中に存在する情報に意味づけを行う仕組みや概念」といったところでしょうか。
- 頭文字は WOL ですが、諸々の事情 (参考) により OWL と表記します。
- OWL と RDF を用いてデータとデータの関係を記述します。
- OWL Lite, OWL DL, OWL Full の三つの記法があります。
- OWL Lite < OWL DL < OWL Full の順番に複雑ですが、OWL Lite でさえも結構複雑みたいで、詳細説明は省きます。
リンクトデータ
Linked Data
- Web上でデータとデータの関係を表すことで、データを有効活用にできることを目的とする思想や技術の総称です。
- 通常の HTTP と HTML の組み合わせが「文書のWeb」であるのに対し、Linked Dataは「データのWeb」とも呼ばれます。
- 下記の4原則があると言われています。
- モノの名前として URI を使用する。
- 人がその名前を調べられるように HTTP URI でアクセスできるようにする。
- 人がその URI を参照した時は、有用な情報を RDF などの標準化された形式で提供する。
- さらに他のモノを探せるように、他のモノへのリンクを含む。
- 下記の SPARQL の例を見ると実感できると思います。
Linked Open Data (LOD)
- Linked Data の考えに基づき、様々なデータをオープンデータとして公開するプロジェクトやサービスです。
- 次に紹介する DBpedia や、文献情報を公開する I-Scover などがあります。
DBpedia
- Wikipedia の情報を RDF化して LOD として公開しているプロジェクトです。
- SPARQL を用いて様々な検索を行うことができます。
クエリ言語
SPARQL
- SPARQL Protocol And RDF Query Language の略です。Linux 系で好まれる再帰的頭字語になっています。
- DBpedia などの RDFデータに対して、SQL ライクな文法でクエリをかけることができます。
- 下記のページから SPARQL を発行していろいろなデータを検索することができます。
例えば下記は、DBpedia のデータから、大林宣彦監督の主な作品(notableWork)を検索して変数 ?work に設定し、それを表示しています。
SPARQL
SELECT ?work WHERE {
<http://ja.dbpedia.org/resource/大林宣彦> <http://dbpedia.org/ontology/notableWork> ?work.
}
下記の様に、PREFIX を定義して用いることもできます。
SPARQL
PREFIX dbpr:<http://ja.dbpedia.org/resource/>
PREFIX owl:<http://dbpedia.org/ontology/>
SELECT ?work WHERE {
dbpr:大林宣彦 owl:notableWork ?work.
}
下記では主な作品を検索し、さらにその作品の主要出演者(starring)も検索して表示しています。
SPARQL
SELECT ?work, ?starring WHERE {
dbpr:大林宣彦 owl:notableWork ?work.
?work owl:starring ?starring.
}
下記は逆に、監督(director)が大林宣彦である作品(?work)を検索しています。
SPARQL
SELECT ?work WHERE {
?work owl:director dbpr:大林宣彦 .
}
Copyright (C) 2020 杜甫々
初版:2020年4月12日 最終更新:2020年4月12日
http://www.tohoho-web.com/ex/semantic-web.html