ISO/IEC 13250-3:

情報技術 — トピックマップ —
Part 3:
XML 構文

目次

1 適用範囲
2 引用規格
3 用語及び定義
4   構文定義
4.1   構文について
4.2   直列化からの復元
4.3   共通の構文構成物
4.3.1   共通の宣言
4.3.2   reifier属性
4.3.3   href属性
4.3.4   文字列からのIRIの作成
4.4   topicMap要素
4.5   topic要素
4.6   itemIdentity要素
4.7   subjectLocator要素
4.8   subjectIdentifier要素
4.9   instanceOf要素
4.10   name要素
4.11   value要素
4.12   variant要素
4.13   scope要素
4.14   type要素
4.15   occurrence要素
4.16   resourceData要素
4.16.1   一般事項
4.16.2   直列化からの復元
4.16.3   埋込みXMLの正準化
4.17   resourceRef要素
4.18   association要素
4.19   role要素
4.20   topicRef要素
4.21   mergeMap要素
5   適合性
A   付録 A(規定)XTM 2.0のためのRELAX-NGスキーマ
B   付録 B(参考)XTM 2.0 DTD
C   付録 C(参考)XTM 2.0のためのW3C XMLスキーマ
D   付録 D(参考)XTM 1.0との違い
E   付録 E(参考)定義された用語の主題識別子

導入

XTM(XMLトピックマップ)2.0は、トピックマップの交換のための構文である。構文は、拡張又は改変のために設計されていない。人手による編集の容易さは、XTMの設計では優先されない。したがって、直接に構文を編集することは推奨しない。

XTM構文の解釈は、構文からデータモデルへの対応付けを通して定義されるので、この規格は、ISO/IEC 13250-2 データモデルとの関連において読まれなければならない。データモデルのインスタンスをXTM構文に直列化する方法も提供される。

XTM 2.0は、[ISO/IEC 13250:2003] 及び [XTM1.0]で規定する XTM 1.0 構文の改訂である。二つの版の違いは、付録 Dで示す。

トピックマップ — XML 構文

1 有効範囲

この規格は、トピックマップのためのXMLに基づく交換構文について定義する。交換構文は、[ISO/IEC 13250-2]で定義するデータモデルのインスタンスの交換に用いることができる。この規格は、交換構文からデータモデルへの対応付けも定義する。構文はRELAX-NGスキーマによって定義され、データモデルへの対応付けによって、より精密に定義される。それは、事実上、構文の解釈も定義する。

2 引用規格

下記の引用文書は、この規格の適用に不可欠である。 これらの引用文書のうちで、西暦年を付記してあるものは、記載の年の版を適用し、その後の改正版(追補を含む。)には適用しない。西暦年の付記がない引用文書は、その最新版(追補を含む。)を適用する。

注記

下記のそれぞれの文書は、文の中において文書を引用するのに使用される一意の識別子をもつ。一意な識別子は、最初のコンマまでの部分で構成されている。

ISO/IEC 13250-2, Information technology — Topic Maps — Data Model,

W3C XML, Extensible Markup Language (XML) 1.0 (Third Edition), W3C Recommendation, 4 February 2004, available at http://www.w3.org/TR/2004/REC-xml-20040204

W3C XML-Names, Namespaces in XML, W3C Recommendation, 14 January 1999, available at http://www.w3.org/TR/1999/REC-xml-names-19990114/

W3C XPointer, XPointer Framework Version 1.0, W3C Recommendation, 25 March 2003, available at http://www.w3.org/TR/2003/REC-xptr-framework-20030325/

W3C XML-Infoset, XML Information Set (Second Edition), W3C Recommendation, 4 February 2004, available at http://www.w3.org/TR/2004/REC-xml-infoset-20040204

W3C Canonical XML, Canonical XML Version 1.0, W3C Recommendation, 15 March 2001, available at http://www.w3.org/TR/2001/REC-xml-c14n-20010315

ISO/IEC 19757-2, Information technology — Document Schema Definition Languages (DSDL) — Part 2: Regular-grammar-based validation — RELAX NG, available at http://www.relaxng.org

IETF RFC 3986, Uniform Resource Identifiers (URI): Generic Syntax, Internet Standards Track Specification, January 2005, available at http://www.ietf.org/rfc/rfc3986.txt

IETF RFC 3987, Internationalized Resource Identifiers (IRIs), Internet Standards Track Specification, January 2005, available at http://www.ietf.org/rfc/rfc3987.txt

3 用語及び定義

