XML名前空間

XML名前空間

[12] XML名前空間 (XML Namespaces) は、 XML要素属性の名前 (種別) を名前空間名局所名の組によって表現する仕組みです。

[17] ほとんどすべての XML応用文書XML名前空間を利用しています。

[58] XML名前空間 (XML Namespaces) (仕様) は XML における名前空間を定義しています。 XML名前空間 (XML namespace) (一般名詞) は、XML名前空間仕様に基づく各々の名前空間を指します。 xml名前空間 (the xml namespace) (固有名詞) は、 XML 組み込みの機能が属するXML名前空間 (一般名詞) です。

前2者は本項、後者はそちらの項を参照。

XML名前空間 (仕様)

[8] QName foo:xmlbar は予約されていませんが、 QName xmlbar は (XML で) 予約されている関係上、 最初の例の如き名前 (つまり、 LocalName"XML" で始まる名前。) は使わないことを errata <http://www.w3.org/XML/xml-names-19990114-errata#NE06> は勧めています。

[9] Errata は仕様書にはない名前空間整形式, 名前空間妥当という2つの重要な用語を定義しています。

[10] このほかにも errata には重要な修正があります。 修正に気づいてない人も少なくないでしょうから、とっとと SE を出して欲しいところですが、担当 WG は第1.1版出して誤魔化す気かな?

[19] 名前空間 1.1 は、 XML 1.1 と併用する物だと仕様書に書いてありますが、無印名前空間は、 単に XML としか書かれていません。だとすると XML 1.1 + 無印名前空間も可能かも、 だとするといろいろ不整合が出てきて都合が悪いよなあ、 と思ってよく調べてみると、ちゃんと無印 Errata で手は打ってあって、 XML 1.0 に適用すると修正されていました。

構文

[5] 厳密には仕様書 (>>3) の記述を参照して下さい。

属性の唯一性

[7] SGML/XML では、同じ名前の属性を一つの要素に複数指定することはできませんでした。

 ×<element attribute="value" attribute="value"/>

XML 名前空間を利用する場合は更に制限が加えられ、 修飾名 (QName) が異なっていても名前空間名が同じであるなら、同じ local name の属性を一つの要素に指定することはできません。

 ×<element xmlns:ns1="http://ns.example/"
            xmlns:ns2="http://ns.example/"
            ns1:foo="bar" ns2:foo="BAR"/>

ただし、名前空間無しの属性とありの属性や名前空間名の異なる属性で local name が同じであるものは、もちろん問題ありません。

 ○<element xmlns="http://ns.example/1"
            xmlns:ns1="http://ns.example/1"
            xmlns:ns2="http://ns.example/2"
            foo="bar" ns1:foo="bar" ns2:foo="BAR"/>

[14]

 <!ATTLIST foo
           ns:foo CDATA 'default'
           xmlns:ns CDATA #FIXED 'http://uri.example'>
 ...
 <foo ns2:foo="nondefault"
      xmlns:ns2="http://uri.example"/>

名前空間妥当だろうか? とふと思ったけど、妥当性を検証する処理系はまず省略属性を補って、その上で名前空間を知っている処理系は名前空間を処理するのが建前だろうから、やっぱり名前空間非妥当だろうなあ。

[23] >>14 でも <IW:XMLNames:"#uniqAttrs"> には no tag may contain としか書いてなくて、既定属性の話は出てこないぞ。。。 (名無しさん)

[24] 少なくともその宣言が内部サブセットにあって、別途 xmlns:ns2 と ns2:foo が宣言されていれば名前空間妥当だと思うけど。 (名無しさん 2006-02-18 05:29:08 +00:00)

XML 名前空間 (1.0) の修正

XML名前空間 1.0

XML 名前空間 1.1

XML名前空間 1.1

XML 名前空間の問題点

[18] XML名前空間は異常に複雑であると非難されています。 XML を使うべきでないとの主張の重大な論拠の1つでもあります。

