第3回 『 名前空間と要素値、属性値 』
XMLの名前空間仕様(Namespaces in XML)では、要素と属性の名前空間を定義するための仕組みを定めています。要素や属性自体の名前空間であって、要素値や属性値については一切触れていません。ところがいくつかのXMLの応用仕様では、名前空間が、要素値や属性値にまで有効となるように名前空間を応用しています。
ここではXML Schema、XPath、SOAPを例に、それぞれによる名前空間の有効範囲を見てみますが、これらの名前空間の応用は、各応用仕様(XML Schemaなど)でそれぞれが定めるものですので、その有効範囲(名前空間仕様以上の有効範囲)はまちまちです。
●XML Schema
====================
XML Schemaのelement要素やattribute要素では、type属性を記述することによって、その要素または属性の型を指定します。たとえば次のような例です。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="price" type="xsd:nonNegativeInteger" />
・・・
ここで「nonNegativeInteger」はXML Schemaで定められている組み込み型を表し、「負でない整数」と定義されているものです。XML Schemaで定められている型ですので、XML Schema名前空間を表す接頭辞(ここではxsd)とともに記述されます。
前述の例を、デフォルトの名前空間を使用し記述しなおすと次のようになります。
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="price" type="nonNegativeInteger" />
・・・
XML Schemaの構文となるschema要素やelement要素の名前空間接頭辞が不要になる(名前空間仕様にもとづくもの)とともに、type属性値の名前空間接頭辞もなくなります(XML Schemaで定める名前空間の応用)。
XML Schemaのelement要素やattribute要素では、ref属性を記述することによって、グローバルに宣言されたelement要素やattribute要素を参照することができますが、ref属性の属性値も同様です。
●XPath
====================
XPathはXSLTなどで使用されますが、このときXPathは、XSLTの属性値の部分に記述されます。このときXPathの名前空間は、XSLTの名前空間宣言を使用します。
次のような例です。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:aaa="urn:infoteria:column:aaa">
<xsl:template match="/">
<xsl:apply-templates select="aaa:record" />
・・・
この場合のselect属性は、"urn:infoteria:column:aaa"名前空間のrecord要素を選択します。
XPathはXML Schemaと異なり、デフォルトの名前空間を使用しないと定められていますので、次の例では"urn:infoteria:column:aaa"名前空間のrecord要素を選択することができません。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="urn:infoteria:column:aaa">
<xsl:template match="/">
<xsl:apply-templates select="record" />
・・・
この場合のselect属性は、名前空間なしのrecord要素を選択します。
●SOAP
====================
SOAPでは、SOAPメッセージの処理に何らかのエラーがあった場合にフォルトコードを返却するよう定めており、そのフォルトコードはSOAP名前空間に属する値です。次のような例です。
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
・・・
SOAP 1.1仕様の中ではデフォルトの名前空間には一切触れていませんので、このように、必ず名前空間接頭辞とともに記述します。
※注:コード記述内の<>については、本来半角の<>となります。
日時: 2004年08月05日 13:00 | | TrackBack