この規格のために、下記の用語及び定義を適用する。

3.1
XTM

この規格で定める構文。

4 構文定義

4.1 構文について

頭字語 XTM は、しばしば、この規格で規定する構文を指すのに用いられる。その完全な名称は、XMLトピックマップ(XML Topic Maps)である。XTM構文のための名前空間は、http://www.topicmaps.org/xtm/ である。

XTM文書は、XTM構文に適合するXML文書である。この箇条は、簡潔構文([ISO/IEC 19757-2])のRELAX-NGスキーマを用いXTM文書の構文を定義する。XTM文書から[ISO/IEC 13250-2]への対応付けを示す文を用いて意味を定義する。完全なスキーマは、付録A付録B のDTD、及び、付録Cの W3C XMLスキーマ で見ることができる。

4.2 直列化からの復元

実装におけるデータモデルの内部表現からトピックマップ構文のインスタンスへとトピックマップを移出するプロセスは、直列化として知られている。逆のプロセス(直列化からの復元)は、実装におけるデータモデルの内部表現のインスタンスを、トピックマップ構文のインスタンスから作り上げるプロセスである。

この箇条は、XTM構文のインスタンスが、どのようにJIS [ISO/IEC 13250-2] で規定するデータモデルのインスタンスへと、直列化から復元されるかについて規定する。直列化は、暗黙的にだけ規定する。しかし、直列化の実装は、あらゆるデータモデルインスタンスに対して、次を保証するのがよい。すなわち、その実装は、それによって生産されたXTM構文のインスタンスが、新しいデータモデルインスタンスに復元されたとき、その正準化が、[ISO/IEC 13250-4] に従って、元のデータモデルインスタンスの正準化と同じになることを保証するのがよい。

直列化からの復元プロセスへの入力は、以下のとおりである。

直列化からの復元は、文書情報項目の中の各々の要素情報項目を文書の順に処理することによってなされる。出会った個々の要素情報項目に対して、その要素型に対する箇条で規定している操作が実行される。入力要素情報項目は、[[namespace uri]]特性が"http://www.topicmaps.org/xtm/"に設定され、[[local name]]特性が箇条の標題で与えられる要素型名に合致するとき、この規格の箇条に合致する。

新しい情報項目が作成される場合はいつでも、その情報項目の特性のうち集合値をもつものは空集合に初期化される。他のすべての特性は、nullに初期化される。

注記

この規格は直列化からの復元プロセスへの入力としてXML情報集合のインスタンスを要求する。しかし、ほとんどの場合、実際の入力はXML文書になる。この規格は、XML文書からXML情報集合のインスタンスを作成する方法は制約しない。多くの場合、これは単にXMLプロセサの利用によって行われると仮定する。

XML勧告に適合するXMLプロセサでも、同じXML文書に対して、妥当性を検証するかしないか、及びどの任意選択機能に対応しているかに依存して、異なる結果を出力する可能性がある。受け取り側が用いるXMLプロセサの特別な振る舞いに依存することは、けっして推奨しない。

4.3 共通の構文構成物

4.3.1 共通の宣言

記述を簡潔にするため、下記の宣言をスキーマ全体を通じ使用する。

default namespace = "http://www.topicmaps.org/xtm/"
namespace xtm = "http://www.topicmaps.org/xtm/"

datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"

start = topicMap

reifiable = attribute reifier { xsd:anyURI }?, itemIdentity*
href = attribute href { xsd:anyURI }

any-markup = (text | element * - xtm:* { attribute * { text }*, any-markup* })*

4.3.2 reifier属性

reifier 属性は、それが現れるトピックマップ構成物から、その構成物を具体化するトピックを参照するために用いられる。参照は、トピックの項目識別子のうちの一つに合致するIRIである。

直列化からの復元において、reifier 属性を表している属性ノードの[[normalized value]]特性の値は、4.3.4 の手順に従い絶対形式のIRIに変換される。そのIRIを[item identifiers]特性にもつトピック情報項目がある場合、そのトピック情報項目は、処理中のトピックマップ構成物の[reifier]特性の値として設定される。そのようなトピック情報項目が存在しない場合、新しいトピック情報項目が作成され、そのIRIがその[item identifiers]特性に追加され、そのトピック情報項目は、処理中のトピックマップ構成物の[reifier]特性の値として設定される。

4.3.3 href属性

href 属性は、常に、[IETF RFC 3986] 及び [IETF RFC 3987] に準じた正当な相対形式又は絶対形式のIRIを用い、情報資源を参照する。しかし、その参照の意味は、文脈に依存する。