[42] 次のような問題点が指摘されています。

  • [43] 要素属性接頭辞なしの場合の名前空間URLの解釈が異なり学習を困難にしている。 (RDF/XML は理論的な整合性を優先して非互換に仕様変更している。)
  • [44] 名前空間接頭辞の任意性により、要素名属性名の固有性が失われている。 (DTD はそれが理由で使いものにならなくなった。)
  • [45] 名前空間の識別子に (長い) URL を用いるため記憶が困難で、転送データ量・メモリー上のデータ量が増大する。
  • [50] 名前空間の識別子に URL を用いるが、その URL文書名前空間に実際には関係がない。学習を妨げている。
  • [62] 名前空間URL比較文字列としての比較だが、 現実世界の URL は表記揺れが多い。誤った URL名前空間として使ってしまう例も少なくない。 間違った URL でも動く実装がなぜか存在するので、誤った著者も誤っていることに気づいていない。
  • [46] 要素属性の区別を名前1つだけでなく、常に名前空間と名前の組で行わなければならず (または名前空間の宣言と接頭辞の仕組みを作らなければならず)、要素属性に応じた処理の記述が複雑になる。
  • [57] そこで XML 以外でXML名前空間を参照する仕組みを作ると多かれ少なかれ XML と違うものになり (例えば CSS@namespace)、 その差異が開発者の混乱の元になっている。
  • [47] 名前空間接頭辞属性値内容から参照することを認めている (しかもそれは XML/XML名前空間レベルでは感知できない) ため、 接頭辞を任意に書き換えることはできず、保持し続けなければならない。 名前空間と名前の組だけで識別できるという原則が崩されている。 (XSLTRDFa が代表例。)
  • [48] 名前空間の異なる語彙を混在させて記述するのは複雑で、学習も困難。 そのためカメレオン名前空間のようなバッドノウハウが開発されているが、 名前空間の意義を根本的に否定するもので本末転倒。
  • [61] これまで単純な短い文字列1つで要素属性を説明できていたのに、 XML名前空間によって正確に記述するのが難しくなった。 仕様書や解説、議論の精密性に悪影響を及ぼしている。
    • 毎回「○○名前空間の○○要素/属性」と記述しないといけなくなり、筆者にとっても読者にとっても煩雑。
    • それを避けるため仕様書や解説文中でも (自然言語文等で名前空間接頭辞を宣言して) QName で表したりする。記述ミスや誤解の発生源になっている。
    • 「明記しない場合○○名前空間」のようにすることもあるが、 これも大きな混乱の元となっている。
    • わかりにくくてもどこかに注記があれば良い方で、実際にはほとんどの場合筆者と読者の暗黙の了解により解釈せざるを得ない。
  • [54] 名前空間によりバージョニングプロファイルの区別を行う試みがあるが、 実用上、バージョニングしない他の語彙と混在できない。 (SMIL が失敗例。)
  • [49] 祖先の名前空間宣言が子孫にも適用されるため、異なる出所からの文書片を切り貼りして文書を作成するとき、名前空間を適切に扱うのは容易ではない。
  • [53] 名前空間宣言は一貫性のない制約があり複雑。 (xmlxmlns の扱い。)
  • [51] XML に対応するデータモデルが極めて複雑になる。接頭辞と URL の関係を保持し続ける必要がある、祖先の宣言が適用されるなどの性質から、簡略化しがたい。 (DOM2 は実際ひどい。)
  • [52] XML名前空間を使わない XML は禁止されていないが、関係は明確に規定されていない。 (実際に稀に使われることがあるし、 DOM1 のように古い仕様があると、互換性のために対応し続ける必要がある。) 両方に対応した実装は複雑になる。
  • [55] 名前空間により複数の語彙の混在を記述できるようになったが、 その相互作用は一切規定されていない。にも関わらず、なぜか名前空間ですべて問題が解決されるような誤解を招いている。 名前空間名URL なのでソフトウェアの追加モジュールがそこから入手できるといったお花畑的未来観が語られたことすらあるが、 まったく現実的ではない。
  • [56] エラー処理が規定されていない。接頭辞の扱いの誤りや相対URL名前空間がどう扱われるのか不明確。

[60] XML名前空間の扱いをめぐって混乱している例:

[85] XML名前空間XML DTDの衝突を指摘された W3C Markup Validator は、 W3C 自身の仕様書を無視して名前空間宣言のエラーを報告しないことにしました。 もうめちゃくちゃです。

xmlns 参照。

