XML的思索: N-Triplesの紹介

RDFのよりシンプルなシリアライゼーション

RDF/XMLは、RDFモデルの単なる表現にとどまるものではありません。W3Cにより、特に試験用スイート(テスト用データセット)に適しているRDF表現のフォーマットであるN-Triplesが開発されました。私、Uche Ogbujiが、RDF/XMLから変換した例を使用するN-Triplesを紹介しましょう。

Uche Ogbuji, Principal Consultant, Fourthought, Inc.

Photo of Uche OgbujiUche Ogbuji は、次世代の Web 技術を専門とするサービスの会社である、Uli, LLC の代表者です。Ogbuji 氏は XML、RDF、およびナレッジ管理アプリケーション用のオープン・ソース・プラットフォームである 4Suite の開発リーダーであり、Versa RDF 照会言語の開発リーダーでもあります。ナイジェリア出身のコンピューター・エンジニア兼ライターで、米国コロラド州ボールダー在住です。彼に関して詳しくは、彼のブログである Copia を見てください。



2003年 4月 08日

以前の記事で、私は「構文は忘れてください」という見出しを使いました。RDFの従来のXML構文についての悪口はよく言われるところですが、幸いこれが、RDFがどう機能するかを表すものではありません。代わりのシリアリゼーションの出現は常に避けがたいものでした。シリアライゼーション構文としてのXMLでの問題の1つは、柔軟性がありすぎるために、自動化テストのプロセスで、望ましい結果と実際の結果とを比較することがむずかしくなる可能性があるという点です。回帰テスト(regression test, プログラムなどの変更によって過去の処理結果が変わらないことを確認すること)や規格合致試験のどちらの場合にも、XMLをなんらかの形態に正規化してみることが有益なことがよくあります。そうすれば、単純なテキスト比較から有意義な結果が得られます。XMLのコミュニティーはこのような目的のためにXML正規形式を開発しました。また、W3CのRDF作業グループは、RDF規格合致試験スイートを開発しながら、同種の形式のRDFを求めてきました。

1つのオプションは、グラフに合致する正規形式のRDF/XMLを定義し、その結果得られたXMLを、関連するW3C勧告に従って正規化することです。しかし、私は、RDF作業グループが、RDFグラフのシンプルでなおかつ厳密に定義したテキスト・フォーマットを開発する際の正しいコースを選択したものと考えています。このフォーマットの名前はN-Triples であり、RDF Test Cases作業草案に組み込まれています (参考文献を参照)。この記事では、RDF/XMLから変換した例を使用した、N-Triplesを紹介します。読者は、XMLおよびRDFに精通している必要があります。

3はラッキー・ナンバー

まず、N-Triplesの単純な例から始めましょう。リスト1は、PRISMについての私の以前の記事から取ったRDF/XMLです。

リスト1. 以前にRDF/XMLで記述した「XML的思索」コラム12 (基本PRISMボキャブラリー)
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="en"
>
 <rdf:Description
rdf:about="http://www.ibm.com/developerworks/xml/library/x-think12.html">
  <dc:description>
A discussion of the broader context and relevance of XML/RDF techniques.
  </dc:description>
  <dc:title>
Basic XML and RDF techniques for knowledge management, Part 7
  </dc:title>
  <dc:publisher>IBM developerWorks</dc:publisher>
  <dc:creator>Uche Ogbuji</dc:creator>
  <dc:subject>XML</dc:subject>
  <dc:subject>RDF</dc:subject>
  <dc:format>text/html</dc:format>
 </rdf:Description>
</rdf:RDF>

リスト2は、リスト1と同等のN-Triplesを示しています。

N-Triplesは、「詳細だが明示的」といえます。見てのとおり、省略形がありません。名前空間すら省略されていません。URIはすべて、完全なつづりになっています。これは、テスト用などとしては理想的です。対応するRDFモデルが表すものとの混同が生じないからです。

