XMLにおける名前

XML における名前

[91] XML における名前 (name) (生成規則 Name) は、要素属性、その他の構造を識別する文字列です。

[92] 名前で使える文字XMLにおける文字部分集合です。これを名前文字といいます。また、 名前の先頭に使える文字は更に制限されており、これを名前開始文字といいます。

仕様書

定義

[11] XML 1名前が使用される場所 (括弧内はXML名前空間における制約):

[12] コロン : を含む名前は、 普通は XML名前空間仕様書に従って解釈されます。 しかしながら、 XML 1.0 仕様書は、 XML 名前空間的に不正な名前も扱えることを XML 処理系に要求しています。

実際、稀ではありますが XML 名前空間に従わない : を含む名前が使われることがあります。そのほとんどは過去の遺物。

NCName

[127] XML名前空間で定義されている NCName は、 XML名前 (Name) から : を除外したものです。

[128] 「NC」とは「no colon」の意でしょうか。

[130] XML 1.0XML 1.1Name の定義がそれぞれ XML名前空間1.0XML名前空間1.1の定義の違いとなっています。また XML 1.0 4e 以前と XML 1.0 5e の定義の違いが XML名前空間1.0 2eXML名前空間1.0 3e の定義の違いになっています。

[129] XML 名前空間では、名前の中で :名前空間接頭辞局部名を区切る働きを持っています。従って決った位置にしか出現できません。

[131] XLinkxlink:label 属性の値のように XML 名前空間 (1.0) NCName を参照している規格、 XML 1.1 用に訂正しなくていいのですかねぇ。 (名無しさん 2004-03-21 09:03:35 +00:00)

[132] RIF Basic Logic Dialect ( 版) http://www.w3.org/TR/2010/REC-rif-bld-20100622/#EBNF_Grammar_for_the_Presentation_Syntax_of_RIF-BLD_.28Informative.29

XML名前空間1.1NCName を使っています。

[133] W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes ( ( 版)) http://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/#NCName

XML 互換

[124] 属性名XML互換 (XML-compatible) であるとは、 XML 1.0 Name であり、 : を含まないことをいいます >>105

[125] つまり、 NCName と同じ意味です。

[126] この制約は data-* 属性embed 要素属性自律カスタム要素属性に課されています。

XMLで始まる名前

[97] XML 1.0 5e の正誤表 S01 によると、

... はXML中核作業部会またはその後継者による、現行または将来の版の仕様によって予約されています。

[10] XML 1.0 の第1版と第5版と XML 1.1 は「XML」 (大文字小文字の任意の組み合わせ) で始まる名前を当該版または将来の版の XML 仕様により予約するとしていました。

[101] この古い予約は後述の通り実際には無視されていました。また、XML中核作業部会自体が、 XML 本体仕様とは別のXML名前空間仕様や xml:base 仕様によって予約名を使ったものを定義していました。 正誤表はこうした矛盾を解消するものとなっています。

[100] 正誤表以前も以後も、処理指令対象名は、 "XML" と丁度一致するものを除く名前と定義されています。 よって、大文字・小文字を問わず <?XML?> のような処理指令に見えるものが XML 宣言以外で文書中にあれば、 その文書は整形式ですらありません。 ですから、 XML 的には XML宣言は処理指令ではないのです。
[108] 旧仕様を厳密に適用すると、 XML SchemaXPath など NameQName の定義を参照している他の仕様にも予約が伝播することになります。
[102] このうち >>32>>34>>36>>103>>104 は正誤表以前は予約されていましたが、正誤表以後は予約されていません。

[13] xml で始まる名前 - 2003年12月 - マーク付けノート http://www.satoshii.org/markup/notes/2003/12#date12-4: >>10 の話

[14] >>13 には id="XML-foo" は OK, id="XML" は NG と書かれていますけど、どちらも駄目ではありませんか。

[15] XMLspec DTD では xml で始まる引数実体が使われています。 (名無しさん [sage])

[16] XMPP (RFC 3920) では xml-not-well-formed という要素型が定義されており、 名前空間接頭辞なしで使われています。

[17] p:master 要素には xmlhref 属性があります。 PP11 (名無しさん [sage])

[18] NCNameQName を流用している XML名前空間以外の規格は多々ありますが、そこにも xml で始まるものは予約という規則が継承されているかどうかは、ほとんどの場合極めて微妙なところです。

例として XML Schema データ型における定義を見てみましょう。

XML Schema Part 2: Datatypes Second Edition http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#QName

[Definition:] QName represents XML qualified names. The &#183;value space&#183; of QName is the set of tuples {namespace name, local part}, where namespace name is an anyURI and local part is an NCName. The &#183;lexical space&#183; of QName is the set of strings that &#183;match&#183; the QName production of [Namespaces in XML].

Note: The mapping between literals in the &#183;lexical space&#183; and values in the &#183;value space&#183; of QName requires a namespace declaration to be in scope for the context in which QName is used.

