- 7.1 Namespaceの意義
- 7.2 Namespaceの定義
- 7.3 要素とNamespace
- 7.4 属性とNamespace
- 7.5 DTDとNamespaceの問題
- 7.6 まとめ
7.4 属性とNamespace
属性も要素と同じように、Namespace接頭辞によりNamespaceを指定します。以下に例を示します。
<reservation:RESERVATION xmlns:HTML="http://www.w3.org/TR/REC-html40" xmlns:reservation="http://www.4dd.co.jp/reservation"> <reservation:NAME HTML:CLASS="largeSansSerif">Layman, A</reservation:NAME> <reservation:SEAT reservation:CLASS="Y" HTML:CLASS="largeMonotype">33B</reservation:SEAT> <HTML:A HTML:HREF="/cgi-bin/ResStatus">Check Status</HTML:A> <reservation:DEPARTURE>1997-05-24T07:55:00+1</reservation:DEPARTURE> </reservation:RESERVATION>
上の例では、RESERVATION要素開始タグで、HTML Namespace接頭辞とreservation Namespace接頭辞2つを宣言しています。本文中、SEAT要素に対して2つのCLASS属性が指定されています。それを2つのNamespace接頭辞により、区別しています。
属性の場合、Namespace接頭辞が記述されていない場合には、親要素毎のローカルなNamespaceに属することになります。
<RESERVATION xmlns:HTML="http://www.w3.org/TR/REC-html40" xmlns="http://www.4dd.co.jp/reservation"> <NAME HTML:CLASS="largeSansSerif">Layman, A</NAME> <SEAT CLASS="Y" HTML:CLASS="largeMonotype">33B</SEAT> <HTML:A HREF="/cgi-bin/ResStatus">Check Status</HTML:A> <DEPARTURE>1997-05-24T07:55:00+1</DEPARTURE> </RESERVATION>
上の例では、reservationをデフォルトNamespaceとして指定しています。そのため、Namespace接頭辞を持たない、SEAT要素はreservation Namespaceに属すると認識されます。SEAT要素の属性、CLASSもNamespace接頭辞を持ちません。そのため、SEAT要素のローカルなNamespaceに属すると認識されます。また、5行目A要素は、Namespace接頭辞により、HTML Namespaceに属すと指定されています。ただ、HREF属性は名前空間接頭辞を持ちません。よって、HREF属性も、A要素のローカルなNamespaceに属すると認識されます。
同じNamespaceに存在し、同じ名前を持つ属性をひとつの要素内に記述することはできません。ただし、Namespaceの「区画」が異なれば、同じ名前の属性も存在することが可能です。例えば、以下のXMLです。
<!-- http://www.w3.org is bound to n1 and n2 --> <x xmlns:n1="http://www.w3.org" xmlns="http://www.w3.org" > <good a="1" n1:a="2" /> </x>
上記のXMLでは、goodの最初のa属性は、good要素のローカルなNamespaceに属します。対して、2番目のa属性はURI"http://www.w3.org"で表されるNamespaceに属します。この2つの属性は同じ"a"という名前を持ちますが、属するNamespaceの区画が異なるため、正しいXMLといえます。
以下の文章はエラーになります。
<!-- http://www.w3.org is bound to n1 and n2 --> <x xmlns:n1="http://www.w3.org" xmlns:n2="http://www.w3.org" > <bad n1:a="1" n2:a="2" /> </x>
上の例では、n1とn2は同じ"http://www.w3.org"Namespaceを表す接頭辞として定義されています。そのため、bad要素の2つのa属性が同一のものとみなされ、エラーとなります。