XMLドキュメントは階層構造を持ち、概念的にはXML ツリーと呼ばれるツリー構造として解釈できます。
XML文書にはルート要素(他のすべての要素の親となる要素)が必ず含まれます。XML文書内のすべての要素は、サブ要素、テキスト、属性を含むことができます。XML文書によって表現されるツリーはルート要素から始まり、最下位の要素へと分岐していきます。XMLツリーで使用される用語についてはコンセンサスはありませんが、少なくとも2つの標準用語がW3Cによって公開されています。
XPathは、XML文書の1つ以上の内部コンポーネント(要素、属性など)を識別するXPath式と呼ばれる構文を定義します。XPathは、XML構造化データへのアクセスに広く使用されています。
XML情報セット(XML infoset)は、XML文書の抽象データモデルを情報項目の観点から記述します。XML言語の仕様では、これらの言語で許容される構成要素に対する制約を記述するのに便利なため、XML情報セットがよく使用されます。
木としての表現
数学において、木とは、任意の2つの頂点が1つの単純なパスで結ばれている無向グラフです。単純な閉路を持たない連結グラフはすべて木です。木データ構造は、リンクされたノードの集合を持つ階層的な木構造をシミュレートします。階層は、集合上に定義された順序で構成されます。「階層」という用語は、要素間の階層的な関係を強調するために使用されます。
XML仕様では、XML文書が仕様で定義された構文規則のリストを満たす場合、整形式のテキストであると定義されています。この仕様は長文ですが、XML文書のツリー構造に関する重要なポイントは2つあります。
- 要素を区切る開始タグ、終了タグ、空要素タグが正しくネストされており、欠落や重複がない
- 単一の「ルート」要素には他のすべての要素が含まれます
これらの機能は、単一のルートノードと要素の順序付けという点で、ツリー構造に似ています。XMLは他の言語でも第一級データ型として登場しています。JavaScript (E4X) 拡張では、2つの特定のオブジェクト(XMLとXMLList)を明示的に定義しています。これらのオブジェクトは、XML文書ノードとXMLノードリストを別個のオブジェクトとしてサポートし、親子関係を示すドット表記法を使用します。[1]これらのデータ構造は、XML文書をツリー構造として表現します。
XMLツリーをグラフィカルに表現すると、ASCIIチャートのように単純なものから、より複雑な階層構造まで表現できます。例えば、XMLドキュメントとASCIIツリーは同じ構造を持ちます。XMLツリーはインスタンスドキュメントの内容ではなく、ドキュメントの構造のみを示します。この例では、Productがツリーのルート要素であり、Productの2つの子ノードはNameとDetailsです。Detailsには、DescriptionとPriceという2つの子ノードが含まれています。Windowsと*nixのtreeコマンドも同様のツリー構造とパスを生成します。
製品
├───名前
└───詳細
└───説明
└───価格
<製品>
<名前>ウィジェット</名前>
<詳細>
<説明>
この ウィジェットは最高品質のウィジェット です。
</説明>
<価格> 5.50 </価格>
</詳細>
</製品>
XPathデータモデル
XPath(XMLパス言語)は、XML文書からノードを選択するためのクエリ言語です。XPathは、XML文書内の1つ以上の内部コンポーネント(要素、属性など)をクエリするためのXPath式と呼ばれる構文を定義します。XPathは、他のコアXML仕様や、XMLでエンコードされたデータにアクセスするためのプログラミングライブラリで広く使用されています。[2]
XPathデータモデルの用語
XPathデータモデルは長い仕様であり、XMLツリーとは関係のない多くの機能についても言及しています。以下に、XPathデータモデルとXML仕様における主要な用語を挙げます。[3] [4]
- 実例
- シーケンスとして表現されるデータ モデル。
- インスタンスドキュメント
- 同じシーケンス/XML ツリーを使用し、それに準拠するドキュメント。
- 順序
- 0個以上のアイテムからなる順序付きコレクション。シーケンスはシーケンスのメンバーになることはできません。個別に出現する単一のアイテムは、1つのアイテムを含むシーケンスとしてモデル化されます。
- 要素
- シーケンス内のノードには、
- ノード
- XML ツリー/シーケンス内で表される任意の項目。
- ルートノード
- ツリーの最上位要素。他のすべての要素とノードはルートノード内に含まれている必要があります。
- アイテム
- ノードまたはアトミック値。
- 価値空間
- 追加の要素ではなくデータを含むアイテムの部分。
- 原子型
- プリミティブな単純型、または別のアトミック型からの制限によって派生された型。
- 原子値
- 値空間に含まれるアトミック型の値。
- QName
- 要素の修飾名。XMLオブジェクトの命名規則に準拠する必要があります。(つまり、文字またはアンダースコアで始まる必要があり、大文字と小文字が区別され、文字 xml で始まることはできません(いずれの場合も)、文字、数字、ハイフン、アンダースコア、ピリオドを使用できますが、スペースを含めることはできません。)
- 拡張QName
- 要素の完全修飾名。接頭辞と名前空間を含めることができます。要素のローカル名を含める必要があります。
与えられたツリー内では、文書順序は以下の制約を満たす: [5]
- ルート ノードは最初のノードです。
- 各ノードは、そのすべての子および子孫の前に発生します。
- 名前空間ノードは、関連付けられている要素ノードの直後に配置されます。名前空間ノードの相対的な順序は一定ですが、実装に依存します。
- 属性ノードは、関連付けられている要素の名前空間ノードの直後に配置されます。特定の要素に関連付けられた名前空間ノードがない場合、その要素に関連付けられた属性ノードはその要素の直後に配置されます。属性ノードの相対的な順序は一定ですが、実装に依存します。
- 兄弟の相対的な順序は、親ノードの children プロパティ内で兄弟が出現する順序です。
- 子と子孫は、次の兄弟姉妹よりも先に発生します。
XML情報セット
XML情報セット(XML Infoset)は、XML文書の抽象データモデルを情報項目の集合として記述します。XML情報セット仕様の定義は、整形式XML文書内の情報を参照する必要がある他の仕様で使用することを目的としています。この情報セットは、他のXML言語で許容されるXML構造に対する制約を記述するのに便利です。XML文書が整形式であり、名前空間制約を満たしている場合、その文書は情報セットを持ちます。情報セットには、最大11種類の情報項目を含めることができます。
- 文書情報項目(常に存在)
- 要素情報項目
- 属性情報項目
- 処理命令情報項目
- 展開されていないエンティティ参照情報項目
- キャラクター情報項目
- コメント情報項目
- 文書型宣言情報項目
- 解析されないエンティティ情報項目
- 表記情報項目
- 名前空間情報項目[6]
XML情報セットの用語
XML情報セットは長大な仕様であり、XMLツリーとは関係のない多くの機能についても言及されています。以下に、XMLツリーに関する用語の中で最も重要な用語を挙げます。
情報セットには文書情報項目が 1 つだけ存在し、他のすべての情報項目は、文書情報項目のプロパティから直接、または他の情報項目のプロパティを介して間接的にアクセスできます。文書情報項目には、次のプロパティがあります。
- [子供たち]
- [文書要素]
- [表記]
- [解析されていないエンティティ]
- [ベースURI]
- [文字エンコード方式]
- [スタンドアロン]
- [バージョン]
- [すべての申告を処理済み]
XML文書に出現する各要素には、要素情報項目が存在します。要素情報項目の1つは、文書情報項目の[文書要素]プロパティの値であり、これは要素ツリーのルートに対応します。他のすべての要素情報項目は、その[子]プロパティを再帰的に辿ることでアクセスできます。要素情報項目には、以下のプロパティがあります。
- [名前空間名]
- [ローカル名]
- [接頭辞]
- [子供たち]
- [属性]
- [名前空間属性]
- [スコープ内の名前空間]
- [ベースURI]
- [親]
文書内の各要素の各属性(指定またはデフォルト)には、名前空間宣言を含む属性情報項目が存在します。ただし、名前空間宣言は、要素の[attributes]プロパティではなく、[namespace attribute]プロパティのメンバーとして出現します。DTDでデフォルト値なしで宣言され、要素の開始タグで指定されていない属性は、属性情報項目によって表されません。属性情報項目には以下のプロパティがあります。
- [名前空間名]
- [ローカル名]
- [接頭辞]
- [正規化された値]
- [指定された]
- [属性タイプ]
- [参考文献]
- [所有者要素] [7]
注記
- ^ 「E4XによるXMLの処理」Mozilla開発者センター、Mozilla Foundation。
- ^ XQuery 1.0 および XPath 2.0 データモデル (XDM) (第 2 版)、2010 年 12 月 14 日、http://www.w3.org/TR/xpath-datamodel/
- ^ XQuery 1.0 および XPath 2.0 データモデル (XDM) (第 2 版)、2010 年 12 月 14 日、http://www.w3.org/TR/xpath-datamodel/
- ^ 拡張マークアップ言語 (XML) 1.0 (第5版)、2008年11月26日、2018年7月24日閲覧、https://www.w3.org/TR/xml/REC-xml-20081126-review.html#sec-terminology
- ^ XQuery 1.0 および XPath 2.0 データモデル (XDM) (第 2 版)、2010 年 12 月 14 日、http://www.w3.org/TR/xpath-datamodel/
- ^ XML 情報セット(第 2 版)、2004 年 2 月 4 日、http://www.w3.org/TR/xml-infoset/
- ^ XML 情報セット(第 2 版)、2004 年 2 月 4 日、http://www.w3.org/TR/xml-infoset/