【注意】 このドキュメントは、W3CのRDF 1.1 XML Syntax W3C Recommendation 25 February 2014の和訳です。
このドキュメントの正式版はW3Cのサイト上にある英語版であり、このドキュメントには翻訳に起因する誤りがありえます。誤訳、誤植などのご指摘は、訳者までお願い致します。
First Update: 2014年7月14日
公開以後に報告されたエラーや問題がないか正誤表を確認してください。
このドキュメントは、規範以外の形式でも入手できます: 2004年勧告との差分
この仕様の英語版が唯一の規範のバージョンです。非規範の翻訳版も入手可能かもしれません。
Copyright © 2004-2014 W3C® (MIT, ERCIM, Keio, Beihang), All Rights Reserved. W3C liability, trademark and document use rules apply.
このドキュメントでは、RDF/XMLと呼ばれるRDF用のXML構文を、XMLの名前空間、XML情報セットおよびXMLベースに関して定義しています。
この項は、このドキュメントの公開時のステータスについて記述しています。他のドキュメントがこのドキュメントに取って代わることがありえます。現行のW3Cの刊行物およびこの技術報告の最新の改訂版のリストは、http://www.w3.org/TR/のW3C技術報告インデックスにあります。
このドキュメントは、2004年のRDF XML構文仕様勧告を編集したバージョンです。この改訂の目的は、このドキュメントをRDF 1.1ドキュメント集合の一部として利用できるようにすることです。変更は、参考文献の改訂、用語の更新、「はじめに」の調節に限定されます。ドキュメントの技術的な内容は、RDF 1.1ではデータ型XMLLiiteralが非規範的であると示したという事実を除いて変わっていません。変更の詳細は、変更の項に記載しています。XML技術の現状に合わせるため、XMLLiteral解析のための(非規範的)アルゴリズム(7.2.17項)を更新しました。このドキュメントへの編集により以前の実装が無効とはならないため、管理者は、新たな実装報告書は必要ないと決定しました。
このドキュメントは、RDFワーキンググループによって勧告として公開されました。このドキュメントに関してコメントを行いたい場合には、[email protected](購読、アーカイブ)にお送りください。どのようなコメントでも歓迎します。
このドキュメントは、W3Cメンバー、ソフトウェア開発者、他のW3Cグループ、および他の利害関係者によりレビューされ、W3C勧告として管理者の協賛を得ました。これは確定済みドキュメントであり、参考資料として用いたり、別のドキュメントで引用することができます。勧告の作成におけるW3Cの役割は、仕様に注意を引き付け、広範囲な開発を促進することです。これによってウェブの機能性および相互運用性が増強されます。
このドキュメントは、2004年2月5日のW3C特許方針の下で活動しているグループによって作成されました。W3Cは、このグループの成果物に関連するあらゆる特許の開示の公開リストを維持し、このページには特許の開示に関する指示も含まれています。不可欠な請求権(Essential Claim(s))を含んでいると思われる特許に関して実際に知っている人は、W3C特許方針の6項に従って情報を開示しなければなりません。
xml:lang
rdf:parseType="Literal"
rdf:datatype
rdf:nodeID
rdf:parseType="Resource"
rdf:ID
and xml:base
rdf:li
and rdf:_
nrdf:parseType="Collection"
rdf:ID
このドキュメントでは、RDFグラフ用のXML[XML10]構文を定義しています。
このドキュメントでは、空白要素の特定の形式のような、少々低レベルであったXMLの細部を変更したXML情報セット [XML-INFOSET]の情報項目(information item)に関して当初のRDF/XML文法[RDFMS]を改訂しています。これによって、文法をより正確に記録でき、XML構文からRDFグラフへのマッピングをより明確に示すことができます。RDFグラフへのマッピングは、N-トリプル[N-TRIPLES]形式でステートメントを作成することで行えます。
このドキュメントは、一連のRDF 1.1ドキュメントの一部です。その一連のドキュメントに含まれているその他のドキュメントは次のとおりです。
過去の概観を含むRDF/XML構文のより詳細な概論に関しては、「RDF: ストライプRDF/XML構文の理解」[STRIPEDRDF]を参照してください。
この項では、RDF/XML構文を紹介し、RDF/XML構文によるRDFグラフのコード化方法を記述し、例を使用してこれを解説しています。この非形式的な記述と、6 構文データ・モデルや7 RDF/XML文法の項の構文や文法の形式的な記述との間に矛盾がある場合は、後者の2つの項が優先します。
RDF概念および抽象構文ドキュメント[RDF11-CONCEPTS]では、RDFグラフ・データ・モデルとRDFグラフ抽象構文を定義しています。これは、RDFセマンティクス [RDF11-MT]とともに、抽象構文に必要な形式意味論を提供します。RDFグラフは、ノードと、対になったノードをリンクするラベル付きの有向のアークを持っており、各トリプルは主語ノード、述語、目的語ノードを含んでいる1組のRDFトリプルとして表現されます。ノードは、IRI、リテラルや空白ノードです。空白ノードには、空白ノード識別子と呼ばれる、ドキュメント内のみで有効な識別子を付与できます。述語は、IRIであり、2つのノード間の関係、あるいは、ある主語ノードに対する属性値(目的語ノード)の定義のどちらかとして解釈できます。
XMLでグラフをコード化するためには、ノードと述語はXML用語 — 要素名、属性名、要素コンテンツ、属性値で表されなければなりません。RDF/XMLでは、XMLの名前空間[XML-NAMES]で定義されているとおりにIRIを表すためにXMLQNameを用います。すべてのQNameは、IRIや短いローカル名の名前空間名を持っています。さらに、QNameは、短い接頭辞を持っているか、デフォルトの名前空間宣言で宣言して何も持たないかのどちらかです(しかし、依然として名前空間名を持っている)。
QNameによって表現されたIRIは、QNameの名前空間名(IRI)部分の後に、QNameのローカル名部分を追加することによって定まります。これは、すべての述語と一部のノードのIRIを短縮化するために使用されます。主語ノードと目的語ノードを識別するIRIは、XML属性値としても格納できます。目的語ノードでしかありえないRDFリテラルは、XML要素テキスト・コンテンツかXML属性値かのどちらかになります。
グラフは、全体のグラフをカバーする、ノード、述語アーク、ノード、述語アーク、ノード、述語アーク…ノードという形式のパスの集合であると考えることができます。RDF/XMLでは、これらは、ノードと述語アークの要素を交互に繰り返した要素内の要素順になります。これは、一連のノード/アークのストライプと呼ばれます。このシーケンスの最初のノードは最外部の要素になり、次の述語アークは子要素などになります。このストライプは通常、RDF/XMLドキュメントの最上部で始まり、常にノードで始まります。
以下の項では、完全なRDF/XMLドキュメントになるまで、いくつかのRDF/XMLの例を追加提供していきます。例7が、最初の完全なRDF/XMLドキュメントです。
RDFグラフを図1で示しています。このRDFグラフでは、ノードを楕円形で表してそれを持つIRIを含み、すべての述語アークをIRIでラベル付けし、文字列リテラルのノードを長方形で書いてあります。
1つのノード、述語アーク ... と辿って行けば、グラフのノード・パスは図2のようになります。
図2のグラフの左側は、以下のノード/述語アークのストライプに対応しています。
http://www.w3.org/TR/rdf-syntax-grammar
を持つノードhttp://example.org/terms/editor
でラベル付けされた述語Archttp://example.org/terms/homePage
でラベル付けされた述語Archttp://purl.org/net/dajobe/
を持つノードRDF/XMLでは、図2の左側の5つのノードと述語アークのシーケンスは、グラフのノードと述語アークに対する、2種類の5つのXML要素の使用に対応しています。これらは、慣習的にそれぞれノード要素とプロパティー要素と呼ばれます。例1のストライピングでは、rdf:Description
はノード要素(3つのノードで3回使用)で、ex:editor
とex:homePage
は2つのプロパティー要素です。
ストライプ状のRDF/XML(ノードと述語アーク)<rdf:Description>
<ex:editor><rdf:Description>
<ex:homePage><rdf:Description>
</rdf:Description>
</ex:homePage></rdf:Description>
</ex:editor></rdf:Description>
図2のグラフは、IRIであるいくつかのノード(および、その他のIRIではないもの)で構成され、ノード要素にrdf:about
属性を使用してRDF/XMLにこれを追加すると例2になります。
IRIを追加したノード要素 <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"> <ex:editor> <rdf:Description> <ex:homePage> <rdf:Description rdf:about="http://purl.org/net/dajobe/"> </rdf:Description> </ex:homePage> </rdf:Description> </ex:editor> </rdf:Description>
図1のグラフで例2のRDF/XMLに他の2つのパスを加えると例3になります(この例では、空白ノードが2つのパスの間で共有されていることが示されていません。2.10を参照。)
すべてのグラフ・パスの完全な記述 <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"> <ex:editor> <rdf:Description> <ex:homePage> <rdf:Description rdf:about="http://purl.org/net/dajobe/"> </rdf:Description> </ex:homePage> </rdf:Description> </ex:editor> </rdf:Description> <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"> <ex:editor> <rdf:Description> <ex:fullName>Dave Beckett</ex:fullName> </rdf:Description> </ex:editor> </rdf:Description> <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"> <dc:title>RDF 1.1 XML Syntax</dc:title> </rdf:Description>
共通する部分をより簡単に記述するために使用できる省略形がいくつかあります。特に、RDFグラフの主語ノードは、一般的に複数の外向きの述語アークを持っています。資源に関するノード要素が複数のプロパティー要素を持つ場合には、RDF/XMLでは対応する構文に省略形を提供します。これは、主語ノードを記述しているノード要素内で複数の子プロパティー要素を使用して省略形にできます。
例3を例に挙げると、複数のプロパティー要素をとることができる2つのノード要素があります。IRI http://www.w3.org/TR/rdf-syntax-grammar
を持つ主語ノードはプロパティー要素ex:editor
とex:title
を持ち、空白ノードのノード要素はex:homePage
とex:fullName
をとることができます。この省略形によって、例4で示している結果になります(この例は、1つの空白ノードがあることを示しています)。
ノード要素で複数のプロパティー要素を使用 <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"> <ex:editor> <rdf:Description> <ex:homePage> <rdf:Description rdf:about="http://purl.org/net/dajobe/"> </rdf:Description> </ex:homePage> <ex:fullName>Dave Beckett</ex:fullName> </rdf:Description> </ex:editor> <dc:title>RDF 1.1 XML Syntax</dc:title> </rdf:Description>
RDFグラフの述語アークが、それ以上の述語アークがない目的語ノードを指し、RDF/XMLで空白ノード要素<rdf:Description rdf:about="...">
</rdf:Description>
(または、<rdf:Description rdf:about="..." />
) として表示される場合、この形式は短縮化できます。これは、包含しているプロパティー要素において、目的語ノードのIRIをXML属性rdf:resource
の値として使用し、プロパティー要素を空にすることで行えます。
この例では、プロパティー要素ex:homePage
には、IRI http://purl.org/net/dajobe/
を持つ空白ノード要素が含まれています。これは、例5で示しているような空白プロパティー要素の形式に置き換えることができます。
空白プロパティー要素 <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"> <ex:editor> <rdf:Description> <ex:homePage rdf:resource="http://purl.org/net/dajobe/"/> <ex:fullName>Dave Beckett</ex:fullName> </rdf:Description> </ex:editor> <dc:title>RDF 1.1 XML Syntax</dc:title> </rdf:Description>
プロパティー要素のコンテンツが文字列リテラルである場合には、これを包含しているノード要素のXML属性として使用できるかもしれません。これは、プロパティーの要素名が繰り返されず(XMLで要求される — XML要素には属性名は1つのみ)、プロパティー要素の文字列リテラル(もしあれば)のスコープ内のxml:lang
が同じである場合にのみ、同じノード要素の複数のプロパティーに対して可能となります(2.7項を参照)。この省略形は、プロパティー属性として知られており、あらゆるノード要素に適用できます。
この省略形は、プロパティー要素がrdf:type
であり、その値がIRIの目的語ノードとして解釈されるrdf:resource
属性を持っている場合にも使用できます。
例5には、文字列リテラル・コンテンツを持つ、dc:title
とex:fullName
プロパティー要素という2つのプロパティー要素があります。これらは、例6で示している結果になるプロパティー属性に置き換えることができます。
文字列リテラル・コンテンツを持つプロパティー要素のプロパティー属性への置き換え <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar" dc:title="RDF 1.1 XML Syntax"> <ex:editor> <rdf:Description ex:fullName="Dave Beckett"> <ex:homePage rdf:resource="http://purl.org/net/dajobe/"/> </rdf:Description> </ex:editor> </rdf:Description>
完全なRDF/XMLドキュメントを作成するためには、最上位のXMLドキュメント要素としてrdf:RDF
のXML要素内には、通常はXMLへのグラフのシリアル化が含まれています。慣習上、rdf:RDF
要素は、使用しているXML名前空間を宣言するためにも使用されますが、これは必須ではありません。rdf:RDF
内に最上位のノード要素が1つしかないときにであっても、XML名前空間は宣言しなければなりませんが、このrdf:RDF
は省略できます。
XMLの仕様では、ドキュメントの先頭に、XMLバージョンと恐らくXMLコンテンツのコード化を含むXML宣言も許されています。これはオプションですが、推薦されます。
RDF/XMLの完成は、例4以後の正しい完全なグラフの例のいずれに対しても可能ですが、最も小さな例6の場合、最終的な構成要素を加えれば例7の最初の図1のグラフの完全なRDF/XML表現になります。
図1グラフの完全なRDF/XML記述(example07.rdf、出力example07.nt) <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ex="http://example.org/stuff/1.0/"> <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar" dc:title="RDF1.1 XML Syntax"> <ex:editor> <rdf:Description ex:fullName="Dave Beckett"> <ex:homePage rdf:resource="http://purl.org/net/dajobe/" /> </rdf:Description> </ex:editor> </rdf:Description> </rdf:RDF>
rdf:RDF
内にはrdf:Description
が1つのみ存在するため、上記例7のrdf:RDF
を省略できますが、これはここでは示していません。
xml:lang
RDF/XMLでは、コンテンツの言語の識別が可能になるように、XML 1.0 [XML10]の2.12 言語識別で定義されているようなxml:lang
属性の使用が許されています。xml:lang
属性は、あらゆるノード要素やプロパティー要素で使用でき、含まれているコンテンツがその言語であることを示せます。XMLリテラルを含んでいる型付きリテラルは、この属性に影響されません。この現在最も特定的なスコープ内の言語(もしあれば)は、文字列リテラル・コンテンツやプロパティー属性値に適用されます。xml:lang=""
の形式は、言語識別子の欠如を示します。
RDFプロパティーのコンテンツの言語をマークアップするいくつかの例を例8で示しています。
xml:lang
の完全な例(example08.rdf、出力example08.nt)
<?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/">
<rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar">
<dc:title>RDF 1.1 XML Syntax</dc:title>
<dc:title xml:lang="en">RDF 1.1 XML Syntax</dc:title>
<dc:title xml:lang="en-US">RDF 1.1 XML Syntax</dc:title>
</rdf:Description>
<rdf:Description rdf:about="http://example.org/buecher/baum" xml:lang="de">
<dc:title>Der Baum</dc:title>
<dc:description>Das Buch ist ausergewohnlich</dc:description>
<dc:title xml:lang="en">The Tree</dc:title>
</rdf:Description>
</rdf:RDF>
rdf:parseType="Literal"
この項は非規範的です。
RDFでは、XMLリテラル[RDF11-CONCEPTS]を述語の目的語ノードとして付与できます。これは、プロパティー要素(プロパティー属性ではなく)のコンテンツとしてRDF/XMLで記述され、包含するプロパティー要素においてrdf:parseType="Literal"
属性を使用して示されます。
XMLリテラルの記述例を例9で示しており、ここには、主語ノードIRI http://example.org/item01
、述語IRI http://example.org/stuff/1.0/prop
(ex:prop
の)、a:Box
で始まるXMLリテラル・コンテンツを持つ目的語ノードを持つ1つのRDFがあります。
rdf:parseType="Literal"
の完全な例(example09.rdf、出力example09.nt)
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ex="http://example.org/stuff/1.0/">
<rdf:Description rdf:about="http://example.org/item01">
<ex:prop rdf:parseType="Literal" xmlns:a="http://example.org/a#">
<a:Box required="true">
<a:widget size="10" />
<a:grommit id="23" />
</a:Box>
</ex:prop>
</rdf:Description>
</rdf:RDF>
rdf:datatype
RDFでは、型付きリテラルを述語の目的語ノードとして付与できます。型付きリテラルは、リテラルの文字列とデータ型IRIで構成されています。これは、プロパティー要素形式(プロパティー属性ではない)のリテラルの文字列ノードに対するものと同じ構文を使用してRDF/XMLで書かれていますが、プロパティー要素にrdf:datatype="
datatypeURI"
属性が追加使用されています。属性ではあらゆるIRIが使用できます。
RDFの型付きリテラルの例を例10で示しており、ここには、主語ノードIRI http://example.org/item01
、述語IRI http://example.org/stuff/1.0/size
(ex:size
の)、XMLスキーマ [XMLSCHEMA-2]データ型int
として解釈される型付きリテラル(「123」、http://www.w3.org/2001/XMLSchema#int
)を持つ目的語ノードを持つ1つのRDFトリプルがあります。
rdf:datatype
の完全な例(example10.rdf、出力example10.nt)
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ex="http://example.org/stuff/1.0/">
<rdf:Description rdf:about="http://example.org/item01">
<ex:size rdf:datatype="http://www.w3.org/2001/XMLSchema#int">123</ex:size>
</rdf:Description>
</rdf:RDF>
rdf:nodeID
RDFグラフの空白ノードは多様ですが、IRI識別子を持っていません。同じグラフの空白ノードを、いくつかのRDFトリプルの主語や述語などのような複数の場所のRDF/XMLで参照する必要があることもあります。この場合、それをドキュメントで識別するために、空白ノードに空白ノード識別子を付与できます。RDF/XMLの空白ノード識別子は、包含するXML情報セットの文書情報項目で詳述されています。空白ノード識別子は、ノード要素ではrdf:about="
IRI"
を、プロパティー要素ではrdf:resource="
IRI"
を、どちらの場合もrdf:nodeID="
blank node identifier"
と置き換えるために使用されます。
例7を例にとり、abc
の空白ノード識別子をその空白ノードに明示的に付与すると、例11で示す結果が得られます。2番目のrdf:Description
プロパティー要素が空白ノードに関するものです。
空白ノードを識別するrdf:nodeID
を使用したグラフの完全なRDF/XML記述(example11.rdf、出力example11.nt)
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:ex="http://example.org/stuff/1.0/">
<rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"
dc:title="RDF 1.1 XML Syntax">
<ex:editor rdf:nodeID="abc"/>
</rdf:Description>
<rdf:Description rdf:nodeID="abc" ex:fullName="Dave Beckett">
<ex:homePage rdf:resource="http://purl.org/net/dajobe/"/>
</rdf:Description>
</rdf:RDF>
rdf:parseType="Resource"
RDFグラフの空白ノード(IRIノードではない)は、<rdf:Description>
</rdf:Description>
の対を省略した形式で記述できます。この省略は、プロパティー要素をプロパティーとノードの要素(property-and-node element)に変えるrdf:parseType="Resource"
属性を、包含しているプロパティー要素に置くことで行われ、それ自身はプロパティー要素とプロパティー属性の両方を持つことができます。プロパティー属性とrdf:nodeID
属性は、プロパティーとノードの要素(property-and-node)では許されていません。
以前の例7を例にとると、ex:editor
プロパティー要素のコンテンツはこのような方法でも行うことができ、例12で示している形式になります。
rdf:parseType="Resource"
を使用した完全な例(example12.rdf、出力example12.nt)
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:ex="http://example.org/stuff/1.0/">
<rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"
dc:title="RDF 1.1 XML Syntax">
<ex:editor rdf:parseType="Resource">
<ex:fullName>Dave Beckett</ex:fullName>
<ex:homePage rdf:resource="http://purl.org/net/dajobe/"/>
</ex:editor>
</rdf:Description>
</rdf:RDF>
空白ノード要素のすべてのプロパティー要素が、同じスコープ内のxml:lang
値(存在していれば)を持つ文字列リテラル値を持っており、これらのプロパティー要素のそれぞれが高々1度現れ、IRI目的語ノードを持つrdf:type
プロパティー要素が高々1つ存在する場合、これらは、これらを移動し、空白要素になった包含するプロパティー要素のプロパティー属性にすることで省略形にできます。
以前の例5を例にとると、ex:editor
プロパティー要素には、2つのプロパティー要素ex:fullname
とex:homePage
を持つ空白ノード要素が含まれています。ex:homePage
は、文字列リテラル値を持っていないため、ここでは適合せず、そのため、この例の目的により無視しています。省略形は、ex:fullName
プロパティー要素を削除し、この削除したプロパティー要素の文字列リテラル値を持つ新しいプロパティー属性ex:fullName
をex:editor
プロパティー要素に追加します。空白ノード要素は、現在空白のex:editor
プロパティー要素で暗黙的になります。この結果は、例13で示しています。
空白プロパティー要素のプロパティー属性の完全な例(example13.rdf、出力example13.nt) <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:ex="http://example.org/stuff/1.0/"> <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar" dc:title="RDF 1.1 XML Syntax"> <ex:editor ex:fullName="Dave Beckett" /> <!-- Note the ex:homePage property has been ignored for this example --> </rdf:Description> </rdf:RDF>
RDFグラフが主語ノードに属するrdf:type
述語を持っていることは普通です。これは慣習的に、グラフでは型付きノードと呼び、RDF/XMLでは型付きノード要素と呼びます。RDF/XMLでは、rdf:Description
ノード要素を、タイプ関係の値のIRIに対応する名前空間要素(namespaced-element)に置き換えることによって、このトリプルをより簡潔に表現できます。もちろん、複数のrdf:type
述語が存在しえますが、この方法では1つしか使用できず、他はプロパティー要素かプロパティー属性のままでなければなりません。
型付きノード要素は、RDF語彙の組み込みクラスを持つRDF/XMLで一般に使用されます:rdf:Seq
、rdf:Bag
、rdf:Alt
、rdf:Statement
、rdf:Property
、rdf:List
。
例えば、例14のRDF/XMLは例15のように記述できます。
rdf:type
を持つ完全な例(example14.rdf、出力example14.nt)
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:ex="http://example.org/stuff/1.0/">
<rdf:Description rdf:about="http://example.org/thing">
<rdf:type rdf:resource="http://example.org/stuff/1.0/Document"/>
<dc:title>A marvelous thing</dc:title>
</rdf:Description>
</rdf:RDF>
rdf:type
を置き換えるために型付きノード要素を使用した完全な例(example15.rdf、出力example15.nt)
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:ex="http://example.org/stuff/1.0/">
<ex:Document rdf:about="http://example.org/thing">
<dc:title>A marvelous thing</dc:title>
</ex:Document>
</rdf:RDF>
rdf:ID
and xml:base
RDF/XMLでは、さらに2つの方法でXML属性のIRIを省略化できます。XML Infosetは、相対IRIを解決するために基底URIを定めた基底URI属性xml:baseを提供しますが、そうでない場合には基底URIはドキュメントのものです。基底URIは、rdf:about
、rdf:resource
、rdf:ID
、rdf:datatype
といったIRIを処理するすべてのRDF/XML属性に適用されます。
ノード要素(プロパティー要素ではなく)のrdf:ID
属性は、rdf:about
の代わりに使用でき、rdf:ID
属性値と連結した#
と同等の相対IRIを提供します。今までの例では、rdf:ID="name"
であれば、rdf:about="#name"
と同等です。xml:base
値(または、提供されない場合には、ドキュメント)のスコープ内では同じ名前は1度しか出現できないため、rdf:ID
は付加的なチェックを提供し、同じIRIと相対関係にある、別個で、関連する用語の集合を定義するためにも役に立ちます。
両方の形式では、スコープ内のxml:base
かRDF/XMLドキュメントのURIのどちらかの基底URIが分かっている必要があります。
例16では、http://example.org/here/
のxml:base
とrdf:Description
ノード要素のrdf:ID
を使用したhttp://example.org/here/#snack
のノードIRIの省略を示しています。ex:prop
述語の目的語ノードは、IRI http://example.org/here/fruit/apple
になるようにスコープ内の基底URIを使用してrdf:resource
のXML属性値を解決した絶対IRIです。
URIを短縮するためにrdf:ID
とxml:base
を使用した完全な例(example16.rdf、出力example16.nt) <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ex="http://example.org/stuff/1.0/" xml:base="http://example.org/here/"> <rdf:Description rdf:ID="snack"> <ex:prop rdf:resource="fruit/apple"/> </rdf:Description> </rdf:RDF>
rdf:li
and rdf:_
nRDFには、型付きノード要素として記述できるrdf:Seq
クラス、rdf:Bag
クラス、rdf:Alt
クラスのインスタンスと一緒に通常用いられる、コンテナ・メンバーシップ・プロパティーと対応するプロパティー要素とのまとまりがあります。リスト・プロパティーは、rdf:_1
、rdf:_2
などで、例17で示しているプロパティー要素やプロパティー属性として記述できます。rdf:_1
、rdf:_2
の順序のものと同等なrdf:li
という特別なプロパティー要素があり、7.4項で詳細を説明しています。コンテナ・メンバーシップ・プロパティーへのマッピングは、常にrdf:li
という特別なプロパティー要素がXMLに出現する順序で行われます — ドキュメントの順序は重要です。この方法で記述した、例17と同等なRDF/XMLを例18で示しています。
RDFリスト・プロパティーを使用した複雑な例(example17.rdf、出力example17.nt) <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Seq rdf:about="http://example.org/favourite-fruit"> <rdf:_1 rdf:resource="http://example.org/banana"/> <rdf:_2 rdf:resource="http://example.org/apple"/> <rdf:_3 rdf:resource="http://example.org/pear"/> </rdf:Seq> </rdf:RDF>
リスト・プロパティーに対してrdf:li
プロパティー要素を使用した完全な例(example18.rdf、出力example18.nt)
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Seq rdf:about="http://example.org/favourite-fruit">
<rdf:li rdf:resource="http://example.org/banana"/>
<rdf:li rdf:resource="http://example.org/apple"/>
<rdf:li rdf:resource="http://example.org/pear"/>
</rdf:Seq>
</rdf:RDF>
rdf:parseType="Collection"
RDF/XMLでは、プロパティー要素でにおいてrdf:parseType="Collection"
属性を使用して複数のノード要素を含むことができます。これらの含まれたノード要素は、コレクションの主語ノードの集合を示します。この構文形式は、主語ノードのコレクションをつなげた1組のトリプルに対応しており、生成された厳密なトリプルに関しては、7.2.19項 生成規則parseTypeCollectionPropertyEltで詳細に説明しています。コレクションは常に、ノード要素がXMLドキュメントで出現する順序で構築されます。ノードのコレクションの順序が重要かどうかは、アプリケーションの問題であるため、ここでは定義していません。
例19では、この形式を使用して、ex:hasFruit
プロパティー要素の終わりに3つのノード要素のコレクションを示しています。
rdf:parseType="Collection"
を使用したノードのRDFコレクションの完全な例(example19.rdf、出力example19.nt)
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ex="http://example.org/stuff/1.0/">
<rdf:Description rdf:about="http://example.org/basket">
<ex:hasFruit rdf:parseType="Collection">
<rdf:Description rdf:about="http://example.org/banana"/>
<rdf:Description rdf:about="http://example.org/apple"/>
<rdf:Description rdf:about="http://example.org/pear"/>
</ex:hasFruit>
</rdf:Description>
</rdf:RDF>
rdf:ID
rdf:ID
属性をプロパティー要素で使用してそれが生成するトリプルを具体化できます(完全な詳細に関しては、7.3項 具体化規則を参照)。トリプルの識別子は、rdf:ID
属性値に連結された相対IRI #
から作成されたIRIとして構築されるべきで、スコープ内の基底URIに対して解決されます。そのため、例えば、rdf:ID="triple"
である場合、基底URIに対する相対IRI #triple
から作成されたIRIと同等です。それぞれの(rdf:ID
属性値、基底URI)の対は、RDF/XMLドキュメントで1つでなければなりません。constraint-idを参照してください。
例20では、rdf:ID
が、具体化されたトリプルにIRI http://example.org/triples/#triple1
を提供するex:prop
プロパティー要素から作成されたトリプルを具体化するために使用されていることを示しています。
プロパティー要素を具体化するrdf:ID
の完全な例(example20.rdf、出力example20.nt)
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:ex="http://example.org/stuff/1.0/"
xml:base="http://example.org/triples/">
<rdf:Description rdf:about="http://example.org/">
<ex:prop rdf:ID="triple1">blah</ex:prop>
</rdf:Description>
</rdf:RDF>
このドキュメントの「しなければならない(MUST)」「してはならない(MUST NOT)」「必須である/要求される(REQUIRED)」「することになる(SHALL)」「することはない(SHALL NOT)」「すべきである/する必要がある(SHOULD)」「すべきでない/する必要がない(SHOULD NOT)」「推奨される(RECOMMENDED)」「することができる/してもよい(MAY)」「選択できる/任意である(OPTIONAL)」というキーワードは、RFC 2119 [RFC2119]で記述されているように解釈されるべきです。
修飾がない文字列の使用はすべてUnicode[UNICODE]の文字列、つまり、Unicodeの区点位置で表される文字列を示します。
RDF/XMLのインターネット・メディア・タイプ/MIMEタイプは、application/rdf+xml
です — RFC 3023 [RFC3023]の8.18項を参照。
(参考情報): MIMEタイプの登録状況に関しては、IANA MIMEメディア・タイプ [IANA-MEDIA-TYPES]を参照してください。
RDF/XMLファイルは、すべてのプラットホーム上で拡張子「.rdf
」(すべて小文字)であることが推奨されます。
IマッキントッシュHFSファイル・システム上に保存されたRDF/XMLファイルには、ファイル・タイプ「rdf
」(すべて小文字、4文字目に空白文字)が付与されていることが推奨されます。
RDF名前空間IRI(または、名前空間名)は、http://www.w3.org/1999/02/22-rdf-syntax-ns#
であり、他の接頭辞文字列が使用されることもありますが、通常は接頭辞rdf
を持つXMLで使用されます。RDF語彙は、この名前空間名によって識別され、以下の名前のみで構成されています。
RDF Description ID about parseType resource li nodeID datatype
Seq Bag Alt Statement Property XMLLiteral List
subject predicate object type value first rest _
n
nが先行する0を持たない0以上の10進の整数である場合。
nil
これら以外の名前は定義されておらず、問題に遭遇した場合には警告を発するべきです(SHOULD)が、それ以外の場合には、通常に動作すべきです。
RDF/XMLドキュメント内では、その名前空間名を追加文字に連結した・RDF名前空間IRI・であるXML名前空間の使用が許されています。
このドキュメント内では、用語rdf:
name名前は、名前がRDF語彙に由来し、名前を・RDF名前空間IRI・と連結したIRIを持っているということを示すために使用されます。例えば、rdf:type
は、IRI http://www.w3.org/1999/02/22-rdf-syntax-ns#type
を持っています。
RDF概念ドキュメント[RDF11-CONCEPTS]は、ノードおよび/または述語として機能する、以下の3種類のRDFデータを定義しています。
IRIは、ノード(主語と目的語の両方)、および述語として機能することができます。
IRIsは、以下のいずれかでありえます。
rdf:ID
属性値から変換。RDF/XML内では、XML QNameは、XMLローカル名を名前空間名(IRI)に追加することによって、IRIに変換されます。例えば、XML名前空間接頭辞foo
が、名前空間名(IRI)http://example.org/somewhere/
を持っている場合、QName foo:bar
がIRI http://example.org/somewhere/bar
に対応しています。これは、どのIRIを作成できるかということや、同じIRIを様々な方法で付与できるということは制限されることに注意してください。
rdf:ID
値は、5.3項 IRIの解決で定義されているスコープ内の基底URIに「#」を追加したものに属性値を追加することによって、IRIに変換されます。
リテラルは、目的語ノードとしてのみ機能することができます。
リテラルには常にデータ型があります。言語タグ付き文字列は、データ型rdf:langString
を持ちます。言語タグがなかったり、データ型が指定されていない場合には、リテラルはデータ型xsd:string
を持つと仮定されます。
空白ノードは、主語ノードおよび目的ノードとして機能することができます。
空白ノードは、RDFグラフにおいて固有のアイデンティティーを持ってます。グラフがRDF/XMLなどの構文で記述されているときには、この空白ノードには、この特徴を保持するためにグラフ・ローカルな(graph-local)識別子と構文が必要です。このローカルな識別子は、空白ノード識別子と呼ばれ、生成規則nodeIdAttrで提供されている構文とともにrdf:nodeID
属性の値としてRDF/XMLで使用されます。RDF/XMLの空白ノード識別子は、XML情報セット文書情報項目で詳述されています。
空白ノード識別子がrdf:nodeID
属性値として明示的に付与されていない場合は、作成する必要があります(作成した空白ノードID(generated-blank-node-id)の使用に関しては、6.3.3項を参照してください)。このような空白ノード識別子は、rdf:nodeID
属性値から作成されたいかなる空白ノード識別子とも衝突してはなりません。これは、グラフのすべての空白ノードの固有のアイデンティティーを保持するという方法で行えます、すなわち、同じ空白ノード識別子を異なる空白ノードに付与しません。可能な方法の1つは、不変な接頭辞をすべてのrdf:nodeID
属性値に加えて、作成済みの空白ノード識別子がその接頭辞を確実に使用していないようにすることです。もう1つの方法は、すべてのrdf:nodeID
属性値を新しく作成した空白ノード識別子にマッピングし、このようなすべての値においてRDF/XMLドキュメントでそのマッピングを実行することです。
RDF/XMLは、・root event・と・element event・のそれぞれに対して・base-uri・アクセサを定義するXMLベース[XMLBASE]をサポートしています。相対IRIは、[XMLBASE](およびRFC 2396)で指定されているアルゴリズムに従ってIRIに変換されます。これらの仕様では、IRIへの#foo
や空の文字列""
のような、フラグメント識別子のみを解決するためのアルゴリズムを定めていません。フラグメント識別子は、フラグメント識別子をスコープ内の基底URIに追加することによって、IRIに変換されます。空の文字列は、スコープ内の基底URIを置き換えることによって、IRIに変換されます。
テスト:
下記で示されています。:
test001.rdfとtest001.nt
test004.rdfとtest004.nt
test008.rdfとtest008.nt
空の同じドキュメントの参照、""は、基底URIのURI部分に対して解決し、フラグメント部分は無視されます。URI(Uniform Resource Identifier)[RFC3986]を参照してください。
テスト: test013.rdfとtest013.ntで示されています。
実装注意(参考情報): パス要素(/)がない階層的な基底URIを使用する際には、解決のために基底URIを使用する前にこれを追加しなければなりません。
テスト: test011.rdfとtest011.ntで示されています。
生成規則idAttrの各アプリケーションは、属性と一致します。一致した属性の・string-value・アクセサと、一致した属性の・base-uri・アクセサによって形成される対は、1つのRDF/XMLドキュメント内に1つしか存在しません。
この名前の構文は、rdf-id生成規則と一致しなければなりません。
テスト: test014.rdfとtest014.ntで示されています。
このドキュメントでは、RDF/XMLの構文を記号のアルファベットに基く文法であると明記しています。記号は、XPATHの情報セット・マッピングの形式ではイベントと呼ばれています。イベントのシーケンスは通常、XMLドキュメントから得られ、その場合、以下の6.2項 情報セット・マッピングで定義しているように、イベントはドキュメント順です。これらのイベントが形成するシーケンスは、同じXMLドキュメントの[SAX] XML APIによって作成されるイベントのシーケンスと同じようなものにすることを意図しています。イベントの順序を文法と照合すれば、構文的に整形式のRDF/XMLかどうかを判断できます。
文法の生成規則には、その生成規則が認識される際に起こす動作を含むことができます。これらの動作をもとに、構文的に整形式のRDF/XMLのイベントのシーケンスからN-トリプル[N-TRIPLES]言語で表現されたRDFグラフへの変換が定義されます。
ここで示したモデルは、RDF/XMLドキュメントからRDFグラフの表現を作成する1つの方法を例示しています。実装方法を強いるものではありません — 他の方法で同じRDFグラフの表現を作成してもかまいません。
特に、
構文は、非整形のXMLドキュメントも、XML情報セットを持っていないドキュメントもサポートしていません。例えば、XMLの名前空間[XML-NAMES]に準拠していないドキュメントをサポートしていません。
Infosetには、XMLベース[XMLBASE]に対するサポートが必要です。RDF/XMLでは、5.3項で論じた情報項目のプロパティー[base URI]を使用します。
この仕様には、少なくとも以下の情報項目とRDF/XMLのプロパティーをサポートするXML情報セット[XML-INFOSET]が必要です。
以下の項目のデータ・モデルイ・ベントへのマッピングは存在していません。
他の情報項目とプロパティーには、構文データ・モデル・イベントへのマッピングがありません。
予約済みのXML名(XML 1.0の名前を参照)を持つ要素情報の項目は、データ・モデル要素イベントにマッピングされません。これは、xml
(大文字と小文字を区別しない比較)で始まるプロパティー[prefix]を持つものすべてであり、値を持たない[prefix]プロパティーを持つもので、xml
(大文字と小文字を区別しない比較)で始まる[local name]を持つものすべてです。
parseTypeLiteralPropertyElt生成規則と一致するXML要素内に含まているすべての情報項目はXMLリテラルを形成し、このマッピングに従いません。詳細に関しては、parseTypeLiteralPropertyEltを参照してください。
この項は、[XML-INFOSET]仕様の適合性の要件を満たすことを目的としています。ここでは、この仕様を実装するために必要な情報項目とプロパティーを明記しています。
以下の小項目では、9種類のイベントを定義しています。ほとんどのイベントがInfoset情報項目(IRI、空白ノード、プレーン・リテラル、型付きリテラルを除く)で構成されています。イベント・コンストラクタには、すべての他のイベントと異なる、固有のアイデンティティを持つ新しいイベントを作成するという効果があります。イベントにはアクセサの操作が備わっており、大部分は、静的な値か算出された文字列値(string-value)のアクセサを持っています。
ドキュメント情報項目から構築され、以下のアクセサと値をとります。
要素情報項目から構築され、以下のアクセサと値をとります。
1組の属性情報項目である要素情報項目プロパティー[attributes]の値から作成。
この集合が属性情報項目xml:lang(値「http://www.w3.org/XML/1998/namespace」を持つ[namespace name]プロパティーと[local name]プロパティーの値「lang」)を含んでいる場合、これは属性情報項目の集合から削除され、・language・アクセサが属性情報項目の[normalized-value]プロパティーに設定されます。
残りすべての予約されたXML名(XML 1.0の名前を参照)は現在、この集合から削除されています。これは、xml
(大文字と小文字を区別しない比較)で始まるプロパティー[prefix]を持つ集合のすべての属性情報項目であり、値を持たない[prefix]プロパティーを持つすべての属性情報項目で、xml
(大文字と小文字を区別しない比較)で始まる[local name]を持つものは削除されています。[base URI]アクセサは、xml:base
属性情報項目が削除される前にXMLベースで計算されることに注意してください。
その後、属性情報項目の残りの集合は、このアクセサの値として割り当てられた属性イベントの新しい集合を構築するために使用されます。
値は、「<」、・URI・アクセサのエスケープされた値、「>」を、この順序で連結したものです。
・URI・アクセサのエスケープは、IRIにN-トリプル・エスケープ[[N_TRIPLES]]を使用します。
アクセサがありません。その順序の包含要素の終了を示します。
属性情報項目から構築され、以下のアクセサと値をとります。
・namespace-name・が存在する場合、・namespace-name・アクセサの値と、・local-name・アクセサの値を連結した文字列値に設定します。そうでない場合には、・local-name・が、ID
やabout
、resource
、parseType
、type
である場合、・RDF namespace IRI・と・・local-name・アクセサの値を結合した文字列値に設定します。他の非名前空間・local-name・アクセサ値は禁じられています。
限られた集合の非名前空間名のサポートが必要で(REQUIRED)、[RDFMS]で指定されているRDF/XMLドキュメントが有効なままでありえるようにすることを目的としています。つまり、新しいドキュメントはこれらの非修飾属性を使用べきではなく(SHOULD NOT)、アプリケーションは非修飾形式がドキュメントにある時に警告することを選択できます(MAY)。
XML属性のIRIの構築により、異なるXML属性の同じIRIを生成できます。これによって、属性イベントを一致させる際に、文法があいまいになる可能性があります(rdf:about
とabout
の両方のXML属性が存在しているときなどに)。これがあるドキュメントは、不正です。
値は、「<」、・URI・アクセサのエスケープされた値、・URI・アクセサ、「>」を、この順で連結させたものです。
一連の1つ以上の文字情報項目のシーケンスから構築されます。1つのアクセサを持っています。
以下のアクセサを持っているIRIのイベント。
値は、「<」、・identifier・アクセサのエスケープされた値、「>」を連結したものです。
・identifier・アクセサ値のエスケープは、IRIにN-トリプル・エスケープ[N-TRIPLES]を使用します。
これらのイベントは、・identifier・アクセサに値を与えることによって構築されます。
RDFグラフの識別子の詳細に関しては、5.2項を参照してください。
以下のアクセサを持っている空白ノード識別子のイベント。
これらのイベントは、・identifier・アクセサに値を与えることによって構築されます。
RDFグラフの識別子の詳細に関しては、5.2項を参照してください。
RDF 1.1では、RDF/XMLのプレーン・リテラルは、データ型xsd:string
を持つリテラルに対する糖衣構文として扱われるか(言語タグが存在しないとき)、データ型rdf:langString
を備えたリテラルとして扱われます(言語タグが存在するとき)。この小項目で定義しているN-トリプルへのマッピングには、この変更による影響はありません。
以下のアクセサを持つことができるプレーン・リテラルのイベント。
値は以下の他のアクセサから計算されます。
・literal-language・が空の文字列である場合、値は、「"」(1つのダブル引用符)、・literal-value・アクセサのエスケープされた値、「"」(1つのダブル引用符)を連結したものです。
そうでない場合には、値は、「"」(1つのダブル引用符)、・literal-value・アクセサのエスケープされた値、「"@」(1つのダブル引用符と「@」)、・literal-language・アクセサの値を連結したものです。
・literal-value・アクセサ値のエスケープは、[N-TRIPLES]で述べたように、"などの特定の文字をエスケープするために文字列にN-トリプル・エスケープ[N-TRIPLES]を使用します。
これらのイベントは、・literal-value・と・literal-language・のアクセサの値を与えることによって構築されます。
相互運用性注記(参考情報): Unicodeの結合文字で始まるリテラルは、相互運用性の問題を引き起こすかもしれませんが、許されています。詳細に関しては、[CHARMOD]を参照してください。
以下のアクセサを持つことができる型付きリテラルのイベント
値は、「"」(1つのダブル引用符)、・literal-value・アクセサのエスケープされた値、「"」(1つのダブル引用符)、「^^<」、・literal-datatype・アクセサのエスケープされた値、「>」をこの順序で連結したものです。
・literal-value・アクセサ値のエスケープは、"などの特定の文字をエスケープするために、文字列にN-トリプル・エスケープ[N-TRIPLES]を使用します。・literal-datatype・アクセサ値のエスケープは、IRIにN-トリプル・エスケープ[N-TRIPLES]を使用しなければなりません。
これらのイベントは、・literal-value・と・literal-datatype・のアクセサに値を与えることによって構築されます。
相互運用性注記(参考情報): Unicodeの結合文字で始まるリテラルは、相互運用性の問題を引き起こすかもしれませんが、許されています。詳細に関しては、[CHARMOD]を参照してください。
実装注記(参考情報): XMLスキーマ(パート1)[XMLSCHEMA-1]では、空白(white space)の正規化は、whiteSpace相(facet)の値による妥当性検証の間に起こります。このドキュメントで使用される構文マッピングはこの後に起こるため、whiteSpace相には形式的にはそれ以上の効果はありません。
Infosetをドキュメント順でイベントのシーケンスに変換するためには、各情報項目を上記で述べたように変換して、アクセサと値でイベントのツリー(tree)を生成します。その後に、以下で述べるように各要素イベントを置き換え、イベントのツリーをドキュメント順のシーケンスに変えます。
以下の表記法は、6項で示したようなデータ・モデル・イベントのシーケンスの一致と、この一致のために実行する動作を記述するために使用します。RDF/XML文法は、これらの一致したデータ・モデル・イベントからトリプルへのマッピングに関して、以下の形式の表記法を使用して定義されます。
number event-type event-content
action...
N-Triples
このとき、イベント・コンテンツは、イベント・タイプ(6.1項で定義されているように)に一致している表現で、以下の項で示された表記法を使用しています。数は参考のために使用しています。動作という文法には、N-トリプル[N-TRIPLES]形式で記述された、グラフに対する新しいトリプルの生成が含まれています。
以下の項では、使用している一般的な表記法と、イベントの一致とアクションの表記法について記述しています。
表記 | 意味 |
---|---|
event.accessor | イベント・アクセサの値。 |
rdf: X |
5.1項で定義されているようなURI。 |
"ABC" | A、B、Cの順の文字列。 |
表記 | 意味 |
---|---|
A == B | イベント・アクセサAは式Bに一致する。 |
A != B | AはBと等しくない。 |
A | B | ... | A、B、... 用語は択一的である。 |
A - B | Bのすべての用語を除いたAの用語。 |
anyURI. | 任意のURI。 |
anyString. | 任意の文字列。 |
list(item1, item2, ...); list() | イベントの順序付きリスト。空のリスト。 |
set(item1, item2, ...); set() | 順不同のイベントの集合。空の集合。 |
* | 0以上の先行する用語。 |
? | 0か1の先行する用語。 |
+ | 1以上の先行する用語。 |
root(acc1 == value1, acc2 == value2, ...) |
ルート・イベントをアクセサに一致。 |
start-element(acc1 == value1, acc2 == value2, ...) children end-element() |
要素イベントのシーケンスをアクセサに一致。恐らく、要素コンテンツと終了要素イベントとしてのイベントの空のリスト。 |
attribute(acc1 == value1, acc2 == value2, ...) |
属性イベントをアクセサに一致。 |
text() | テキスト・イベントに一致。 |
表記 | 意味 |
---|---|
A := B | Aを値Bに割り当てる。 |
concat(A, B, ..) | 用語を順番に連結することによって作成された文字列。 |
resolve(e, s) | 5.3項 URIの解決で定義されているように、文字列sを6.1.2 要素イベントeの・base-uri・アクセサに対する相対IRIとして解釈することで作成される文字列。その結果作成される文字列は、IRIを表現します。 |
generated-blank-node-id() | 5.2項 識別子で定義されているように、生成した新しい固有の空白ノード識別子の文字列値。 |
event.accessor := value | 与えられた値にイベント・アクセサを設定。 |
uri(identifier := value) | 新しいURI参照イベントを作成。 |
bnodeid(identifier := value) | 新しい空白ノード識別子イベントを作成。5.2 識別子の項も参照。 |
literal(literal-value := string, literal-language := language, ...) |
新しいプレーン・リテラル・イベントを作成。 |
typed-literal(literal-value := string, ...) | 新しい型付きリテラル・イベントを作成。 |
RDF/XMLが独立型のXMLドキュメント(application/rdf+xml RDF MIMEタイプオブジェクトとしての表現やその他の手段で識別される)である場合、文法は生成規則docや生成規則nodeElementで開始できます。
RDF/XMLが他のXMLコンテンツに組み込まれているときなどの、文脈によってコンテンツがRDF/XMLであると判明している場合には、要素イベント RDF(要素がその時点でXMLにおいて正当であるときにのみ)において、または、生成規則nodeElementList(これは要素のリストであるため、要素コンテンツが正当であるときにのみ)において文法を開始できます。このような組み込みRDF/XMLには、ルート・イベントは利用できないため、最外部要素の・base-uri・値を、包含するXMLから初期化しなければなりません。このような組み込みが行われた場合、文法を何度か入力できますが、状態は保存されそうにないということに注意してください。
rdf:RDF
| rdf:ID
| rdf:about
| rdf:parseType
| rdf:resource
| rdf:nodeID
| rdf:datatype
RDF/XMLで使用される5.1項のRDF語彙の構文用語のサブセット。
coreSyntaxTerms | rdf:Description
| rdf:li
RDF/XMLで使用される5.1項のRDF語彙のすべての構文用語。
rdf:aboutEach
| rdf:aboutEachPrefix
| rdf:bagID
これらは言語から抜き出したRDF語彙の名前です。詳細に関しては、問題rdfms-aboutEach-on-object、問題rdfms-abouteachprefix、最終草案問題timbl-01の解決を参照してください。
エラー・テスト: error001.rdfとerror002.rdfで示されています。
anyURI - ( coreSyntaxTerms | rdf:li
| oldTerms )
ノード要素で許されているIRI。
anyURI - ( coreSyntaxTerms | rdf:Description
| oldTerms )
プロパティー要素で許されているURI。
anyURI - ( coreSyntaxTerms | rdf:Description
| rdf:li
| oldTerms )
プロパティー属性で許されているIRI。
root(document-element == RDF,
children == list(RDF))
start-element(URI == rdf:RDF
,
attributes == set())
nodeElementList
end-element()
ws* (nodeElement ws* )*
start-element(URI == nodeElementURIs
attributes == set((idAttr | nodeIdAttr | aboutAttr )?, propertyAttr*))
propertyEltList
end-element()
ノード要素eに関しては、子イベントやその他の属性の処理などの他の作業の前に、いくつかの属性の処理を行わなければなりません。これらは、順不同で処理できます。
rdf:ID
を持つ属性aがある場合、e.subject := uri(identifier := resolve(e, concat("#", a.string-value)))です。rdf:nodeID
を持つ属性aがある場合、e.subject := bnodeid(identifier:=a.string-value)です。rdf:about
を持つ属性aがある場合、e.subject := uri(identifier := resolve(e, a.string-value))です。e.subjectが空である場合、e.subject := bnodeid(identifier := generated-blank-node-id())です。
次に、以下を順不同で実行できます。
rdf:Description
である場合、以下のステートメントがグラフに追加されます。
e.subject.string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> e.URI-string-value .
rdf:type
を持つpropertyAttrに属性aがある場合、 u:=uri(identifier:=resolve(e, a.string-value))であり、以下のトリプルがグラフに追加されます。
e.subject.string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> u.string-value .
rdf:type
ではなく)と一致する属性aに対し、Unicode文字列a.string-valueは正規形C[NFC]であるべきで(SHOULD)、o := literal(literal-value := a.string-value, literal-language := e.language)であり、以下のステートメントがグラフに追加されます。
ws* (propertyElt ws* ) *
要素eにe.URI = rdf:li
がある場合、7.4項の要素e.parentにリスト拡張規則を適用し、新しいURI uとe.URI := uを付与します。
サブマッチ(resourcePropertyElt ... emptyPropertyElt)のアクションの前に、この生成規則のアクションを行わなければなりません。そうでない場合は、すべてのサブマッチのうちの最初の動作として実行するなどように、その結果は、まるでこのアクションが最初に実行されたかのようでなければなりません。
start-element(URI == propertyElementURIs ),
attributes == set(idAttr?))
ws* nodeElement ws*
end-element()
要素e、および1つの包含されているnodeElement nに関して、最初に生成規則nodeElementを使用してnを処理しなければなりません。すると、以下のステートメントがグラフに追加されます。
e.parent.subject.string-value e.URI-string-value n.subject.string-value .
rdf:ID
属性aが与えられた場合、上記のステートメントは、7.3項の具体化規則とe.subject := iを使用して、i := uri(identifier := resolve(e, concat("#", a.string-value)))で具体化されます。
start-element(URI == propertyElementURIs ),
attributes == set(idAttr?, datatypeAttr?))
text()
end-element()
空のリテラルの事例が生成規則emptyPropertyEltで定義されることに注意してください。
要素e、およびテキスト・イベントtに関して。Unicodeの文字列t.string-valueは、正規形C[NFC]であるべきです(SHOULD)。rdf:datatype
属性dが与えられた場合、o := typed-literal(literal-value := t.string-value, literal-datatype := d.string-value)であり、そうでない場合は、o := literal(literal-value := t.string-value, literal-language := e.language)であり、以下のステートメントがグラフに追加されます。
e.parent.subject.string-value e.URI-string-value o.string-value .
rdf:ID
属性aが与えられた場合、上記のステートメントは、7.3項の具体化規則とe.subject := iを使用して、i := uri(identifier := resolve(e, concat("#", a.string-value)))で具体化されます。
この項は非規範的です。
start-element(URI == propertyElementURIs ),
attributes == set(idAttr?, parseLiteral))
literal
end-element()
要素eとrdf:parseType="Literal"
コンテンツであるリテラルlに関して。lは、構文データ・モデル・マッピングによってイベントに変換されずに(6 構文データ・モデルで述べたように)XML情報項目のXML Infosetのままです。
lは、以下のアルゴリズムによって、RDFグラフx(Unicodeの文字列)におけるXMLリテラルの字句形式に変換されます。これは、実装方法を強いません — 同じ結果が得られる他の方法を使用できます。
そうすれば、o := typed-literal(literal-value := x, literal-datatype := http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral
)であり、以下のステートメントがグラフに追加されます。
e.parent.subject.string-value e.URI-string-value o.string-value .
テスト: test009.rdfとtest009.ntで示されている空のリテラルの事例
rdf:ID
属性aが与えられた場合、上記のステートメントは、7.3項の具体化規則e.subject := iを使用して、i := uri(identifier := resolve(e, concat("#", a.string-value)))で具体化されます。
start-element(URI == propertyElementURIs ),
attributes == set(idAttr?, parseResource))
propertyEltList
end-element()
空である可能性のある要素コンテンツcを持つ要素eに関して。
n := bnodeid(identifier := generated-blank-node-id())です。
以下のステートメントがグラフに追加されます。
e.parent.subject.string-value e.URI-string-value n.string-value .
テスト: test004.rdfとtest004.ntで示されています。
rdf:ID
属性aが与えられた場合、上記のステートメントは、7.3項の具体化規則とe.subject := iを使用して、i := uri(identifier := resolve(e, concat("#", a.string-value)))で具体化されます。
要素コンテンツcが空でない場合、イベントnを使用して、以下のようなイベントの新しいシーケンスを作成します。
start-element(URI := rdf:Description
,
subject := n,
attributes := set())
c
end-element()
次に、生成規則nodeElementを使用して、結果として作成されたシーケンスを処理します。
start-element(URI == propertyElementURIs ),
attributes == set(idAttr?, parseCollection))
nodeElementList
end-element()
空である可能性のあるnodeElementList lを持つ要素イベントeに関して。s:=list()を設定。
lのそれぞれの要素イベントfに対し、n := bnodeid(identifier := generated-blank-node-id())であり、sにnを追加して、イベントのシーケンスを付与します。
sが空でない場合、nはsの最初のイベント識別子であり、以下のステートメントがグラフに追加されます。
e.parent.subject.string-value e.URI-string-value n.string-value .
そうでない場合は、以下のステートメントがグラフに追加されます。
e.parent.subject.string-value e.URI-string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
rdf:ID
属性aが与えられた場合、上記のステートメントのどちらかは、7.3項の具体化規則を使用して、i := uri(identifier := resolve(e, concat("#", a.string-value)))で具体化されます。
sが空である場合、さらなる作業は行われません。
sのそれぞれのイベントnと、lの対応する要素イベントfに対し、以下のステートメントがグラフに追加されます。
n.string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> f.string-value .
sのそれぞれの連続し重複している対のイベント(n, o)に対し、以下のステートメントがグラフに追加されます。
n.string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> o.string-value .
sが空でない場合、nがsの最後のイベント識別子で、以下のステートメントがグラフに追加されます。
n.string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> .
start-element(URI == propertyElementURIs ),
attributes == set(idAttr?, parseOther))
propertyEltList
end-element()
文字列「Resource」「Literal」「Collection」以外のすべてのrdf:parseType
属性値は、その値が「Literal」であるかのように扱われます。この生成規則は、生成規則parseTypeLiteralPropertyEltが一致したかのように一致し、動作します。他のrdf:parseType
値に対しては、余分なトリプルは作成されません。
start-element(URI == propertyElementURIs ),
attributes == set(idAttr?, ( resourceAttr | nodeIdAttr | datatypeAttr )?, propertyAttr*))
end-element()
属性がない場合、または、オプションのrdf:ID
属性iのみがある場合、o := literal(literal-value:="", literal-language := e.language)であり、以下のステートメントがグラフに追加されます。
e.parent.subject.string-value e.URI-string-value o.string-value .
そして、iが与えられた場合、上記のステートメントは、7.3項の具体化規則を使用して、uri(identifier := resolve(e, concat("#", i.string-value)))で具体化されます。
テスト: test002.rdfとtest002.ntで示されています。
テスト: test005.rdfとtest005.ntで示されています。
そうでない場合は、
rdf:resource
属性iがある場合、r := uri(identifier := resolve(e, i.string-value))です。rdf:nodeID
属性iがある場合、r := bnodeid(identifier := i.string-value)です。以下は順不同で行われます。
すべてのpropertyAttr属性aに関し(順不同)、
a.URI == rdf:type
である場合、u:=uri(identifier:=resolve(e, a.string-value))であり、以下のトリプルがグラフに追加されます。
r.string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> u.string-value .
そうでない場合は、Unicodeの文字列a.string-valueは、正規形C[NFC]であるべきで(SHOULD)、o := literal(literal-value := a.string-value, literal-language := e.language)であり、以下のステートメントがグラフに追加されます。
r.string-value a.URI-string-value o.string-value .
テスト: test013.rdfとtest013.ntで示されています。
テスト: test014.rdfとtest014.ntで示されています。
以下のステートメントをグラフに追加します。
e.parent.subject.string-value e.URI-string-value r.string-value .
そうすれば、rdf:ID
属性iが与えられる場合、上記のステートメントは、7.3項の具体化規則を使用して、uri(identifier := resolve(e, concat("#", i.string-value)))で具体化されます。
attribute(URI == rdf:ID
,
string-value == rdf-id)
制約:: constraint-idは、rdf:ID
属性の値に適用されます。
attribute(URI == rdf:nodeID
,
string-value == rdf-id)
attribute(URI == rdf:about
,
string-value == URI-reference)
attribute(URI == propertyAttributeURIs,
string-value == anyString)
attribute(URI == rdf:resource
,
string-value == URI-reference)
attribute(URI == rdf:datatype
,
string-value == URI-reference)
attribute(URI == rdf:parseType
,
string-value == "Literal")
attribute(URI == rdf:parseType
,
string-value == "Resource")
attribute(URI == rdf:parseType
,
string-value == "Collection")
attribute(URI == rdf:parseType
,
string-value == anyString - ("Resource" | "Literal" | "Collection") )
IRI。
3.1 開始タグ、終了タグ、および空要素タグの項のXML定義要素のコンテンツ(Content of Elements)規則[43]コンテンツに従って許されているXML要素コンテンツです。
結果として作成されるイベントに対する文字列値に関しては、7.2.17項で論じます。
正当な[XML-NAMES]トークンNCNameと一致する属性・string-value・です。
以下の、ある与えられたIRIイベントrと、N-トリプルに対応している用語s、p、oを持つステートメントに関して、
s p o .
グラフに以下のステートメントを加えます。
r.string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#subject> s .
r.string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate> p .
r.string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#object> o .
r.string-value <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement> .
与えられた要素eに対し、新しいIRI u := concat("http://www.w3.org/1999/02/22-rdf-syntax-ns#_", e.li-counter)を作成し、e.li-counterプロパティーを1つ増やし、uを返します。
[RDF11-CONCEPTS]で定義されているように、RDF/XMLでシリアル化できないいくつかのRDFグラフがあります。これらは、以下に該当するものです。
rdf:HTML
データ型を使用するもの。実装注記(参考情報): RDFがRDF/XMLにシリアル化されていて、XMLスキーマ・データ型(XSD)を持っているときには、空白の処理を必要としない形式で書かれているべきです(SHOULD)。XSDサポートは、RDFやRDF/XMLでは必須でない(NOT)ため、これはオプションです。
この項は非規範的です。
TRDF互換メタデータをSVG — Scalable Vector Graphics(SVG)1.0仕様[SVG10]の21項 メタデータとScalable Vector Graphics(SVG)1.1仕様[SVG11]の21項 メタデータで定義されているように、この目的のために明確に設計されたメタデータ要素 — に関連付ける標準化された方法があります。
このドキュメントには、このようなメタデータ要素内に組み込まれたRDF/XMLを持つSVGの2つのグラフの例が含まれています(図1と図2)。
この項は非規範的です。
Gavin Carothersは、生成規則parseTypeLiteralPropertyEltに関してRDF 1.1の更新を行いました。Ivan Hermanは、有益な指摘を行い、図1と図2を作り替えました。
この仕様は、RDFコア・ワーキンググループおよびRDFとRDFスキーマ・ワーキンググループのメンバーにより積み重ねられた議論の成果です。
以下の人々は、このドキュメントに有益な貢献をしてくださいました。
このドキュメントは、RDFコア・ワーキンググループによって積み重ねられた検討の成果です。そのメンバーは、Art Barstow (W3C)、Dave Beckett (ILRT)、Dan Brickley (W3C/ILRT)、Dan Connolly (W3C)、Jeremy Carroll (Hewlett Packard)、Ron Daniel (Interwoven Inc)、Bill dehOra (InterX)、Jos De Roo (AGFA)、Jan Grant (ILRT)、Graham Klyne (Clearswift and Nine by Nine)、Frank Manola (MITRE Corporation)、Brian McBride (Hewlett Packard)、Eric Miller (W3C)、Stephen Petschulat (IBM)、Patrick Stickler (Nokia)、Aaron Swartz (HWG)、Mike Dean (BBN Technologies / Verizon)、R. V. Guha (Alpiri Inc)、Pat Hayes (IHMC)、Sergey Melnik (Stanford University)、Martyn Horner (Profium Ltd)です。
また、この仕様は、Ora LassillaとRalph Swickの編集による以前のRDFモデルおよび構文ドキュメント、Dan BrickleyとR. V. Guhaの編集によるRDFスキーマを参考にしています。この以前の作業に貢献したRDFおよびRDFスキーマ・ワーキンググループのメンバーは、Nick Arnett (Verity)、Tim Berners-Lee (W3C)、Tim Bray (Textuality)、Dan Brickley (ILRT / University of Bristol)、Walter Chang (Adobe)、Sailesh Chutani (Oracle)、Dan Connolly (W3C)、Ron Daniel (DATAFUSION)、Charles Frankston (Microsoft)、Patrick Gannon (CommerceNet)、RV Guha (Epinions、以前はNetscape Communications)、Tom Hill (Apple Computer)、Arthur van Hoff (Marimba)、Renato Iannella (DSTC)、Sandeep Jain (Oracle)、Kevin Jones (InterMind)、Emiko Kezuka (Digital Vision Laboratories)、Joe Lapp (webMethods Inc.)、Ora Lassila (Nokia Research Center)、Andrew Layman (Microsoft)、Ralph LeVan (OCLC)、John McCarthy (Lawrence Berkeley National Laboratory)、Chris McConnell (Microsoft)、Murray Maloney (Grif)、Michael Mealling (Network Solutions)、Norbert Mikula (DataChannel)、Eric Miller (OCLC)、Jim Miller (W3C、emeritus)、Frank Olken (Lawrence Berkeley National Laboratory)、Jean Paoli (Microsoft)、Sri Raghavan (Digital/Compaq)、Lisa Rein (webMethods Inc.)、Paul Resnick (University of Michigan)、Bill Roberts (KnowledgeCite)、Tsuyoshi Sakata (Digital Vision Laboratories)、Bob Schloss (IBM)、Leon Shklar (Pencom Web Works)、David Singer (IBM)、Wei (William) Song (SISU)、Neel Sundaresan (IBM)、Ralph Swick (W3C)、Naohiko Uramoto (IBM)、Charles Wicksteed (Reuters Ltd.)、Misha Wolf (Reuters Ltd.)、Lauren Wood (SoftQuad)です。
この項は非規範的です。
RDF 1.1勧告に対する変更
RDF 1.1勧告編集案の変更
rdf:XMLLiteral
に関する項(2.8項と7.2.17項)を非規範であると示した。rdf:XMLLiteral
の非規範なステータスに対応するように生成規則parseTypeLiteralPropertyEltを適合させた。rdf:HTML
をRDF/XMLでシリアル化できないもののリストに追加した。nodeID
生成規則へのリンクを、RDF 1.1 N-トリプルBLANK_NODE_LABEL
生成規則に置き換えた。この項は非規範的です。
この付録には、RDF/XML形式の妥当性検証のためのXMLスキーマが含まれています。これらは、参考情報のみとしてのスキーマの例であり、この仕様の一部ではありません。
この項は非規範的です。
これは、RDF/XMLに対するRELAX NGコンパクトのスキーマの例(読みやすさのため)です。アプリケーションは、RELAX NG XMLバージョンを使用することもできます。これらの形式は、RELAX NG[RELAXNG]とRELAX NG Compact[RELAXNG-COMPACT]で記述されています。
文法の一致を試みるためにRNGCスキーマを更新しましたが、これは、確認したり、RDF/XMLの妥当性検証に使用したりしていません。
# # RELAX NG Compact Schema for RDF/XML Syntax # # This schema is for information only and NON-NORMATIVE # # It is based on one originally written by James Clark in # http://lists.w3.org/Archives/Public/www-rdf-comments/2001JulSep/0248.html # and updated with later changes. # namespace local = "" namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes" start = doc # I cannot seem to do this in RNGC so they are expanded in-line # coreSyntaxTerms = rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype # syntaxTerms = coreSyntaxTerms | rdf:Description | rdf:li # oldTerms = rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID # nodeElementURIs = * - ( coreSyntaxTerms | rdf:li | oldTerms ) # propertyElementURIs = * - ( coreSyntaxTerms | rdf:Description | oldTerms ) # propertyAttributeURIs = * - ( coreSyntaxTerms | rdf:Description | rdf:li | oldTerms ) # Also needed to allow rdf:li on all property element productions # since we can't capture the rdf:li rewriting to rdf_<n> in relaxng # Need to add these explicitly xmllang = attribute xml:lang { text } xmlbase = attribute xml:base { text } # and to forbid every other xml:* attribute, element doc = RDF | nodeElement RDF = element rdf:RDF { xmllang?, xmlbase?, nodeElementList } nodeElementList = nodeElement* # Should be something like: # ws* , ( nodeElement , ws* )* # but RELAXNG does this by default, ignoring whitespace separating tags. nodeElement = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:li | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID ) { (idAttr | nodeIdAttr | aboutAttr )?, xmllang?, xmlbase?, propertyAttr*, propertyEltList } # It is not possible to say "and not things # beginning with _ in the rdf: namespace" in RELAX NG. ws = " " # Not used in this RELAX NG schema; but should be any legal XML # whitespace defined by http://www.w3.org/TR/2000/REC-xml-20001006#NT-S propertyEltList = propertyElt* # Should be something like: # ws* , ( propertyElt , ws* )* # but RELAXNG does this by default, ignoring whitespace separating tags. propertyElt = resourcePropertyElt | literalPropertyElt | parseTypeLiteralPropertyElt | parseTypeResourcePropertyElt | parseTypeCollectionPropertyElt | parseTypeOtherPropertyElt | emptyPropertyElt resourcePropertyElt = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { idAttr?, xmllang?, xmlbase?, nodeElement } literalPropertyElt = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { idAttr? , datatypeAttr?, xmllang?, xmlbase?, text } parseTypeLiteralPropertyElt = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { idAttr?, parseLiteral, xmllang?, xmlbase?, literal } parseTypeResourcePropertyElt = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { idAttr?, parseResource, xmllang?, xmlbase?, propertyEltList } parseTypeCollectionPropertyElt = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { idAttr?, xmllang?, xmlbase?, parseCollection, nodeElementList } parseTypeOtherPropertyElt = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { idAttr?, xmllang?, xmlbase?, parseOther, any } emptyPropertyElt = element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { idAttr?, (resourceAttr | nodeIdAttr | datatypeAttr )?, xmllang?, xmlbase?, propertyAttr* } idAttr = attribute rdf:ID { IDsymbol } nodeIdAttr = attribute rdf:nodeID { IDsymbol } aboutAttr = attribute rdf:about { URI-reference } propertyAttr = attribute * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype | rdf:li | rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | xml:* ) { string } resourceAttr = attribute rdf:resource { URI-reference } datatypeAttr = attribute rdf:datatype { URI-reference } parseLiteral = attribute rdf:parseType { "Literal" } parseResource = attribute rdf:parseType { "Resource" } parseCollection = attribute rdf:parseType { "Collection" } parseOther = attribute rdf:parseType { text } URI-reference = string literal = any IDsymbol = xsd:NMTOKEN any = mixed { element * { attribute * { text }*, any }* }