【注意】 このドキュメントは、W3Cのrdf:PlainLiteral: A Datatype for RDF Plain Literals (Second Edition) W3C Recommendation 11 December 2012の和訳です。
このドキュメントの正式版はW3Cのサイト上にある英語版であり、このドキュメントには翻訳に起因する誤りがありえます。誤訳、誤植などのご指摘は、訳者までお願い致します。
First Update: 2014年7月18日
このドキュメントに対する正誤表を参照してください。いくつかの規範的な修正が含まれているかもしれません。
このドキュメントの旧バージョン以後の変更を示した色分けしたバージョンも利用できます。
このドキュメントは、規範以外の形式でも入手できます: PDFバージョン。
翻訳版も参照してください。
Copyright © 2012 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
この項は、このドキュメントの公開時のステータスについて記述しています。他のドキュメントがこのドキュメントに取って代わることがありえます。現行のW3Cの刊行物およびこの技術報告の最新の改訂版のリストは、http://www.w3.org/TR/のW3C技術報告インデックスにあります。
[email protected](公開アーカイブ)にコメントをお送りください。このドキュメントに対するOWLワーキンググループとルール記述交換形式(RIF)ワーキンググループの作業は完了していますが、コメントは正誤表や今後の改定で扱われることがあります。開発者間の公開討論は、[email protected](公開アーカイブ)で歓迎します。
このドキュメントは、W3Cメンバー、ソフトウェア開発者、他のW3Cグループ、および他の利害関係者によりレビューされ、W3C勧告として管理者の協賛を得ました。これは確定済みドキュメントであり、参考資料として用いたり、別のドキュメントで引用することができます。勧告の作成におけるW3Cの役割は、仕様に注意を引き付け、広範囲な開発を促進することです。これによってウェブの機能性および相互運用性が増強されます。
このドキュメントは、2004年2月5日のW3C特許方針の下で活動しているグループによって作成されました。このドキュメントには、参考情報のみが含まれています。W3Cは、このグループの成果物に関連するあらゆる特許の開示の公開リストを維持し、このページには特許の開示に関する指示も含まれています。
目次 |
RDF(Resource Description Framework)[RDF]は、XMLスキーマ・データ型[XSD]に基づく拡張可能な型付きリテラルの体系を有しており、プレーン・リテラルも有すると定義されています。RDFの仕様では、プレーン・リテラルは、プレーン・リテラルにはデータ型がなく、オプションで言語タグを持つことができ、内容の自然言語を示すという点で型付きリテラルと異なります。(言語識別用タグ[BCP 47]を参照)。RDFリテラルの表現に関するこれらのオプションにより、RIFやOWLなどのRDFと相互作用する仕様が複雑になります。さらに、RDFはすべてのプレーン・リテラルの集合に名前を提供せず、そのため、例えば、RDFSやOWLでは、あるプロパティーの範囲がプレーン・リテラルでなければならないと述べることができません。
これを受けて、この仕様では、rdf:PlainLiteralというデータ型を導入しました。このデータ型は、RDFの概念モデルの一部を参照するため、「rdf:」の名前空間にあります。しかし、この拡張はその概念モデルを変更しないため、それに依存するSPARQL[SPARQL]などの仕様に影響を与えません。rdf:PlainLiteralの値空間は、RDFプレーン・リテラルで表されるすべてのデータ値から成り、それにより、RDFアプリケーションがこの集合を明示的に参照(例えば、rdfs:range言明で)できるようになります。
RDFのプレーン・リテラルは既にRDFとSPARQLの構文の一部であるため、rdf:PlainLiteralリテラルは、RDFとSPARQLの構文ではRDFプレーン・リテラルとして記述されます。
このデータ型は、プレーン・リテラルと同様に、言語タグをUnicode文字列に関連付けることができますが、自然言語による発言の表現にはその機能を提供しません。これらのリテラル内では、他のすべてのUnicode文字と同じように、Unicodeの双方向制御文字[BIDI]を使用できます。(より豊かな、XHTML[XHTML]やルビ・アノテーション[RUBY]などのXMLに基づく表現は、rdf:XMLLiteralデータ型を用いて表現できます。)
文字はテキストの原子単位です。個々の文字には、XML[XML]のChar生成規則と一致していなければならない(MUST)UCS(Universal Character Set)コード・ポイント[ISO/IEC 10646](Unicodeコード・ポイント[UNICODE]と同じ)があるため、XMLスキーマ・データ型[XML Schema Datatypes]との互換性が保証されます。このドキュメントでは、U+の後にコード・ポイントの4桁の16進の値を置いてコード・ポイントを表すことがあります。
文字列は、0以上の文字の有限シーケンスです。文字列の長さは、その中の文字の数です。この仕様では、文字列はダブル引用符で囲んで記述しています。2つの文字列は、全く同じ順序で全く同じ文字が含まれている場合に限り、同一です。
UCS[ISO/IEC 10646]とUnicode[UNICODE]は、1,114,112のコード・ポイントを提供しています。しかし、XML[XML]のChar生成規則では、サロゲート・コード・ポイントとU+FFFEとU+FFFFのコード・ポイントは除外されます。したがって、rdf:PlainLiteralは、合計1,112,033の文字を提供します。この数は、OWL 2オントロジの充足可能性に影響を与える可能性があるため、重要です。次の例について考えてみてください。
ClassAssertion( MinCardinality( n a:property DatatypeRestriction( xs:string xs:length 1 ) ) a:i ) |
このOWL 2公理では、個体a:iはプロパティーa:propertyにより、少なくとも長さが1の異なる文字列nに接続されていると記述されています。この文字列の数は、上記の定義によって1,112,033に制限されているため、nが1,112,033以下である場合に限り、このオントロジーは満足できます。
言語タグは、BCP 47[BCP 47]のlangtag生成規則と一致する文字列です。さらに、この定義がBCP 47の有効なクラスの適合性ではなく、整形式のクラスの適合性に対応していることに注意してください。言語タグには、IANA言語サブタグ・レジストリ(IANA Language Subtag Registry)に登録されていないサブタグを含むことができます(MAY)が、rdf:PlainLiteralの実装では、そのような無効な言語タグを拒絶することもできます(MAY)。
言語タグ"en-fubar"は、IANA言語サブタグ・レジストリに登録されていないため、rdf:PlainLiteralの実装ではそれを拒絶できます。しかし、この文字列は、BCP 47のlangtag生成規則と一致するため、この仕様の目的に対して完全に有効な言語タグです。したがって、rdf:PlainLiteralの値空間(定義に関しては3項を参照)には、例えば、< "some string" , "en-fubar" >の対が含まれます。
この仕様では、データ型とその構成要素を指定するために、URI(Uniform Resource Identifier)を用います。これに関してはRFC 3986[RFC 3986]で定義されています。読みやすさのために、URI接頭辞はしばしば、RDF[RDF]の規定に従い、短い接頭辞名を用いて省略形にされます。このドキュメントの全体で、次の接頭辞名を用いています。
XML名前空間仕様[XML Namespaces]で定義されているとおり、5項で定義されている組込み関数の名前はQNamesです。5項では、次の名前空間省略を用いています。
pr:lnという形式の表現が省略形のURIを示すのかQNameを示すのかは、文脈から明らかであるべきです。5項の組込み関数の名前のみがQNamesであり、その他のそのような表現はすべて省略形のURIを示します。
このドキュメントでは、データ型は、XMLスキーマ・データ型[XML Schema Datatypes]に沿って定義されています。個々のデータ型はURIで識別され、次の構成要素で記述されます。
プレーン・リテラルは、オプションで言語タグ[RDF]を持つ文字列です。言語タグのないプレーン・リテラルは、RDF解釈[RDF Semantics]で単独で解釈されます。言語タグがあるプレーン・リテラルは"abc"@langTagと書くことができ、RDF解釈では< "abc" , "langTag" >の対として解釈されます。
型付きリテラルは、文字列とデータ型URI[RDF]で構成され、"abc"^^datatypeURIと書くことができます。datatypeURIで識別されるRDFデータ型が与えられれば、データ型を含んでいるRDFデータ型付き-解釈は、型付きリテラルを、データ型が字句形式"abc"に割り当てたデータ値であると解釈します。
イタリック体のキーワード、「しなければならない(MUST)」、「してはならない(MUST NOT)」、「すべきである/する必要がある(SHOULD)」、「すべきでない/する必要がない(SHOULD NOT)」および「することができる/してもよい(MAY)」は、この仕様を実装するツールの規範的動作のある側面を規定し、RFC 2119[RFC 2119]で規定されているとおりに解釈されます。
http://www.w3.org/1999/02/22-rdf-syntax-ns#PlainLiteralというURI(省略形はrdf:PlainLiteral)で識別されるデータ型は、次のように定義されています。
値空間。 以下で構成されるrdf:PlainLiteralの値空間
字句空間。 "abc"が任意の(恐らく空の)文字列であれば、rdf:PlainLiteralの字句形式は、"abc@langTag"という形式の文字列で、"langTag"は空の文字列か(必ずしも小文字ではない)言語タグのどちらかです。そのような字句形式は、次のように、それぞれdvというデータ値にマッピングされます。
次の表は、いくつかのrdf:PlainLiteralの字句形式と、それらに対応するデータ値を示しています。
字句形式 | 対応するデータ値 |
---|---|
"Family Guy@en" | < "Family Guy" , "en" > |
"Family Guy@EN" | < "Family Guy" , "en" > |
"Family Guy@FOX@en" | < "Family Guy@FOX" , "en" > |
"Family Guy@" | "Family Guy" |
"Family Guy@FOX@" | "Family Guy@FOX" |
次の表は、rdf:PlainLiteralの字句形式ではないいくつかの文字列を示しています。
文字列 | rdf:PlainLiteralの字句形式ではない理由 |
---|---|
"Family Guy" | @(U+0040)という文字が少なくとも1つ含まれていない。 |
"Family Guy@12" | "12"はBCP 47に従った言語タグではない。 |
ファセット空間。 rdf:PlainLiteralのファセット空間は、表1で示しているように定義されています。
以下の場合、ファセットの対( F v )は、rdf:PlainLiteralのファセット空間にあります。 | このファセットの対はそれぞれ、以下が含まれるrdf:PlainLiteralの値空間のサブセットにマッピングされます。 |
---|---|
Fがxs:length、 xs:minLength、 xs:maxLength、 xs:pattern、 xs:enumerationまたは xs:assertionであり、( F v )がxs:stringのファセット空間にある。 |
XMLスキーマ・データ型[XML Schema Datatypes]で規定されているとおりに( F v )で決定されたxs:stringの値空間のサブセットに"abc"が含まれているような、"abc"というすべての文字列と< "abc" , "lc-langtag" >という形式のすべての対 |
Fがrdf:langRangeであり、 vが[RFC4647]の2.2項で規定されるとおりの拡張言語範囲である。 |
"lc-langtag"[RFC4647]の3.3.2項に規定されているとおりに"lc-langtag"が拡張フィルタリング下でvと一致する、< "abc" , "lc-langtag" >という形式のすべての対 |
xs:lengthというファセットは、それに言語タグがあるかどうかにかかわらず特定の長さの文字列のサブセットを参照するために使用できます。したがって、ファセットの対( xs:length 3 )に対応するrdf:PlainLiteralの値空間のサブセットには、< "abc" , "en" >と< "abc" , "de" >の対のみではなく、"abc"という文字列が含まれています。
rdf:langRangeというファセットは、言語タグが含まれている文字列のサブセットを参照するために使用できます。言語範囲は小文字である必要がなく、マッチングのアルゴリズムは大文字・小文字を区別しないことに注意してください。したがって、ファセットの対( rdf:langRange "de-DE" )に対応するrdf:PlainLiteralの値空間のサブセットには、< "abc" , "de-de" >と< "abc" , "de-de-1996" >の対が含まれています(RFC 4647により、"de-DE"という言語範囲と一致するため)が、"abc"という文字列(言語タグを有する対ではないため)や、< "abc" , "de-deva" >と< "abc" , "de-latn-de" >の対は含まれていません(RFC 4647により、"de-DE"という言語範囲と一致しないため)。
ファセットの対( rdf:langRange "*" )は、< "abc" , "lc-langtag" >という形式のすべての対を含んでいるrdf:PlainLiteralの値空間のサブセットにマッピングされます。OWL 2などの言語では、これはデータ値に言語タグが含まれていなければならないことを明示するために使用できます。
上記から、rdf:PlainLiteralデータ型を含んでいるデータ型付き解釈では、rdf:PlainLiteralの値空間は、プレーン・リテラルに割り当てられたデータ値をもれなく含むことになります(言語タグの有無に関わらず)。したがって、rdf:PlainLiteralデータ型は、この集合を参照する明示的な方法を提供します。
構文上余剰な別の情報源を除去し、rdf:PlainLiteralデータ型を理解しないアプリケーションとの高い相互運用性を保持するために、RDFグラフとSPARQL用の構文におけるrdf:PlainLiteralリテラルの形式は、型付きリテラル用の構文ではなく、対応する既存のプレーン・リテラル用の構文です。したがって、rdf:PlainLiteralをデータ型として持つ型付きリテラルは、この仕様では、RDFグラフまたはSPARQL用の構文において有効でないとみなされます。
この設計を実装し、この相互運用性を提供するために、このデータ型を採用するアプリケーションは、プレーン・リテラル用の構文が提供される場合は常に(rdf:PlainLiteral型付きリテラルではなく)RDFグラフおよびSPARQL結果用の既存の構文における場合のように、プレーン・リテラルを用いなければなりません(MUST)
さらに、システムは、非構文的な公開インターフェースに同じ様な制限が必要かもしれません。例えば、拡張SPARQL基本グラフ・マッチングでは、rdf:PlainLiteralを理解する含意レジームにおけるSPARQL基本グラフ・パターンのマッチング結果は、既存のRDFのプレーン・リテラルの形式で変数バインディングを提供しなければなりません(MUST)。
この項は、rdf:PlainLiteralデータ値を構築し、その上で機能する関数を定義します。使用する用語と、これらの関数の記述方法は、XQuery 1.0とXPath 2.0関数および演算子[XPathFunc]に従います。個々の関数はQName[XML Namespaces]で識別されます。この項で用いているエラーコードは、XPath 2.0仕様[XPath20]の付録Gと、XQueryとXPath関数仕様[XPathFunc]の付録Cで提供されています。
plfn:PlainLiteral-from-string-lang( $arg1 as xs:string, $arg2 as xs:string) as rdf:PlainLiteral
要約: $arg2が存在していれば、データ値< $arg1, lowercase($arg2) >を返し、そうでなければ、データ値$arg1を返します。どちらの引数も、型xs:stringかサブタイプの1つでなければならず、$arg2 — 存在していれば — は、(空でない)言語タグでなければならず、そうでなければ、この関数によりerr:FORG0006という型エラーが生じます。rdf:PlainLiteralの値空間では、言語タグは小文字であるため、この関数は$arg2を小文字に変換することに注意してください。
plfn:string-from-PlainLiteral( $arg as rdf:PlainLiteral) as xs:string
要約: $argが形式< s, l >または形式sのrdf:PlainLiteralデータ値である場合、sの文字列部分を返します。$argが型rdf:PlainLiteralでない場合、この関数によりerr:FORG0006という型エラーが生じます。
plfn:lang-from-PlainLiteral( $arg as rdf:PlainLiteral ) as xs:language
要約: $argが形式< s, l >のrdf:PlainLiteralデータ値である場合、言語タグlを返し、$argが形式sのrdf:PlainLiteralデータ値である場合、空の文字列を返します。$argが型rdf:PlainLiteralでない場合、この関数によりerr:FORG0006という型エラーが生じます。
この項で用いている照合順序の概念は、XPathとXQuery関数仕様[XPathFunc]の7.3.1項から得られます。
plfn:compare( $comparand1 as rdf:PlainLiteral?, $comparand2 as rdf:PlainLiteral? ) as xs:integer?
plfn:compare( $comparand1 as rdf:PlainLiteral?, $comparand2 as rdf:PlainLiteral?, $collation as xs:string ) as xs:integer?
要約: $comparand1または$comparand2のいずれかが型rdf:PlainLiteralではないか、$collationが指定されているものの型xs:stringではない場合、この関数によりerr:FORG0006という型エラーが生じます。そうでなければ、引数のうちの1つが空である場合、$comparand1および$comparand2のうちの1つに言語タグがあり、もう一方にはない場合、または$comparand1および$comparand2の言語部分が同等でない場合、関数は空のシーケンスを返します。そうでなければ、この関数は、$comparand1(または、言語タグがない場合には$comparand1自身)の文字列部分の値が、$comparand2(または、言語タグがない場合には$comparand2自身)の文字列部分の値よりそれぞれ小さいか、同等か、それよりも大きいかに応じて、-1か0か1を返します。この関数の呼び出しで用いられる照合順序は、XPathとXQuery関数仕様[XPathFunc]の7.3.1項の規則によって決まります。
この関数の最初のバージョンによって、XQuery演算子"eq"、"ne"、"gt"、"lt"、"le"、"ge"を用いてrdf:PlainLiteralの値の比較が可能となります。
この2つの関数は、次の定義で宣言されたXQuery関数と見ることができます。
declare function plfn:compare( $comparand1 as rdf:PlainLiteral?, $comparand2 as rdf:PlainLiteral? ) as xs:integer? { return if ( fn:empty($comparand1) ) then $comparand1 else if ( fn:empty($comparand2) ) then $comparand2 else if ( fn:compare ( plfn:lang-from-PlainLiteral( $comparand1 ), plfn:lang-from-PlainLiteral( $comparand2 ) ) = 0 ) then fn:compare ( plfn:string-from-PlainLiteral( $comparand1 ), plfn:string-from-PlainLiteral( $comparand2 ) ) }
declare function plfn:compare( $comparand1 as rdf:PlainLiteral?, $comparand2 as rdf:PlainLiteral? $collation as xs:string ) as xs:integer? { return if ( fn:empty($comparand1) ) then $comparand1 else if ( fn:empty($comparand2) ) then $comparand2 else if ( fn:compare ( plfn:lang-from-PlainLiteral( $comparand1 ), plfn:lang-from-PlainLiteral( $comparand2 ) ) = 0 ) then fn:compare ( plfn:string-from-PlainLiteral( $comparand1 ) , plfn:string-from-PlainLiteral( $comparand2 ), $collation) }
plfn:length($arg as rdf:PlainLiteral) as xs:integer
要約: $argがそれぞれ、形式< s, l >のrdf:PlainLiteralデータ値であるか、文字列値sである場合、文字列部分s内の文字数を返します。$argが型rdf:PlainLiteralでない場合、この関数によりerr:FORG0006という型エラーが生じます。
この関数は、次の定義で宣言されたXQuery関数と見ることができます。
declare function plfn:length($arg as rdf:PlainLiteral?) as xs:integer { return fn:string-length ( plfn:string-from-PlainLiteral( $arg ) ) }
plfn:matches-language-range($arg as rdf:PlainLiteral?, $range as xs:string) as xs:boolean
要約: $argが型rdf:PlainLiteralのリテラルの長さ0か1のシーケンスであり、$rangeが型xs:stringである場合にのみ、この関数は定義されます。パラメータがこれらの型付け条件を満たさない場合、関数によりerr:FORG0006という型エラーが生じます。型付け条件が満たされれば、関数は、$argが、「言語タグのマッチング」[BCP-47]に対する拡張フィルタリングのアルゴリズムで指定されている拡張言語範囲$rangeと一致する言語タグlを持つ形式< s, l >のrdf:PlainLiteralデータ値である場合、true(真)を返し、そうでなければ、false(偽)を返します。これは、引数$argが文字列rdf:PlainLiteralデータ値である場合、関数がfalse(偽)を返すことを意味します。空の入力シーケンスは、空の文字列から成るrdf:PlainLiteralデータ値として扱われ、したがって、そのような入力においては、この関数もfalse(偽)を返します。
RIFとOWLのワーキンググループは、RDFで見られるように、関連する言語タグを有する文字列をサポートするために同時に作業を行いました。この仕様は、これらの2つのグループ間の共同作業の結果であり、データ型rif:textとowl:internationalizedStringの作業に基づいています。
編集者は、両方のワーキンググループのメンバーと議長に加え、Addison Phillips、C. Michael Sperberg-McQueen、Eric Prud'hommeaux、Andy SeaborneおよびPat Hayesに、また、この仕様の詳細の作成に支援をしてくださったpublic-rdf-textのメーリング・リストのその他の参加者に感謝申し上げます。
この項では、2009年10月27日の勧告以後のこのドキュメントへの変更をまとめています。
この項では、2009年9月22日の勧告案以後のこのドキュメントへの変更をまとめています。
この項では、2009年6月11日の勧告候補以後のこのドキュメントへの変更をまとめています。
2009年4月21日の最終草案以後、次の変更を行いました。