QName represents XML qualified namesXML qualified names の部分が引用元では XML名前空間 1.0qualified name という語にリンクされています。 そのリンク先の説明は some names (constructs corresponding to the nonterminal Name) may be given as qualified names で、 Name の部分が XML 1.0 の生成規則の定義へのリンクになっています。 XML 1.0 によれば names は件の予約がなされています。

と結論づけるのが妥当だと思うのですが、普通に XML Schema データ型を利用しようと思い立った人は絶対こんなところまでたどりつけませんって(w

同じようなことはたとえば XSLT 1.0 にもいえます。 でも XSLT 1.0QName を使う場所で xml から始まる名前を使っていることは普通にしばしば見かけたりします。

(名無しさん [sage])

[19] ちょっと微妙なところというのは、予約に関する規定が XML名前空間 1.0 の仕様書では名前空間宣言のところ http://www.w3.org/TR/1999/REC-xml-names-19990114/#ns-decl に書いてあって、 QName とかの定義のところにではないというところです。 XML 文書で名前空間を使ってる限りは問題ないのですが、 それ以外の似たような名前空間の仕組みがあるところで使うとなると、 予約に関する規定は適用範囲外だという主張もできなくはありません。。。

[20] JAXBjavaType 要素には xmlType 属性があります。

[24] 属性xml:langxml:base を除いて同様です。

RDF/XML Syntax Specification (Revised) http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210/#eventterm-element-attributes (名無しさん [sage])

[25] OPMLoutline 要素に xmlurl 属性があります。 (名無しさん)

[26] XML名前じゃなくて N3 の名前なのであれですが、 Evaluation and Report Language (EARL) 1.0 Schema http://www.w3.org/TR/2005/WD-EARL10-Schema-20050909/#schema-n3 では XML Schemaデータ型名前空間URIxmls: という名前空間接頭辞をあてています。 (名無しさん [sage])

[27] MXML では XML という局所名要素型があります。

MXML タグ http://www.macromedia.com/support/documentation/jp/flex/1_5/asdocs_jp/xml.html

(名無しさん [sage])

[28] xml.apache.org なる要素型名が使われています。。。 (名無しさん [sage])

[29] Burlap 1.0 Draft V9 http://www.caucho.com/burlap/burlap-draft-spec.xtp#xml

BurlapXMLデータ型に対応する要素型名xmlになっています。 (名無しさん)

[30] urn:ietf:params:xml:ns:xmpp-streamsxml-not-well-formedという要素型があります。 (名無しさん [sage])

[42] XMLの仕様書自体もXHTML版でもXML版でもxmlから始まる名前識別子実体名に使っています。 (名無しさん [sage])

[43] DASEDTDでは引数実体名前としてXMLNSxmlns.attribが使われています。

[44] XML11 には xml11 という要素型があります。 (名無しさん [sage])

[45] DC-XML には局所名XMLRepresentation という要素型があります。

(名無しさん [sage])

[46] xmlFileAdapter Element http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ipsdk/html/xsfelmxmlFileAdapter_HV01021518.asp

(名無しさん)

[47] xmlToEdit Element http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ipsdk/html/xsfelmxmlToEdit_HV01021519.asp (名無しさん)

[48] xmlToEdit Attribute http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ipsdk/html/xsfatrxmlToEdit_HV01021626.asp (名無しさん)

[49] XFA xmlConnection (名無しさん)

[51] 「XMLのXML要素」@水無月ばけらのえび日記 (2007-09-07 16:11:57 +09:00 版) http://bakera.jp/ebi/topic/2991 (名無しさん)

[52] XMLCatalogxmlcatalog 要素。 (名無しさん)

[53] DTD for XML Schemas: Part 1: Structures (2008-03-01 22:09:23 +09:00 版) http://suika.fam.cx/gate/2007/schema/schema/f3c68550ab309738bfbca89d9dee34cc/cache.html#line-321 (名無しさん)

[54] DTD for XML Schemas: Part 1: Structures (2008-03-02 11:45:18 +09:00 版) http://suika.fam.cx/gate/2007/schema/schema/47a7ad8e9435f71d8354e514109b7382/cache.html#line-399 (名無しさん)

[55] yhtml 2.1 (80 著, 2008-03-23 19:05:58 +09:00 版) http://www.yhtml.net/yhtml21.html

%xmlattrs; という引数実体が使われています。 (名無しさん)

[56] Representing Content in RDF (2008-09-06 00:14:30 +09:00 版) http://www.w3.org/TR/Content-in-RDF/#xmlContentClass (名無しさん)

[57] Ant には xmlproperty 要素があります。 (名無しさん)

[58] Cisco Enhanced Device Interface Programmer's Guide, 2.0 - XML Programmatic Interface [Cisco Enhanced Device Interface] - Cisco Systems (2008-04-11 03:34:06 +09:00 版) http://www.cisco.com/en/US/docs/net_mgmt/enhanced_device_interface/2.0/developer/guide/xml_pi.html

<rpc-reply message-id="123" 
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<data>
cpi:xml-config-data 
xmlns:cpi="http://www.cisco.com/cpi_10/schema">
    <DeviceConfiguration 
xmlns="http://www.cisco.com/edi_20/Cisco1700/12.2(15)T14/1.2/" 
xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

(名無しさん)

[59] OSTwoDevManJavaConfigurationFile - OpenSAML - Internet2 Wiki (2008-10-13 12:34:17 +09:00 版) https://spaces.internet2.edu/display/OpenSAML/OSTwoDevManJavaConfigurationFile

<XMLTooling xmlns="http://www.opensaml.org/xmltooling-config" 
	 xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
	 xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
	 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

(名無しさん)

[60] DOM XML filter pipeline configuration ( 版) http://www.indexdata.dk/zebra/doc/record-model-domxml-pipeline.tkl

要素型名として xmlreader を使っています。

[85] XML3D 0.4 Specification ( 版) http://www.xml3d.org/xml3d/specification/current/#xml3d

xml3d 要素

[88] Ant xmlcatalog 要素

[90] Ant xmlvalidate 要素

[84] IRC logs: freenode / #whatwg / 20091106 ( 版) http://krijnhoetmer.nl/irc-logs/whatwg/20091106#l-305

[110] XML事象DTD http://www.w3.org/TR/xml-events#a_DTD_definition には xml-events で始まる実体名が大量に使われています。

[111] W3C の仕様ですから誰からも文句言われる筋合いはないと思いますけど。。。

[112] rdf:XMLLiteral という RDF資源があります。 RDF/XML要素型に使うこともできますが、一般的ではありません。

[113] XMLRegistry

[114] 処理指令XML で始まる名前 → 対象名

[7] Yahoo!ウォレットAPI:

<error_results xmlns="urn:yahoo:jp:wallet">
  <xml_info>
    <version>1.0</version>
  </xml_info>

[50] Code Style Scheme には XML 要素があるようです。

[62] Metadata Requirements And Preparing Content For Digital Preservation - Metadata-1.7.2.pdf, , https://digitalpreservation.fi/files/Metadata-1.7.2.pdf#page=37

METS xmlData 要素

XML の名前から Java の名前への変換

[21] JAXB 1.0 (JSR#31) の C.2 では XML の名前を Java の名前に変換する方法が規定されています。

[22] 文字級を次のように定義します。

[6] この文字分類と次の表に基づき、改語位置 (word break) を探します。

分離子
句読点以外1つ以上の句読点句読点以外foo--bar → foo, bar
数字数字以外foo22bar → foo22, bar
数字以外数字foo22 → foo, 22
小文字小文字以外fooBar → foo, Bar
大文字大文字の後に小文字fooBar → FOO, Bar
letterletter 以外Foo〜 → Foo, 〜
letter 以外letter〜Foo → 〜, Foo
uncaseduncased 以外あFoo → あ, Foo
uncased 以外uncasedFooあ → Foo, あ

(前は前の語、後は後ろの語に属しますが、 分離子はどちらにも属しません。)

語分割して、各語頭が小文字なら大文字に替えます。 こうして得られた語をそのまま連結すれば Javaクラス名にできますし、適宜 getset を付けてメソッド名にできますし、 すべて大文字化して _ で連結すれば定数名にもできます。

応用名から XML 名への変換

[115] SOAP 1.2プログラム言語変数などの名前XML名前に変換する方法として、次の方法を推奨 (>>5) しています。

[116] 注意: SOAP RPC表現で名前を写像する方法として使うべきであるとされています SOAP 1.2 Part 2

DOM の名前から XML の名前への変換

[117] DOMとXML情報集合の項を参照。

歴史

関連

[134] Basic XML Schema Patterns for Databinding Version 1.0 ( 版) http://www.w3.org/TR/2009/NOTE-xmlschema-patterns-20090505/#pattern-IdentifierName では多くの実装が対応している NCName部分集合として ^[A-Za-z_]([A-Za-z0-9_]{0,31})$ を示しています。

メモ

[1] W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes ( ( 版)) http://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/#Name

[109] IRC logs: freenode / #whatwg / 20140407 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20140407

[121] Bug 25290 – [Custom]: Ban uppercase and leading "xml" in custom element names? ( ( 版)) https://www.w3.org/Bugs/Public/show_bug.cgi?id=25290

[135] Centralize validation/extraction of namespace/qualifiedName. Fixes https... · 7333798 · whatwg/dom ( ( 版)) https://github.com/whatwg/dom/commit/7333798b4bb4a0c08beb44a1ca677618f771f53e

[2] RFC 7480 - HTTP Usage in the Registration Data Access Protocol (RDAP) ( 版) https://tools.ietf.org/html/rfc7480#section-6

they SHOULD NOT begin with an underscore character, numerical digit, or the characters "xml".

This restriction is a union of the Ruby programming language

identifier syntax and the XML element name syntax and has two

purposes. First, client implementers using modern programming

languages such as Ruby or Java can use libraries that automatically

promote JSON names to first-order object attributes or members.

Second, a clean mapping between JSON and XML is easy to accomplish

using these rules.

[61] XEP-0322: Efficient XML Interchange (EXI) Format () https://xmpp.org/extensions/xep-0322.html

                 xmlns:exi='http://jabber.org/protocol/compress/exi'>

    exi:xmlns prefix='' namespace='jabber:client'/