投稿

ラベル(JSON-LD)が付いた投稿を表示しています

Schema.org の語彙で RDFS 推論してみる(3):OWL-RL で推論

イメージ
本記事では、OWL-RL、SPARQL/RDFLib、Schema.org 語彙定義を利用して検索や推論を行います。 【目次】 [1]はじめに [2]語彙定義の一部で試してみる (1)Schema.org 語彙定義の一部を抜き出す (2)語彙定義を追加して可視化してみる (3)SPARQL で検索してみる [3]OWL-RL で推論 (1)ここで扱う推論とは:RDF(S) entailment (2)OWL-RL をインストール (3)推論を実行して可視化してみる (4)SPARQL で検索してみる [4]Schema.org 語彙定義を利用した推論や検索 [1]はじめに 本記事は、記事『 Schema.org の語彙で RDFS 推論してみる(2):機械可読な語彙定義ファイル 』の続き(第3回)です。 前回の記事では、Schema.org が提供する RDFS ベースの語彙定義を概観して、Python ライブラリ RDFLib に読み込む方法を見ました。 本記事では、Schema.org の語彙定義を利用した検索や推論を簡単に見ていきます。 なお、本記事では Google Colaboratory + RDFLib で動作を見てきましたので、RDFS 推論には、同じ環境で利用できる OWL-RL を利用します。 第1回 準備 第2回 機械可読な語彙定義ファイル 第3回 OWL-RL で推論 [2]語彙定義の一部で試してみる (1)Schema.org 語彙定義の一部を抜き出す 前回の記事で Schema.org の概念階層を中心に概観し、RDFS ベースの機械可読な定義ファイルもダウンロードできることを見ました。 以降では、これを用いた推論などを見ていきますが、Schema.org の語彙定義には多くの内容が含まれていますので、推論などによって情報がどのように変化するかを具体的に確認したいときは大変です。 そこで動きを確認しやすいように、Schema.org の語彙定義から抜粋した小さな語彙定義を作って見ていく事にします。 ここでは、第1回の記事で取得したデータに現れる概念(タイプ、クラス)について、階層関係(サブクラス関係)に絞って見てみます。 具体的には、以下の概念が出現していました。 Article Orga...

Schema.org の語彙で RDFS 推論してみる(2):機械可読な語彙定義ファイル

イメージ
本記事では Schema.org が提供する RDFS ベースの語彙定義を概観します。 【目次】 [1]はじめに [2]Schema.org の RDFS 語彙定義を概観してみる [3]機械可読な語彙定義ファイルのダウンロード [4]「http」と「https」の混在 (1)JSON-LD のコンテキストを表すURL (2)語彙の IRI (3)雑感 [5]RDFS定義ファイルをRDFLibに読み込んでみる [6]参考:JSON-LDをhttps語彙でRDFLibに読み込む例 [1]はじめに 本記事は、記事『 Schema.org の語彙で RDFS 推論してみる(1):準備 』の続き(第2回)です。 前回の記事で、Schema.org の語彙を使って記述されている Web コンテンツに埋め込まれた JSON-LD を、RDF を扱える Python ライブラリ RDFLib に読み込んで、RDFの可視化や情報抽出の例を見ました。 ところで、Schema.org は RDFS ベースの語彙定義ファイルを提供しており、これを利用すると、さらに進んだ情報利用が可能になります。 そこで本記事では、Schema.org が提供する語彙定義を概観しておきます。 第1回 準備 第2回 機械可読な語彙定義ファイル 第3回 OWL-RL で推論 [2]Schema.org の RDFS 語彙定義を概観してみる Schema.org では、多くの語彙を定義しています。ここでいう語彙とは主に、概念(タイプ、クラス)とそれらの関係です。 (注意)本記事で用いている語彙や概念、タイプ、クラス、関係、プロパティなどの用語は、RDFやOWLの定義に従って厳密に使い分けているわけではありません。 まずはブラウザを利用して、Schema.org がどのような語彙を定義しているのか概観してみます。 Organization of Schemas https://schema.org/docs/schemas.html これによると、現在 797タイプ、1453 プロパティが定義されている云々とありますので、非常に多くの語彙が定義されていることが分かります。 これらを全て見ていくのは大変ですが、これらは無秩序に定義されているわけではなく、体系立...

Schema.org の語彙で RDFS 推論してみる(1):準備

