ちょっとしたメモ

RDF/OWLとXMLスキーマデータ型

RDF(およびOWL)では、リテラルはデータ型を持つことができる。"109"は、100+9で表される数値なのか、「いち、まる、きゅう」という文字列なのかを、"109"^^xsd:integerとか"109"^^xsd:stringといった型情報を加えて明示するわけだ。この型付リテラルに関して、仕様では明確にされていなかった部分を整理するXML Schema Datatypes in RDF and OWL(以下XSD/RDFと略記)の編集者草案が出ている。

XSD/RDFで取り上げられているのは、(1)ユーザ定義データ型のURIはどうなるか;(2)異なるデータ型を持つ同じリテラル文字列の異同;(3)期間を表すデータ型について;の3つ。まだ公開草案にもなっていない段階ではあるが、要点を整理しておこう。

1. ユーザ定義データ型のURI

XMLスキーマでは、組み込みデータ型に制約を加えて、新たな派生データ型を定義できる。例としてあげられているのは、整数型(xsd:integer)の値を18以上に制約することで、18歳以上の大人(の年齢)というデータ型を定義するもの。

(例)

<xsd:schema ...>
 <xsd:simpleType name="adultAge">
  <xsd:restriction base="integer">
   <xsd:minInclusive value="18">
  </xsd:restriction>
 </xsd:simpleType>
 ...
</xsd:schema>

このデータ型定義スキーマが http://example.org/simpleTypes にあって、URI http://example.org/simpleTypes#egdt:にマップしているとする。ここで、"24"^^egdt:adultAgeという具合に派生データ型を用いたいわけだが、XMLスキーマはこの定義をname属性で名前付けしており、厳密にはURI参照としての使い方ができない。

XSD/RDFでは、(1) DAML+OILでやっているように、"24"^^egdt:adultAgeを使ってしまう;(2)XSCDに従って、http://example.org/simpleTypes#xscd(/type(adultAge))というXPathを用いたURIを使う;(3)XMLスキーマの定義にid属性も加える(XHTMLのa要素のように);という3つの方法を示して、メリット、デメリットを議論している。

2. 異なるデータ型でのリテラル比較

たとえば、(1)"15"^^xsd:byte"15"^^xsd:decimalや、(2)"40"^^xsd:double"40"^^xsd:floatは同じと見なすのかどうかという問題。XMLスキーマの定義では、同じプリミティブ型から派生したデータ型は同じ値空間に制約を加えただけなので、(1)は同じであると言えるが、(2)のような場合は難しい。XSD/RDFでは、XPath 2.0のeq演算子を使う方法をや、丸め誤差の問題などを検討している。

ちなみに、RDF Semanticsで示されているように、プレーンリテラル"sample text"と型付きリテラル"sample text"^^xsd:stringは同等として扱われる。

3. 期間を表すデータ型

RDF Semantics仕様では、xsd:duration does not have a well-defined value space と述べ、期間を表すXMLデータ型xsd:durationは型付きリテラルでは使わないことと定めている。これに代わるデータ型として、XSD/RDFでは、XQuery 1.0 and XPath 2.0 Functions and Operatorsが提案している派生データ型xdt:yearMonthDurationxdt:dayTimeDurationが使えそうだとしている。

データ型の扱いは、RDF処理アプリケーションの実装においては重要だ。XSD/RDFは、W3CのSemantic Web Best Practices and Deployment Working Groupが議論のために作成したもので、コンセンサスが得られれば"Best Practice"として公開される。

(なお、型付きリテラルについては当サイトではまだほとんど扱っていないので、必要に応じてRDF Primerの2.4 Typed Literalsや、拙著を参照してください。)