参考文献

メモ

[20] 要素型名xmlns とか xmlns:* になることは禁止されていない??

[25] >>20 わかりにくいけど禁止はされているらしい。

Re: Namespaces in XML 1.x test suite contribution from Richard Tobin on 2005-12-19 (xml-names-editor@w3.org from December 2005) <http://lists.w3.org/Archives/Public/xml-names-editor/2005Dec/0002.html>

(名無しさん)

[26] Re: porno on w3.org (Ian B. Jacobs 著, 版) <http://lists.w3.org/Archives/Public/w3c-translators/2008JanMar/0163.html> (名無しさん)

XML名前空間 (一般名詞)

[4]

[定義:] XML名前空間 (なまえくうかん) (namespace) は、 XML文書中で要素型名属性名として使われる名前集成であり、 URI参照RFC 2396によって識別される。 XML名前空間 1.0

[21]

[定義: XML名前空間 (なまえくうかん) (namespace) IRI参照によって識別される。 要素名属性名はこの仕様書で説明する方法によってXML名前空間中に置くことができる。] XML名前空間 1.1

[22] 仕様書:

表記法

[1] XML名前空間における名前空間名局所名の組の構文上や仕様上の表記法は様々なものがあります。

[27] XML Namespaces ( 版) <http://www.jclark.com/xml/xmlns.htm>

[28] XML名前空間の解説ですが、他の解説などでもわりとよく用いられた「{名前空間URL}局所名」 という表記法を (おそらく) 最初に導入した文章でもあります。

[2] 多くの仕様書では、仕様書で使う名前空間接頭辞を (自然言語により) 定義した上で、それを使って (自然言語XML の例示で用いて) 説明しています。

[11] WebDAV の仕様書では特性の名前 (要素名) は展開URL によって表記されることがあります。

メモ

[29] Re: Re[4]: XML namespaces and RDF (Tim Berners-Lee 著, 版) <http://lists.w3.org/Archives/Public/semantic-web/2007Dec/0116.html>

[30] Default Prefix Declaration - W3C Blog ( 版) <http://www.w3.org/QA/2009/11/default_prefix_declaration.html>

[31] Why bound prefixes are an anti-pattern in language design (Ian Hickson 著, 版) <http://lists.w3.org/Archives/Public/public-rdf-in-xhtml-tf/2009Aug/0035.html>

[32] XProc: An XML Pipeline Language ( 版) <http://www.w3.org/TR/2010/REC-xproc-20100511/#namespace-fixup-guidance>

[33] James Clark's Random Thoughts: XML Namespaces ( 版) <http://blog.jclark.com/2010/01/xml-namespaces.html>

[34] Name Spaces in XML ( 版) <http://www.w3.org/TR/1998/NOTE-xml-names-0119>

[35] XML.com: XML Namespaces Don't Need URIs (Michael Day 著, 版) <http://www.xml.com/pub/a/2005/04/13/namespace-uris.html>

[36] Change Proposal for ISSUE-120 - WHATWG Wiki ( 版) <http://wiki.whatwg.org/wiki/Change_Proposal_for_ISSUE-120>

[37] IRC logs: freenode / #whatwg / 20110210 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20110210#l-618>

[38] Re: Re[4]: XML namespaces and RDF ( (Tim Berners-Lee 著, 版)) <http://lists.w3.org/Archives/Public/semantic-web/2007Dec/0116.html>

[39] MySQL :: MySQL 5.1 リファレンスマニュアル :: 11.9 XML 関数 ( ( 版)) <http://dev.mysql.com/doc/refman/5.1/ja/xml-functions.html>

[40] [whatwg] Including ( ( 版)) <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-November/037903.html>

[41] Web Architecture: Extensible languages ( ( 版)) <http://www.w3.org/TR/NOTE-webarch-extlang>

[59] ScalaでRSSフィードの処理を書いてみたら思ったより大変でした - argius note ( 版) <http://argius.hatenablog.jp/entry/20130830/1377867921>

但し、Scala 2.10 の時点では、標準APIのXMLでは名前空間が使えないようです。名前空間を無視すれば、要素名(tag)は検索できますが、属性(attribute)は名前空間を無視しても検索できません。