イメージ
本記事ではWebから得られる現実の簡単なデータを例に、ツールを使って SemanticWeb 技術(特に情報統合や推論)を概観します。 【目次】 [1]はじめに [2]Webから取得したJSON-LDをRDFLibで利用する (1)RDFLibへ読み込むコードの準備 (2)実行して結果を可視化してみる (3)SPARQLを使った検索例 [3]ここまでのまとめ:推論に向けて [1]はじめに 以前の記事で、Webページに埋め込まれたJSON-LDファイルをRDFLibに読み込むところまで見ました。 しかし JSON-LD は、「そもそも扱いやすいJSON形式なのだから、JSONとして扱えば十分じゃない?」といわれれば、(特定の構造を扱うだけなら、)それはその通りです。 一方で、多くのWebサイトから情報を収集して、様々な再利用を考えるなら(多様なデータを扱うなら)、その考え方はかなり面倒なことも背負うことになります。 具体的には、Schema.org の語彙を使ってマークアップされた JSON-LD を扱うとしても、本記事の執筆時点で、Schema.org のサイトによると797のクラス、1453のプロパティが定義されているようです。 Wikipediaやブログの記事だけではなく、レストランや観光地の情報、イベントや求人その他、多様な情報が Web にはあふれています。 そして時代に応じて Schema.org の語彙は増えていきますし、それに伴って多様性も増していきます。 しかも、Web コンテンツに含まれる JSON-LD に記載される内容は、Web コンテンツ制作側が決めるものなので、開発側がコントロールできるものではありません。 こうなってくると、与えられた情報構造を直接解釈する方式で対応するのは厳しいと思います。(厳密なスキーマに基づく手法は厳しくなってくると思います。) これに対して、与えられた情報構造をそのまま扱うのではなく、もう少しメタレベルの構造を基礎として多様な情報に対応していくアプローチが考えられます。 そのような技術に SemanticWeb があります。 Wikipedia: セマンティック・ウェブ SemanticWeb 技術も『銀の弾』ではないと思いますが、シナリオによっては非常に有効な技...

Schema.org + JSON-LD を RDFLib で読み込んでみる

本記事では、Schema.org の語彙を使って記述された JSON-LD を、RDF を扱える Python ライブラリ RDFLib に読み込む方法を見てみます。 【目次】 [1]はじめに [2]RDFLib と JSON-LD の読み込み例 [3]Web ページ内の JSON-LD を読み込んでみる [4]Schema.org のコンテキスト (1)"@context": "https://schema.org" の解釈 (2)コンテキスト情報のありかを探る (3)コンテキストの内容をダウンロードしてみる [5]RDFLib 6.1.1 における、とりあえず回避策? (1)@context を置き換える (2)@context を削除+パーサにコンテキストを渡す [1]はじめに 記事『 Web ページ内の JSON-LD を Python + PyLD で覗いてみる(Schema.org) 』で、Web ページに組み込まれた JSON-LD を見ました。 また、JSON-LD は RDF( Resource Description Framework )のシリアライズ形式の一つであり、RDF としても解釈できる旨を書きました。 RDF として扱うと、セマンティックウェブ系の技術を使っていろいろな応用が期待できそうです。 例えば、収集した情報をマージしてナレッジグラフを構成したり、SPARQL のようなクエリ言語を利用して情報を抽出したり、新たな知識の発見につなげたり、などなど。 そこで、本記事では、Schema.org の語彙を使って記述された JSON-LD を、RDF を扱える Python ライブラリ RDFLib に読み込む方法を見てみます。 今回もセマンティックウェブ技術とか RDF には深入りせず、利用方法に絞ってます。 なお、本記事のコードは Google Colaboratory で動作を確認しています。 [2]RDFLib と JSON-LD の読み込み例 RDFLib は、RDF を操作するためのオープンソース Python パッケージです。 rdflib https://rdflib.readthedocs.io/en/stable/# RDFLib (Gi...

Web ページ内の JSON-LD を Python + PyLD で覗いてみる(Schema.org)

Web ページに組み込まれた JSON-LD を見てざっくりと JSON-LD の雰囲気をつかんで、HTMLから JSON-LD を取り出す方法を見てみます。 【目次】 [1]はじめに [2]Web ページに組み込まれた JSON-LD の例 (1)Wikipedia の例 (2)ブログ(Bloggerの場合) の例 [3]クローラ向け構造化データとしての JSON-LD [4]Linked Data とシリアライズフォーマット [5]Schema.org による語彙の定義 [6]JSON-LDをHTMLに組み込む方法 [7]PyLD を使って HTMLから JSON-LD を抽出する [1]はじめに アプリ開発に携わる方々にとって「JSON」は常識的なものだと思いますが、「JSON-LD」 は知らない、という人もいらっしゃるのではないかと思います。 逆に JSON-LD は、Web コンテンツ制作や SEO(検索エンジン最適化) 関係の方々にとって必須知識かもしれません。(JSON-LD より Schema.org のほうが身近な言葉かも。) 一方、SemanticWeb や LOD に関わる人なら「RDFのシリアライズ形式の一つ」の一言で終了かもしれません。 JSON-LD が最も利用されている例は、Google クローラなどに Web コンテンツの内容を伝えたり、リッチな検索結果を表示させるためのメタデータとして Web コンテンツ内に組み込むものだと思います。 しかし、JSON-LD はクローラ向けに特化した仕様ではありません。 実際、記事『 Googleナレッジグラフの検索APIを使ってみる(Google Knowledge Graph Search API) 』で取り上げた API の戻りデータも JSON-LD でした。 そこで、本ブログではアプリ開発者視点から JSON-LD を見ていきたいと思います。 まず今回は JSON-LDの仕様には深入りせず、実例として Web ページに組み込まれた JSON-LD を見て雰囲気をつかみ、その後HTMLから JSON-LD を取り出す方法を見ておきます。 [2]Web ページに組み込まれた JSON-LD の例 まずは細かいところはおいといて、実例をざっと見てみます。...