直列化からの復元において、href 属性を表す属性ノードの[[normalized value]]特性の値は、4.3.4 の手順に従いIRIに変換される。

4.3.4 文字列からのIRIの作成

文字列からIRIを生成するために、文字列中の %HH エスケープシーケンスをそれが表す文字へと置換し、その結果の文字の連続をUTF-8から抽象Unicode文字へと復号する。結果として生じる文字列は、文書IRIに対してそれを解決することによって、絶対形式のIRIに変換される。

4.4 topicMap要素

topicMap 要素型は、すべてのXTM文書の文書要素である。トピックマップの入れ物の役割を果たし、具体化することができる。しかし、それ以上の意味をもたない。 宣言は、下記のとおりである。

topicMap = element topicMap { reifiable, version, mergeMap*,
                   (topic | association)* }

version = attribute version { "2.0" }

版(version)属性は、XTM文書がXTMのどの版(version)に適合するかについて指定するために用いる。XTM2.0文書の場合、これは“2.0”でなければならない。

直列化からの復元において、topicMap 要素からトピックマップ情報項目が作成される。

4.5 topic要素

topic 要素型は、トピックを表すのに用いられ、トピック情報の入れ物及び参照点の役割を果たす。topic 要素の子要素は、名前及び出現と同様に識別性を提供する。一方、そのトピックが果たす関連役割は、topic 要素の外側で指定される。

topic 要素型の宣言は、下記のとおりである。

topic = element topic { id,
                        (itemIdentity | subjectLocator | subjectIdentifier)*,
                        instanceOf?, (name | occurrence)* }

id = attribute id { xsd:ID }

id 属性は、トピックのために文書内で一意な識別子を提供する。それは、そのトピックを参照するために用いられる。

直列化からの復元において、topic 要素からトピック情報項目が作成され、トピックマップ情報項目の[topics]特性に追加される。

ロケータは、文書IRI、文字 "#" 及び [[normalized value]]特性の値を連結することによって作成される。この[[normalized value]]特性は、[[local name]]特性が "id" である要素情報項目の[[attributes]]特性の中の属性情報項目の[[normalized value]]特性である。このロケータは、トピック情報項目の[item identifiers]特性に追加される。これが他のトピック情報項目と同じトピック情報項目を生成する場合、二つのトピック情報項目は、[ISO/IEC 13250-2] に規定される手順に従い併合される。

4.6 itemIdentity要素

itemIdentity 要素は、項目識別子を、その親要素が表すトピックマップ構成物に割り当てるのに用いられる。 宣言は、下記のとおりである。

itemIdentity = element itemIdentity { href }

直列化からの復元において、4.3.3 で規定されるとおり、itemIdentity 要素の href 属性からロケータが生成される。このロケータは、親要素から生成される情報項目の[item identifiers]特性に追加される。親要素が topic 要素であって、これが他のトピック情報項目と同じトピック情報項目を生成する場合、二つのトピック情報項目は、[ISO/IEC 13250-2] に規定される手順に従い併合される。

4.7 subjectLocator要素

subjectLocator 要素は、主題ロケータをその親 topic 要素が表すトピックに割り当てるために用いられる。 宣言は、下記のとおりである。

subjectLocator = element subjectLocator { href }

直列化からの復元において、4.3.3 で規定されるとおり、subjectLocator 要素の href 属性からロケータが生成される。このロケータは、親 topic 要素から生成されるトピック情報項目の[subject locators]特性に追加される。これが他のトピック情報項目と同じトピック情報項目を生成する場合、二つのトピック情報項目は、[ISO/IEC 13250-2] に規定される手順に従い併合される。

4.8 subjectIdentifier要素

subjectIdentifier 要素は、主題識別子をその親 topic 要素が表すトピックに割り当てるために用いられる。

subjectIdentifier 要素の宣言は、下記のとおりである。

subjectIdentifier = element subjectIdentifier { href }

直列化からの復元において、4.3.3 で規定されるとおり、subjectIdentifier 要素の href 属性からロケータが生成される。このロケータは、親 topic 要素から生成されるトピック情報項目の[subject identifiers]特性に追加される。これが他のトピック情報項目と同じトピック情報項目を生成する場合、二つのトピック情報項目は、[ISO/IEC 13250-2] に規定される手順に従い併合される。

4.9 instanceOf要素