N-Triplesは、行本位のフォーマットになっています。各トリプルはそれぞれ別の行に書く必要があります。トリプルは、サブジェクト指定子、述部指定子、オブジェクト指定子、その後のピリオドという構成です。1つ以上のスペースかタブによって、サブジェクトを述部と区切り、また述部をオブジェクトと区切ります。リソースは2つの形式いずれかで指定します。URIがある場合は、リスト1 に示すような形式で表す必要があります。絶対URI参照は、不等号括弧で囲みます。<local/file.ext> のような相対URI参照は使用できません。

RDFにおいては当然のことながら、すべてのサブジェクトと述部がURIですが、オブジェクトはURIでもリテラルでもかまいません。すべてのリテラルが引用符で囲んだストリングとして表されますが、N-Triplesでは言語指定子およびデータ・タイピングはサポートされていません。この点については後で、文字通りの詳細で解説しましょう。


未知の分野

前述の通り、N-Triplesでリソースを表す形式は2つあります。URIがあるリソースの形式については、すでに解説しました。N-Triplesには、無名ノード (ブランク・ノードと呼ばれることもあります) を表すための規約もあります。リスト3は、ブランク・ノードがいくつかある、単純なRDF/XMLの例です。

リスト3. ブランク・ノードがある単純なRDF/XMLの例
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/">
  <rdf:Description>
    <dc:title>Unwritten work</dc:title>
    <dc:creator rdf:parseType="Resource">
      <dc:title>The League of Procrastinators</dc:title>
    </dc:creator>
    <dc:contributor rdf:resource="http://put-off.org"/>
  </rdf:Description>
</rdf:RDF>

図1 は、グラフ形式でリスト3 を表示したものです。

図1. リスト3のモデル図
リスト3のモデル図

これを見て分かるように、卵形のうち2つにはラベルがありません。これらがブランク・ノードです。ブランク・ノードに身元がありますが、その身元はURIによって与えられません。ブランク・ノードは、リソースに関連付けるのに適したURIが実際に存在しないときによく使用されます。まだ書いていない作業について記述している、リスト3 および図1 の例に示すような場合です。

リスト4は、リスト3 と同等のN-Triplesであり、これも、図1 のグラフに対応しています。

リスト4. リスト3と同等のN-Triples
_:blank1  <http://purl.org/dc/elements/1.1/title> "Unwritten work" .
_:blank2  <http://purl.org/dc/elements/1.1/title> "The League of Procrastinators" .
_:blank1  <http://purl.org/dc/elements/1.1/creator>       _:blank2 .
_:blank1  <http://purl.org/dc/elements/1.1/contributor>   <http://put-off.org> .

ブランク・ノードの形式は、_:name です。ただし、name は、指定したセットのN-Triples内でのそのブランク・ノードの識別子です。_:name 識別子は、RDFモデルに対応する識別子がない場合でも、ノードの身元を保持します。RDF/XMLでは最近、rdf:nodeIDrdf:Description またはタイプ付きノードの開始タグで使用するための同様の機能を追加しました。リスト5は、リスト3 と同等ですが、同じローカル・ノードIDがリスト4 の場合と同様に使用されています。

リスト5ブランク・ノードがある単純なRDF/XMLの例
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/">
  <rdf:Description rdf:nodeID="blank1">
    <dc:title>Unwritten work</dc:title>
    <dc:creator rdf:parseType="Resource" rdf:nodeID="blank2">
      <dc:title>The League of Procrastinators</dc:title>
    </dc:creator>
    <dc:contributor rdf:resource="http://put-off.org"/>
  </rdf:Description>
</rdf:RDF>

ここでも、ブランク・ノード用のこれらのローカルIDは単に、特定のRDF/XMLまたはN-Triplesファイル内での規約にすぎないことを明記することが非常に大切です。リスト4 とリスト5 の両方でノードID "blank1" が使用されているからといって、対応するブランク・ノードが同じ身元を持つことを意味するわけではありません。これは少し不明瞭に思われるかもしれませんが、ブランク・ノードの基本的特性です。


文字通りの詳細

RDFでは常に、プロパティーの値を表すために使用する言語を指定することをユーザーに許可しています。リスト6は、英語およびスペイン語で指定されるプロパティーを持つ、無名リソースのRDF/XMLでの例を示しています。

