|
名前空間の処理
XML要素で名前空間が指定されていたら,対応するSymbolicXML式のシンタックスはやや複雑になります.実際のシンタックスは,名前空間がデフォルトの名前空間として暗に指定されているか,または名前空間接頭辞を使って明示的に指定されているかに依存します.
デフォルトの名前空間の使用
デフォルトの名前空間にあるどの要素に対しても,XMLElement式は名前空間が指定されてない場合のものと同じです.しかし,デフォルトの名前空間が宣言されている要素は,以下の例のように,そのXMLElement式に変更が加えられます.
以下は名前空間がhtml要素で宣言されている簡単なXHTMLドキュメントの例です.
<html xmlns='http://www.w3.org/1999/xhtml'>
<head> </head>
<body>
<p>Here is some text.</p>
</body>
</html>
これに対応するSymbolicXML式は以下のようになります.
XMLElement["html",{{"http://www.w3.org/2000/xmlns/","xmlns"} "http://www.w3.org/1999/xhtml"},{
XMLElement["head",{},{}],
XMLElement["body",{},{
XMLElement["p",{},{"Here is some text."}]}]}]
ここで,html要素を表しているXMLElement式が複雑な構造を取っていることにご注意ください.第2引数は次のようになっています.
{"http://www.w3.org/2000/xmlns/","xmlns"} "http://www.w3.org/1999/xhtml"}
この文は次の2つの役割りを果たしています.
- XMLの仕様で要求されているように,URI(Universal Resource Identifier) http://www.w3.org/2000/xmlnsで定義される名前空間で属性xmlnsを識別します.
-
xmlns属性の値をURI http://www.w3.org/1999/xhtmlに設定することにより,デフォルトの名前空間を定義します.
つまり,ある要素に対してデフォルトの名前空間を宣言すると,対応するXMLElement構造のシンタックスは次のようになるのです.
XMLElement[element,{{xmlns-uri, "xmlns"} namespace-uri},{data}]
ここでxmlns-uri はxmlns属性の名前空間に関連付けられているURI,namespace-uri は宣言されるデフォルトの名前空間のURIです.
明示的な名前空間接頭辞を使う
要素の名前空間が名前空間接頭辞を使って明示的に指定されているときは,以下の例に示すように,SymbolicXML式のシンタックスが変更されます.
以下にMathMLマークアップが埋め込まれているXHTMLドキュメントを示します.math要素中のxmlns:m属性によって,名前空間接頭辞mとMathML名前空間が結び付けられます.すべてのMathML要素名はこの名前空間接頭辞が付加した形で書かれます.
<html xmlns='http://www.w3.org/1999/xhtml'>
<head> <title>Test</title> </head>
<body>
<p>Here is some math.</p>
<p>
<m:math xmlns:m='http://www.w3.org/1998/Math/MathML'>
<m:mi>x</m:mi>
<m:mo>+</m:mo>
<m:mn>1</m:mn>
</m:math>
</p>
</body>
</html>
これに対応するSymbolicXML式は次のようになります.
XMLElement["html",{{"http://www.w3.org/2000/xmlns/","xmlns"} "http://www.w3.org/1999/xhtml"},{XMLElement[head,{},{}],
XMLElement["body",{},{
XMLElement["p",{},{"Here is some math."}],
XMLElement["p",{},{ XMLElement[{"http://www.w3.org/1998/Math/MathML","math"},{{"http://www.w3.org/2000/xmlns/","m"} "http://www.w3.org/1998/Math/MathML"},{
XMLElement[{"http://www.w3.org/1998/Math/MathML","mi"},{},{"x"}],
XMLElement[{"http://www.w3.org/1998/Math/MathML","mo"},{},{"+"}],
XMLElement[{"http://www.w3.org/1998/Math/MathML","mn"},{},{"1"}
]}]}]}]}]
ここで注意しなければならない点が2点あります.
- 最上位のmath要素に対するXMLElement構造の最初の属性は{"http://www.w3.org/2000/xmlns/","m"}
"http://www.w3.org/1998/Math/MathML"となります.これはMathML名前空間と接頭辞mを関連付けます.
- 各MathML要素に対するXMLElement構造はXMLElement[{uri, element},{},{data}]という形になります.ここで,uri はMathML名前空間を識別するためのものです.これは,名前空間接頭辞が付加された形の要素名に対応するSymbolicXMLでの記述です.
|