instanceOf 要素型は、一つ以上の型を、その親要素によって表されるトピックに割り当てるために用いられる。型は、常にトピックであって、instanceOf 要素の子要素によって示される。 instanceOf 要素型の宣言は、下記のとおりである。

instanceOf = element instanceOf { topicRef+ }

instanceOf 要素の個々の子要素に対し、トピック情報項目が 4.20 の手順に従って作成される。その後、個々のトピック情報項目のために、下記の処置がとられる。

4.10 name要素

name 要素型は、トピック名を、親 topic 要素で表されるトピックに与えるために用いられる。name 要素の子要素は、トピック名情報項目の特性値を与える。

name 要素型の宣言は、下記のとおりである。

name = element name { reifiable, type?, scope?, value, variant* }

直列化からの復元において、name 要素からトピック名情報項目が生成され、親 topic 要素から生成されるトピック情報項目の[topic names]特性に追加される。

name 要素が type 子要素をもっている場合は、4.14 の手順に従って処理される。そうでない場合は、トピック名情報項目の[type]特性には、その[subject identifiers]特性に、"http://psi.topicmaps.org/iso13250/model/topic-name" を含むトピック情報項目が設定される。そのようなトピック情報項目が存在しない場合、トピック情報項目が生成される。

4.11 value要素

value 要素型は、トピック名の値を与えるために用いられる。 宣言は、下記のとおりである。

value = element value { text }

直列化からの復元において、 value 要素の[[children]]特性の中の情報項目が、詳しく検討される。そして、個々の文字情報項目に対して、[[character code]]特性によって指定されるUnicode文字が、親 name 要素によって生成されるトピック名情報項目の[value]特性に追加される。

4.12 variant要素

variant 要素型は、異形名をトピック名に追加するために用いられる。 宣言は、下記のとおりである。

variant = element variant { reifiable, scope, (resourceRef | resourceData) }

直列化からの復元において、variant 要素から異形情報項目が生成され、name 親要素によって生成されるトピック名情報項目の[variants]特性に追加される。scope 子要素が処理された後、name 親要素によって生成されるトピック名情報項目の[scope]特性の中のトピックが、異形名情報項目の[scope]特性に追加される。

4.13 scope要素

scope 要素型は、親要素によって表されるステートメントに有効範囲を割り当てるために用いられる。 宣言は、下記のとおりである。

scope = element scope { topicRef+ }

直列化からの復元において、scope 要素は作成される情報集合に直接に影響しないが、その子要素の解釈を変える。個々の topicRef 子要素は、トピック情報項目を作成するための 4.20 の手順に従い処理される。これらのトピック情報項目は、親要素によって作成される情報項目の[scope]特性の値として割り当てられる集合に寄せ集められる。

4.14 type要素

type 要素型は、その親要素によって表されるトピックマップ構成物に型を割り当てるために用いられる。型は常にトピックであって、type 要素の子要素によって示される。

type 要素型の宣言は、下記のとおりである。

type = element type { topicRef }

直列化からの復元において、子要素は 4.20 の規定に従いトピック情報項目を作成する。それは、親要素によって作成される情報項目の[type]特性の値として設定される。

4.15 occurrence要素

occurrence 要素型は、親要素によって定義されるトピックに出現を割り当てるために用いられる。 宣言は、下記のとおりである。

occurrence = element occurrence { reifiable,
   type, scope?, ( resourceRef | resourceData ) }

直列化からの復元において、occurrence 要素から出現情報項目が生成され、親 topic 要素によって生成されるトピック情報項目の[occurrence]特性に追加される。

4.16 resourceData要素

4.16.1 一般事項

resourceData 要素型は、XTM文書に含まれる内容の形で、情報資源を表す。この情報資源は、異形名又は出現のどちらかであって、データ型をもつことができる。

resourceData 要素型の宣言は、下記のとおりである。

datatype = attribute datatype { xsd:anyURI }

resourceData = element resourceData { datatype?, any-markup }

datatype 属性は、resourceData 要素によって表される資源のデータ型を識別する絶対形式のIRIを含む。

4.16.2 直列化からの復元

resourceData 要素は、親要素によって生成される情報項目の[value]特性を設定する。datatype 属性が存在しない場合、"http://www.w3.org/2001/XMLSchema#string" が[datatype]特性に設定される。datatype 属性が存在する場合、[datatype]特性には、その属性の値が設定される。

[datatype]特性に、"http://www.w3.org/2001/XMLSchema#anyType" が設定される場合、4.16.3 の手順をその次に続けて行う。