[63] XProc 2.0: An XML Pipeline Language () <https://www.w3.org/TR/2016/NOTE-xproc20-20160721/#namespace-fixup>

[64] XML Namespaces () <http://www.jclark.com/xml/xmlns.htm>

[65] James Clarkさんのツイート: "@ndw @hsivonen TimBL pushed the WG to do XML Namespaces ASAP after XML 1.0 for RDF's benefit." () <https://twitter.com/james_clark/status/866532934513184768>

[66] w3c-sgml-wg@w3.org Mail Archives () <https://lists.w3.org/Archives/Public/w3c-sgml-wg/>

[67] Update on namespaces (Jon Bosak著, ) <https://lists.w3.org/Archives/Public/w3c-sgml-wg/1997Jun/0146.html>

[68] xml-names-issues@w3.org Mail Archives () <https://lists.w3.org/Archives/Public/xml-names-issues/>

[69] Change of approach on the namespace problem (Tim Bray著, ) <https://lists.w3.org/Archives/Public/w3c-sgml-wg/1997Jun/0466.html>

[70] Options for Implementing Namespaces in XML () <http://www.textuality.com/xml/namespace.htm>

[71] Namespaces, the universe, and everything (Tim Bray著, ) <https://lists.w3.org/Archives/Public/w3c-sgml-wg/1997Jun/0349.html>

[72] ERB decision: colon as name character (Michael Sperberg-McQueen著, ) <https://lists.w3.org/Archives/Public/w3c-sgml-wg/1997Jun/0560.html>

[73] RDF Model and Syntax (Ora Lassila, Ralph Swick著, ) <https://www.w3.org/TR/WD-rdf-syntax-971002/#namespaces>

[74] SD5 - Namespaces - New Version 2 (Andrew Layman著, ) <https://lists.w3.org/Archives/Public/w3c-sgml-wg/1997May/0504.html>

[75] SD5 - Namespaces [fmt] (Jon Bosak著, ) <https://lists.w3.org/Archives/Public/w3c-sgml-wg/1997May/0239.html>

[76] namespaces considered harmful · Microformats Wiki () <http://microformats.org/wiki/namespaces>

[77] No Namespaces in JSON, Please (Henri Sivonen著, ) <https://hsivonen.fi/no-json-ns/>

[78] Re: Re[4]: XML namespaces and RDF (Tim Berners-Lee著, ) <https://lists.w3.org/Archives/Public/semantic-web/2007Dec/0116.html>

[79] Reports from the SGML ERB to the SGML WG and from the XML WG to the XML SIG () <https://www.w3.org/XML/9712-reports.html>

[80] 村田真のXMLブログ () <http://www.xmlmaster.org/murata/xmlblog/xb061124.html>

Office Open XMLを制定しているEcma Tc 45の議長であるJean Paoliとは、名前空間を用いたユーザ拡張について、1999年ごろに寿司屋で長々と話したことがある。名前空間になにを期待するかは、XMLエキスパートごとに大きく異なるのだが、彼と私の意見はきわめて近い。それは、名前空間は一枚岩ではないXML文書を可能にするという考え方である。一つの文書中の名前空間を全部分かる人・プログラムは誰もいないかも知れない。一部しか分からないプログラムであっても、インターネット上で、互いに協調動作することができる。

[81] Are web components *seriously* not namespaced? (Glen著, ) <https://lists.w3.org/Archives/Public/public-webapps/2015JanMar/0452.html>

[82] Re: Are web components *seriously* not namespaced? (Tab Atkins Jr.著, ) <https://lists.w3.org/Archives/Public/public-webapps/2015JanMar/0512.html>

[83] RFC 6848 - Specifying Civic Address Extensions in the Presence Information Data Format Location Object (PIDF-LO) () <https://tools.ietf.org/html/rfc6848>

[84] RSS 2.0 Specification (version 2.0.11) () <http://www.rssboard.org/rss-specification#extendingRss>

The elements defined in this document are not themselves members of a namespace, so that RSS 2.0 can remain compatible with previous versions in the following sense -- a version 0.91 or 0.92 file is also a valid 2.0 file. If the elements of RSS 2.0 were in a namespace, this constraint would break, a version 0.9x file would not be a valid 2.0 file.