リスト6. 言語メタプロパティーを記述するRDF
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:dc="http://purl.org/dc/elements/1.1/">
  <rdf:Description>
    <dc:title xml:lang="es">A lo cubano</dc:title>
    <dc:title xml:lang="en">Cuban style</dc:title>
    <dc:creator>Orishas</dc:creator>
  </rdf:Description>
</rdf:RDF>

dc:title プロパティーは2つの言語で指定されます。言語指定子は、ステートメント全体のプロパティーではありません (これが、国際化対応にしても、RDFシステムが、3つ組みから4つ組みになることのない理由です)。言語は、リテラルそのものの基本的プロパティーです。N-Triplesは、リスト7で分かるように、言語の表記でこれを示しています。このリストは、リスト6 をN-Triplesに変換したものです。

リスト7. リスト6と同等のN-Triples
_:blank1        <http://purl.org/dc/elements/1.1/title> "A lo cubano"@es .
_:blank1        <http://purl.org/dc/elements/1.1/title> "Cuban style"@en .
_:blank1        <http://purl.org/dc/elements/1.1/creator>       "Orishas" .

リテラル値の表現には、@ が添えられます。その後に、RFC 3066で定義した言語コードを指定します。これが言語の基本指定です ("en" は "English" を、"es" は "Spanish" を表す、などです)。また、言語の変種を指定することもできます。例えば、米国英語を "en-US"、英国英語を "en-GB"、メキシコ・スペイン語を "es-MX" と指定します。

別のプロパティー・リテラルも指定できます。これは一番最近RDFに導入されたものであり、データ・タイプです。RDFリテラルには、「整数」、「ストリング」、「日付」、さらには「モールス符号」などのデータ・タイプを与えることができます。データ・タイプは、URIとして指定します。また、W3C XML Schema (WXS) 名前空間を基にしたURLを使用して、WXS言語の共通データ・タイプを使用できます。これは通常、プレフィックスxsd にマップされます。リスト8のN-Triplesの1つには、データ・タイプ指定が含まれています。

リスト8.オブジェクトにデータ・タイプ指定が組み込まれているトリプル
#This is a comment in N-Triples
#It must appear by itself on a separate line
#The object of the following triple is of type xsd:int
http://example.com/employees/jdoe    http://example.com/employee-id
     "23"^^http://www.w3.org/2001/XMLSchema#int

^^ マーカーの後にデータ・タイプを指定するURIがあり、これは、(この場合のように) ある標準を指していることも、ローカル規約である可能性もあります。覚えておくべき重要な点は、ここでのオブジェクトが引用符で表されていても、データ・タイプ認識システムが実際に解釈するのは、WXS整数としてだということです。リスト7 は、N-Triplesでどのようにコメントを組み込むことができるかも示しています。これまで私は、終りのピリオドの後に、トリプルと同じ行にコメントを付けているN-Triplesの例を数多く目にしたことがありますが、現行のN-Triples文法ではこの使用法はサポートされていません。


3部の情報

N-Triplesの構造については以上のとおりです。私はまだ微妙ないくつかの点に言及しませんでした。例えば、構文で使用できるのはひじょうに厳密な文字セットだけであるため、これらの範囲外で文字をエスケープするときは注意が必要です。一部の文字 (URI参照の中での) は、URI規約を使用してエスケープする必要があります。他の文字では、前にバックスラッシュを付けたN-Triples規約を使用します。N-Triplesの読み取りや書き込みのためのコードを作成する場合は、これらの詳細についての仕様を必ず参照するようにしてください。

RDFのための単純な、トリプルを基にした表現を目指す幾多の努力の1つとして、N3 (参考文献を参照) があります。これはかなり人気があるもので、N-Triplesの考えの元になったものといえます。しかし、N-Triplesには正式な仕様に書き込まれるという利点があり、また標準RDFテスト・ケースで使用することを理由として、おそらくすべてのRDF処理プログラムで実装されるでしょう。

参考文献

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML
ArticleID=241770
ArticleTitle=XML的思索: N-Triplesの紹介
publish-date=04082003