[datatype]特性に、"http://www.w3.org/2001/XMLSchema#anyURI" が設定される場合、resourceData 要素の内容から[value]特性の値を作成するために、4.3.4 の中の手順をその次に続けて行う。この場合、resourceData 要素が子要素をもつことは誤りである。

そうでない場合、その要素項目の[[children]]特性にある情報項目が、詳しく検討される。そして、個々の文字情報項目に対して、[[character code]]特性によって指定されるUnicode文字が、親要素から生成される情報項目の[value]特性に追加される。この場合、resourceData 要素が子要素をもつことは、誤りである。

4.16.3 埋込みXMLの正準化

XTM文書は、resourceData 要素の中に任意のマークアップを含んでもよい。このマークアップは、データモデルでは文字列として表される。文字列表現は、[W3C Canonical XML] に示される正準化プロセスの適用によって、埋込みのマークアップから作成される。正準化プロセスへの入力は、(これを要求する [W3C Canonical XML] と同じく)XPathノード集合である。ノード集合は、下記のとおりに作成される。

正準化プロセスへ渡す二つ目のパラメタは、誤りである。すなわち、コメントは含まれない。

注記

[W3C Canonical XML] の出力はUTF-8符号化されたオクテット列と定められているが、ここで定めるプロセスの出力は、それと等価な文字列であることが望ましい。

4.17 resourceRef要素

resourceRef 要素型は、情報資源を参照する。情報資源は、親要素がoccurrence 要素の場合は出現となり、親要素がvariant 要素の場合は異形名となる。

resourceRef 要素型の宣言は、下記のとおりである。

resourceRef = element resourceRef { href }

直列化からの復元において、4.3.3 の手順に従いresourceRef 要素からロケータが作成され、親要素によって生成される情報項目の[value]特性に挿入される。情報項目の[datatype]特性にも、"http://www.w3.org/2001/XMLSchema#anyURI" が設定される。

4.18 association要素

association 要素型は、関連を表す。role 子要素は、関連の関連役割を与える。宣言は、下記のとおりである。

association = element association { reifiable, type, scope?, role+ }

直列化からの復元において、association 要素から関連情報項目が生成され、トピックマップ情報項目の[associations]特性に追加される。

4.19 role要素

role 要素型は、association 親要素によって生成される関連に関連役割を割り当てるために用いられる。宣言は、下記のとおりである。

role = element role { reifiable, type, topicRef }

直列化からの復元において、role 要素から関連役割情報項目が生成され、親association 要素から生成される関連情報項目の[roles]特性に追加される。topicRef 子要素は、4.20 の手順に従いトピックに帰着する。そのトピックは、関連役割情報項目の[player]特性の値として設定される。

4.20 topicRef要素

topicRef 要素型は、同じXML文書内又は外部のトピックを参照する。トピック参照の意味は、文脈に依存する。要素型の宣言は、下記のとおりである。

topicRef = element topicRef { href }

href 属性は、トピック参照である絶対形式又は相対形式のIRI参照を含む。このIRI参照は、[W3C XPointer] が省略表現指示子(以前は無装飾名)と呼ぶフラグメント識別子をもたなければならない。

直列化からの復元において、4.3.3 の規定に従いtopicRef 要素からロケータが作成される。データモデルが[subject identifiers]特性又は[item identifiers]特性が等しいロケータを含むトピック情報項目をもつ場合は、そのトピック情報項目は、このtopicRef 要素によって作成されたものである。そのようなトピック情報項目が存在しない場合、トピック情報項目が生成され、その[item identifiers]特性にロケータが追加される。そのトピック情報項目は、このtopicRef 要素によって作成されたものになる。

4.21 mergeMap要素

mergeMap 要素型は、mergeMap 要素を含むトピックマップに併合される外部XTM文書を参照する。宣言は、下記のとおりである。

mergeMap = element mergeMap { href }

href 属性は、併合されるXTM文書を参照している絶対形式又は相対形式のIRIを含む。IRIは、フラグメント識別子を含んではならない。

直列化からの復元において、絶対形式のIRIが、4.3.3 の手順に従い mergeMap 要素の href 属性から作成される。外部情報資源のIRIは解決され、その資源は、[W3C XML-Infoset] に従ったXML情報集合を作成するために、[W3C XML] に従ってXMLプロセサによって解析される。資源が整形式XML文書でない場合は、誤りである。XML情報集合は、入力としての文書項目と情報資源のIRIとを伴って、箇条4 の手順に従い、データモデルインスタンスへと、直列化から復元される。

新しいデータモデルインスタンス(これをBとする。)は、下記によって、現データモデル(これをAとする。)に併合される。

注記

[ISO/IEC 13250-2] に示されているとおり、A へのトピックと関連の追加が、更なる併合を引き起こす可能性がある。

5 適合性

XTM文書は、下記の条件に従う場合、この規格に適合する。

下記のすべての要件を満たす場合、XTMプロセサはこの規格に適合する。

付録 A(規定)XTM 2.0のためのRELAX-NGスキーマ

# ===========================================================================
#
# XML Topic Maps 2.0
#
# This is the normative RELAX-NG schema for the XTM 2.0 syntax, as
# defined in ISO 13250-3.
#
#
#
# ===========================================================================

# --- Common declarations

default namespace = "http://www.topicmaps.org/xtm/"
namespace xtm = "http://www.topicmaps.org/xtm/"

datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"

start = topicMap

reifiable = attribute reifier { xsd:anyURI }?, itemIdentity*
href = attribute href { xsd:anyURI }

any-markup = (text | element * - xtm:* { attribute * { text }*, any-markup* })*


# --- The schema

topicMap = element topicMap { reifiable, version, mergeMap*,
                              (topic | association)* }

version = attribute version { "2.0" }

topic = element topic { id, 
                        (itemIdentity | subjectLocator | subjectIdentifier)*,
                        instanceOf?, (name | occurrence)* }
id = attribute id { xsd:ID }

name = element name { reifiable, type?, scope?, value, variant* }

value = element value { text }

variant = element variant { reifiable, scope, (resourceRef | resourceData) }

scope = element scope { topicRef+ }

instanceOf = element instanceOf { topicRef+ }

type = element type { topicRef }

occurrence = element occurrence { reifiable,
  type, scope?, ( resourceRef | resourceData ) }

datatype = attribute datatype { xsd:anyURI }

resourceData = element resourceData { datatype?, any-markup }

association = element association { reifiable, type, scope?, role+ }

role = element role { reifiable, type, topicRef }

topicRef = element topicRef { href }
resourceRef = element resourceRef { href }
subjectLocator = element subjectLocator { href }
subjectIdentifier = element subjectIdentifier { href }
itemIdentity = element itemIdentity { href }

mergeMap = element mergeMap { href }

# --- End of schema

付録 B(参考)XTM 2.0 DTD

<!-- ............................................................. -->
<!-- XML Topic Map DTD  .......................................... -->

<!-- XML Topic Map (XTM) DTD, Version 2.0

     This is XTM 2.0, an XML interchange syntax for ISO 13250 Topic
     Maps, defined by ISO 13250-3.

     Use this URI to identify the XTM namespace:

         "http://www.topicmaps.org/xtm/"

     The formal public identifier for this DTD is:
         
         "ISO/IEC 13250-3:2007//DTD XML Topic Maps (XTM) 2.0//EN"


-->

<!-- topicMap .................................................... -->

<!ELEMENT topicMap
   ( itemIdentity*, mergeMap*, ( topic | association )* )
>
<!ATTLIST topicMap
   version         CDATA     #FIXED '2.0'
   xmlns           CDATA     #FIXED 'http://www.topicmaps.org/xtm/'
   reifier         CDATA     #IMPLIED
>

<!-- topic ....................................................... -->

<!ELEMENT topic
   ( ( itemIdentity | subjectLocator | subjectIdentifier )*,
     instanceOf?, ( name | occurrence )* )
>
<!ATTLIST topic
   id              ID        #REQUIRED
>

<!-- itemIdentity ................................................ -->

<!ELEMENT itemIdentity
   EMPTY
>
<!ATTLIST itemIdentity
   href            CDATA     #REQUIRED
>

<!-- subjectLocator............................................... -->

<!ELEMENT subjectLocator
   EMPTY
>
<!ATTLIST subjectLocator
   href            CDATA     #REQUIRED
>

<!-- subjectIdentifier............................................ -->

<!ELEMENT subjectIdentifier
   EMPTY
>
<!ATTLIST subjectIdentifier
   href            CDATA     #REQUIRED
>

<!-- name ........................................................ -->

<!ELEMENT name  
   ( itemIdentity*, type?, scope?, value, variant* ) 
>
<!ATTLIST name
   reifier         CDATA     #IMPLIED
>

<!-- value ....................................................... -->

<!ELEMENT value  ( #PCDATA ) >

<!-- variant ..................................................... -->

<!ELEMENT variant  
   ( itemIdentity*, scope, ( resourceRef | resourceData ) ) 
>
<!ATTLIST variant
   reifier         CDATA     #IMPLIED
>

<!-- scope ....................................................... -->

<!ELEMENT scope  
   ( topicRef )+ 
>

<!-- instanceOf .................................................. -->

<!ELEMENT instanceOf  
   ( topicRef )+
>

<!-- type .................................................. -->

<!ELEMENT type  
   ( topicRef )
>

<!-- occurrence .................................................. -->

<!ELEMENT occurrence
   ( itemIdentity*, type, scope?, ( resourceRef | resourceData ) )
>
<!ATTLIST occurrence
   reifier         CDATA     #IMPLIED
>

<!-- resourceData ................................................ -->

<!ELEMENT resourceData  
   ANY 
>
<!ATTLIST resourceData
   datatype        CDATA     #IMPLIED
>

<!-- resourceRef ................................................. -->

<!ELEMENT resourceRef  
   EMPTY 
>
<!ATTLIST resourceRef
   href            CDATA     #REQUIRED
>

<!-- association ................................................. -->

<!ELEMENT association
   ( itemIdentity*, type, scope?, role+ )
>
<!ATTLIST association
   reifier         CDATA     #IMPLIED
>

<!-- role ........................................................ -->

<!ELEMENT role
   ( itemIdentity*, type, topicRef )
>
<!ATTLIST role
   reifier         CDATA     #IMPLIED
>

<!-- topicRef .................................................... -->

<!ELEMENT topicRef  
   EMPTY 
>
<!ATTLIST topicRef
   href            CDATA     #REQUIRED
>

<!-- mergeMap .................................................... -->

<!ELEMENT mergeMap  
   EMPTY
>
<!ATTLIST mergeMap
   href            CDATA     #REQUIRED
>

<!-- end of XML Topic Map (XTM) 2.0 DTD .......................... -->

付録 C(参考)XTM 2.0のためのW3C XMLスキーマ

<!-- ............................................................. -->
<!-- XML Topic Map Schema  ....................................... -->

<!-- XML Topic Map (XTM) Schema, Version 2.0

     This is XTM 2.0, an XML interchange syntax for ISO 13250 Topic
     Maps, defined by ISO 13250-3.

     See http://www.isotopicmaps.org/sam/sam-xtm/

-->
<xs:schema targetNamespace="http://www.topicmaps.org/xtm/" 
	   elementFormDefault="qualified" 
	   xmlns="http://www.topicmaps.org/xtm/" 
	   xmlns:xs="http://www.w3.org/2001/XMLSchema" 
	   xmlns:dc="http://purl.org/dc/elements/1.1/">
  <xs:annotation>
    <xs:appinfo>
      <dc:title>W3C XML Schema for XTM 2.0</dc:title>
      <dc:owner>ISO/IEC JTC1 SC34</dc:owner>
      <dc:contributor>Max Voskob</dc:contributor>
      <dc:contributor>Lars Marius Garshol</dc:contributor>
      <dc:contributor>Ann Wrightson</dc:contributor>
    </xs:appinfo>
  </xs:annotation>

  <!-- any-markup ................................................ -->
  <xs:complexType name="any-markup" mixed="true">
    <xs:complexContent mixed="true">
      <xs:restriction base="xs:anyType">
	<xs:sequence>
	  <xs:any namespace="##other" processContents="lax" minOccurs="0" 
                  maxOccurs="unbounded"/>
	</xs:sequence>
	<xs:attribute name="datatype" type="xs:anyURI"/>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>

  <!-- topicMap .................................................. -->
  <xs:element name="topicMap">    
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="itemIdentity" minOccurs="0" maxOccurs="unbounded"/>
	<xs:element ref="mergeMap" minOccurs="0" maxOccurs="unbounded"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="topic"/>
          <xs:element ref="association"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="reifier" type="xs:anyURI"/>
      <xs:attribute name="version" fixed="2.0"/>
    </xs:complexType>
  </xs:element>

  <!-- topic ..................................................... -->
  <xs:element name="topic">
    <xs:complexType>
      <xs:sequence>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="itemIdentity"/>
          <xs:element ref="subjectLocator"/>
          <xs:element ref="subjectIdentifier"/>
        </xs:choice>
	<xs:element ref="instanceOf" minOccurs="0" maxOccurs="1"/>
	<xs:choice minOccurs="0" maxOccurs="unbounded">
	  <xs:element ref="name"/>
	  <xs:element ref="occurrence"/>
	</xs:choice>
      </xs:sequence>
      <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- itemIdentity .............................................. -->
  <xs:element name="itemIdentity">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- subjectLocator ............................................ -->
  <xs:element name="subjectLocator">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- subjectIdentifier ......................................... -->
  <xs:element name="subjectIdentifier">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- name ...................................................... -->
  <xs:element name="name">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="itemIdentity" minOccurs="0" maxOccurs="unbounded"/>
	<xs:element ref="type" minOccurs="0"/>
	<xs:element ref="scope" minOccurs="0"/>
	<xs:element ref="value"/>
	<xs:element ref="variant" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="reifier" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>

  <!-- value ..................................................... -->
  <xs:element name="value" type="xs:string"/>

  <!-- variant ................................................... -->
  <xs:element name="variant">
    <xs:complexType>
      <xs:sequence>
	<xs:element ref="itemIdentity" minOccurs="0" maxOccurs="unbounded"/>
	<xs:element ref="scope"/>
        <xs:choice>
          <xs:element ref="resourceData"/>
          <xs:element ref="resourceRef"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="reifier" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>

  <!-- scope ..................................................... -->
  <xs:element name="scope">
    <xs:complexType>
      <xs:choice>
	<xs:element ref="topicRef" maxOccurs="unbounded"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <!-- instanceOf ................................................ -->
  <xs:element name="instanceOf">
    <xs:complexType>
      <xs:choice>
	<xs:element ref="topicRef" maxOccurs="unbounded"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <!-- type ...................................................... -->
  <xs:element name="type">
    <xs:complexType>
      <xs:choice>
	<xs:element ref="topicRef"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <!-- occurrence ................................................ -->
  <xs:element name="occurrence">
    <xs:complexType>
      <xs:sequence>
	<xs:element ref="itemIdentity" minOccurs="0" maxOccurs="unbounded"/>
	<xs:element ref="type"/>
	<xs:element ref="scope" minOccurs="0"/>
	<xs:choice>
	  <xs:element ref="resourceRef"/>
	  <xs:element ref="resourceData"/>
	</xs:choice>
      </xs:sequence>
      <xs:attribute name="reifier" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>

  <!-- resourceData .............................................. -->
  <xs:element name="resourceData" type="any-markup"/>

  <!-- association ............................................... -->
  <xs:element name="association">
    <xs:complexType>
      <xs:sequence>
	<xs:element ref="itemIdentity" minOccurs="0" maxOccurs="unbounded"/>
	<xs:element ref="type"/>
	<xs:element ref="scope" minOccurs="0"/>
	<xs:element ref="role" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="reifier" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>

  <!-- role ...................................................... -->
  <xs:element name="role">
    <xs:complexType>
      <xs:sequence>
	<xs:element ref="itemIdentity" minOccurs="0" maxOccurs="unbounded"/>
	<xs:element ref="type"/>
        <xs:element ref="topicRef"/>
      </xs:sequence>
      <xs:attribute name="reifier" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>

  <!-- topicRef .................................................. -->
  <xs:element name="topicRef">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- resourceRef ............................................... -->
  <xs:element name="resourceRef">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- mergeMap .................................................. -->
  <xs:element name="mergeMap">
    <xs:complexType>
      <xs:attribute name="href" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

付録 D(参考)XTM 1.0との違い

付録 D では、この規格の本体で規定する構文と [ISO/IEC 13250:2003] の構文との違いを示す。

違いは、下記のとおりである。

付録 E(参考)定義された用語の主題識別子

この付録は、箇条3 の中で正式に定義された用語の各々に一つの主題識別子を定義する。主題識別子は、例えば、それらの主題についての情報の照合を可能にするために、それらが識別する主題へのあいまいでない参照を可能にするというただ一つの目的のために定義される。この規格は、これら識別子及びそれに加えて、一般に、主題識別子に関連するものに対して、いかなる種類の処理上の意味ももたせない。

XTM
http://psi.topicmaps.org/iso13250/glossary/XTM

参考文献

ISO/IEC 13250:2003, Information technology — SGML applications — Topic maps

ISO/IEC 13250-4, Information technology — Topic Maps — Canonicalization (公開予定)

XTM1.0, XML Topic Maps (XTM) 1.0 Specification, Steve Pepper, Graham Moore, TopicMaps.Org, 2001, http://www.topicmaps.org/xtm/1.0/