[91] [[XML]] における[DFN[[RUBYB[[[名前]]]@en[name]]]] ([[生成規則]] [DFN[[CODE(ABNF)@en[[[Name]]]]]]) は、[[要素]]、[[属性]]、その他の構造を識別する[[文字列]]です。 [92] [[名前]]で使える[[文字]]は[[XMLにおける文字]]の[[部分集合]]です。これを[DFN[[[名前文字]]]]といいます。また、 [[名前]]の先頭に使える[[文字]]は更に制限されており、これを[DFN[[[名前開始文字]]]]といいます。 * 仕様書 [REFS[ - [31] [CITE@en[Extensible Markup Language (XML) 1.1 (Second Edition)]] ([TIME[2006-09-29 19:02:09 +09:00]] 版) - [105] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-11-08 00:23:32 +09:00]] 版) ]REFS] * 定義 - [9] [CODE(ABNF)[[DFN[[RUBYB[名前] [Name]]]] := (Letter / "_" / ":") *名前文字 ;; XML 1.0 [5] ]] - [8] [CODE(ABNF)[[DFN[[RUBYB[名前文字] [NameChar]]]] := Letter / [RUBYB[数字] [Digit]] / "." / "-" / "_" / ":" / [RUBYB[結合文字] [CombiningChar]] / [RUBYB[拡張子] [Extender]] ;; XML 1.0 [4] ]] [11] [[XML 1]] で[CODE(ABNF)[名前]]が使用される場所 (括弧内は[[XML名前空間]]における制約): - [[処理指令]]の[[対象名]] (注 >>10) ([CODE@en[[[NCName]]]]) - [[要素型名]] -- [[文書型名]] ([CODE@en[[[QName]]]]) -- [[開始タグ]], [[空要素タグ]], [[終了タグ]]中の[CODE(ABNF)[[[名前]]]] ([[名前空間接頭辞]]が[[宣言]]された[CODE@en[[[QName]]]]) -- [[要素型宣言]]中の[CODE(ABNF)[[[名前]]]] ([CODE@en[[[QName]]]]) -- [[属性定義並び宣言]]中の[CODE(ABNF)[[[名前]]]] ([CODE@en[[[QName]]]]) -- [[モデル群]]中の[CODE(ABNF)[[[名前]]]] ([CODE@en[[[QName]]]]) - [[属性名]] -- [[属性指定]]中の[CODE(ABNF)[[[名前]]]] ([[名前空間接頭辞]]が[[宣言]]された[CODE@en[[[QName]]]]) -- [[属性定義]]中の[CODE(ABNF)[[[名前]]]] ([CODE@en[[[QName]]]]) - [[識別子]] ([CODE@en[[[NCName]]]]なら[[名前空間妥当]]) -- [[識別子属性]] ([CODE(XML)@en[[[ID]]]]), [[識別子参照属性]] ([CODE(ABNF)@en[[[IDREF]]]], [CODE(ABNF)@en[[[IDREFS]]]]) の値 ([[開始タグ]]内, [[空要素タグ]]内, [[属性定義]]内の[[属性値表記]]の値) - [[実体名]] -- [[実体宣言]]内の[CODE(ABNF)[[[名前]]]] ([CODE@en[[[NCName]]]]) -- [[実体参照]]内の[CODE(ABNF)[[[名前]]]] ([CODE@en[[[NCName]]]]) -- [[実体属性]] ([CODE(XML)@en[[[ENTITY]]]], [CODE(XML)@en[[[ENTITIES]]]]) の値 ([[開始タグ]]内, [[空要素タグ]]内, [[属性定義]]内の[[属性値表記]]の値) ([CODE@en[[[NCName]]]]なら[[名前空間妥当]]) - [[記法名]] -- [[記法宣言]]内の[CODE(ABNF)[[[名前]]]] ([CODE@en[[[NCName]]]]) -- [[記法属性]] ([CODE(XML)@en[[[NOTATION]]]]) の[[属性定義]]内の[[名前群]]中の[CODE(ABNF)[[[名前]]]] ([CODE@en[[[NCName]]]]) -- [[記法属性]] ([CODE(XML)@en[[[NOTATION]]]]) の値 ([[開始タグ]]内, [[空要素タグ]]内, [[属性定義]]内の[[属性値表記]]の値) ([CODE@en[[[NCName]]]]なら[[名前空間妥当]]) [12] コロン [CODE(XML)[:]] を含む[CODE(ABNF)[名前]]は、 普通は [[XML名前空間]]仕様書に従って解釈されます。 しかしながら、 XML 1.0 仕様書は、 XML 名前空間的に不正な[CODE(ABNF)[名前]]も扱えることを XML [[処理系]]に要求しています。 実際、稀ではありますが XML 名前空間に従わない [CODE(XML)[:]] を含む[CODE(ABNF)[名前]]が使われることがあります。[WEAK[そのほとんどは過去の遺物。]] * [CODE@en[XML]]で始まる名前 [97] [[XML 1.0 5e]] の正誤表 S01 によると、 - [98] 「[CODE(XML)@en[[[xml-]]]]」([[小文字]]) で始まる[[処理指令]]の[[対象名]] - [99] 「[CODE(XML)@en[[[xml:]]]]」([[小文字]]) で始まる[[要素名]]、[[属性名]] ... は[[XML中核作業部会]]またはその後継者による、現行または将来の版の仕様によって予約されています。 [REFS[ - [96] [CITE@en[Errata in REC-xml-20081126]] ([TIME[2013-02-13 15:08:50 +09:00]] 版) ]REFS] [10] [[XML 1.0]] の第1版と第5版と [[XML 1.1]] は「[CODE[[[XML]]]]」 ([[大文字]]、[[小文字]]の任意の組み合わせ) で始まる[[名前]]を当該版または将来の版の [[XML]] 仕様により予約するとしていました。 [REFS[ - [93] [CITE[Extensible Markup Language (XML) 1.0]] ([TIME[2000-05-09 16:35:50 +09:00]] 版) - [94] [CITE[Extensible Markup Language (XML) 1.0]] ([TIME[2000-05-09 16:35:50 +09:00]] 版) - [95] [CITE[Extensible Markup Language (XML) 1.0]] ([TIME[2000-05-09 16:35:50 +09:00]] 版) ]REFS] [101] この古い予約は後述の通り実際には無視されていました。また、[[XML中核作業部会]]自体が、 [[XML]] 本体仕様とは別の[[XML名前空間]]仕様や [CODE(XMLa)@en[[[xml:base]]]] 仕様によって予約名を使ったものを定義していました。 正誤表はこうした矛盾を解消するものとなっています。 ;; [100] 正誤表以前も以後も、[[処理指令]]の[[対象名]]は、 [CODE(ABNF)["XML"]] と丁度一致するものを''除く''[CODE(ABNF)[名前]]と定義されています。 よって、[WEAK[大文字・小文字を問わず]] [SAMP(XML)[]] のような処理指令に見えるものが [WEAK[XML 宣言以外で]]文書中にあれば、 その文書は[[整形式]]ですらありません。 [WEAK[ですから、 XML 的には [[XML宣言]]は処理指令ではないのです。]] [REFS[ - [33] [[XML 1.0]]および[[XML 1.1]]は、最初の3文字が[CODE@en[[[XML]]]] ([[大文字]]・[[小文字]]を''問いません''。) であるような'''[[要素名]]'''、'''[[属性名]]'''、'''[[対象名]]'''を[[予約]]しています。 - [32] [[XML名前空間 1.0]]および[[XML名前空間 1.1]]は、 最初の3文字が[CODE@en[[[XML]]]] ([[大文字]]・[[小文字]]を''問いません''。) であるような'''[[名前空間接頭辞]]'''を[[予約]]しています。 - [34] [[XML名前空間 1.0]]および[[XML名前空間 1.1]]は、 最初の3文字が[CODE@en[[[XML]]]] ([[大文字]]・[[小文字]]を''問いません''。) であるような'''[[局所名]]'''をすすめられないと述べています。 - [35] [[XML 1.0]]および[[XML 1.1]]は[[処理指令]]のようなものの[[対象名]]のようなものとして[CODE(XML)@en[[[xml]]]]を定義しています ([[XML宣言]]および[[文宣言]])。 - [106] [[HTML Standard]] は [CODE(HTMLa)@en[[[data-*]]]] [[属性]]の[[名前]]の後半の先頭に [CODE@en[[[XML]]]] ([[大文字]]・[[小文字]]を''問いません''。) を使うことを禁じています。 [SRC[>>105]] - [107] [[HTML Standard]] は [CODE(HTMLe)@en[[[embed]]]] [[要素]]の[[属性]]の[[名前]]の先頭に [CODE@en[[[XML]]]] ([[大文字]]・[[小文字]]を''問いません''。) を使うことを禁じています。 [SRC[>>105]] - [41] [[処理指令]]の[[対象名]]として[CODE(XMLa)@en[[[xml-stylesheet]]]]が定義されています。 - [36] [[XML名前空間 1.0]]および[[XML名前空間 1.1]]は[[名前空間接頭辞]]として[CODE(XML)@en[[[xml]]]]および[CODE(XML)@en[[[xmlns]]]]を定義しています。 - [37] [[XML 1.0]]および[[XML 1.1]]は[[属性名]]として[CODE(XMLa)@en[[[xml]]:[[lang]]]]および[CODE(XMLa)@en[[[xml]]:[[space]]]]を定義しています。 - [38] [[XML名前空間 1.0]]および[[XML名前空間 1.1]]は[[属性名]]として[CODE(XMLa)@en[[[xmlns]]]]を定義しています。 - [39] [[XML基底]]は[[属性名]]として[CODE(XMLa)@en[[[xml]]:[[base]]]]を定義しています。 - [40] [[属性名]]として[CODE(XMLa)@en[[[xml]]:[[id]]]]が定義されています。 - [103] [[名前]] [CODE(XML)@en[[[xml:Father]]]] は予約されています。 - [104] [[xml名前空間]]を定義する [[XML Schema]] [[スキーマ]]は [CODE(XML)@en[[[xml:specialAttrs]]]] を定義しています。 ]REFS] ;; [102] このうち >>32、>>34、>>36、>>103、>>104 は正誤表以前は予約されていましたが、正誤表以後は予約されていません。 - [13] ''xml で始まる名前 - 2003年12月 - マーク付けノート'' : >>10 の話 - [14] >>13 には [Q[[CODE[id="XML-foo"]] は OK, [CODE[id="XML"]] は NG]] と書かれていますけど、どちらも駄目ではありませんか。 [15] [[XMLspec]] [[DTD]] では [CODE(XML)[xml]] で始まる[[引数実体]]が使われています。 ([[名無しさん]] [sage]) [16] [[XMPP]] ([[RFC 3920]]) では [CODE(XMLe)[[[xml-not-well-formed]]]] という[[要素型]]が定義されており、 [[名前空間接頭辞]]なしで使われています。 [17] [CODE(XMLe)[[QN[p:[[master]]] [urn:schemas-microsoft-com:office:powerpoint]]]] [[要素]]には [CODE(XMLa)[[[xmlhref]]]] [[属性]]があります。 [SRC[PP11]] ([[名無しさん]] [sage]) [18] [[NCName]] や [[QName]] を流用している [[XML名前空間]]以外の規格は多々ありますが、そこにも [Q[[CODE(XML)[xml]] で始まるものは予約]]という規則が継承されているかどうかは、ほとんどの場合極めて微妙なところです。 例として [[XML Schema]] データ型における定義を見てみましょう。 [CITE[XML Schema Part 2: Datatypes Second Edition]] > [Definition:] QName represents XML qualified names. The ·value space· of QName is the set of tuples {namespace name, local part}, where namespace name is an anyURI and local part is an NCName. The ·lexical space· of QName is the set of strings that ·match· the QName production of [Namespaces in XML]. > Note: The mapping between literals in the ·lexical space· and values in the ·value space· of QName requires a namespace declaration to be in scope for the context in which QName is used. [Q@en[QName represents XML qualified names]] の [Q[XML qualified names]] の部分が引用元では [[XML名前空間 1.0]] の [Q@en[qualified name]] という語にリンクされています。 そのリンク先の説明は [Q@en[some names (constructs corresponding to the nonterminal Name) may be given as [DFN[qualified names]]]] で、 [Q@en[Name]] の部分が [[XML 1.0]] の生成規則の定義へのリンクになっています。 [[XML 1.0]] によれば [Q@en[names]] は件の予約がなされています。 と結論づけるのが妥当だと思うのですが、普通に [[XML Schema]] データ型を利用しようと思い立った人は絶対こんなところまでたどりつけませんって(w 同じようなことはたとえば [[XSLT 1.0]] にもいえます。 でも [[XSLT 1.0]] で [[QName]] を使う場所で [CODE(XML)[xml]] から始まる名前を使っていることは普通にしばしば見かけたりします。 ([[名無しさん]] [sage]) [19] ちょっと微妙なところというのは、予約に関する規定が [[XML名前空間 1.0]] の仕様書では[[名前空間]]の[[宣言]]のところ に書いてあって、 [[QName]] とかの定義のところにではないというところです。 [[XML]] [[文書]]で名前空間を使ってる限りは問題ないのですが、 それ以外の似たような名前空間の仕組みがあるところで使うとなると、 予約に関する規定は適用範囲外だという主張もできなくはありません。。。 [20] [[JAXB]] の [CODE(XMLe)[[[javaType]]]] [[要素]]には [CODE(XMLa)[[[xmlType]]]] [[属性]]があります。 [23] [[RDF/XML]] では[[要素型名]]の [[QName]] が予約名 (最初の3文字が大文字・小文字の [CODE(XML)[xml]]) の時は無視することになっています。 [CITE[RDF/XML Syntax Specification (Revised)]] ([[名無しさん]] [sage]) [24] [[属性]]も [CODE(XMLa)[[[xml]]:[[lang]]]] と [CODE(XMLa)[[[xml]]:[[base]]]] を除いて同様です。 [CITE[RDF/XML Syntax Specification (Revised)]] ([[名無しさん]] [sage]) [25] [[OPML]] の [CODE(XMLe)@en[[[outline]]]] 要素に [CODE(XMLa)@en[[[xmlurl]]]] 属性があります。 ([[名無しさん]]) [26] [[XML]] の[[名前]]じゃなくて [[N3]] の名前なのであれですが、 [CITE@en[Evaluation and Report Language (EARL) 1.0 Schema]] では [[XML Schema]] の[[データ型]]の[[名前空間URI]] に [CODE@en[xmls:]] という[[名前空間接頭辞]]をあてています。 ([[名無しさん]] [sage]) [27] [[MXML]] では [CODE(XMLe)@en[[[XML]]]] という[[局所名]]の[[要素型]]があります。 [CITE[MXML タグ]] ([[名無しさん]] [sage]) [28] [CODE(XMLe)@en[[[xml.apache.org]]]] なる要素型名が使われています。。。 ([[名無しさん]] [sage]) [29] [CITE[Burlap 1.0 Draft V9]] [[Burlap]]の[[XML]][[データ型]]に対応する[[要素型名]]が[CODE(XMLe)@en[[[xml]]]]になっています。 ([[名無しさん]]) [30] [CODE(URI)@en[[[urn:ietf:params:xml:ns:xmpp-streams]]]]に[CODE(XMLe)@en[[QN[[[xml-not-well-formed]]] [urn:ietf:params:xml:ns:xmpp-streams]]]]という[[要素型]]があります。 ([[名無しさん]] [sage]) [42] [[XML]]の仕様書自体も[[XHTML]]版でも[[XML]]版でも[CODE(XML)@en[xml]]から始まる[[名前]]を[[識別子]]や[[実体名]]に使っています。 ([[名無しさん]] [sage]) [43] [[DASE]]の[[DTD]]では[[引数実体]]の[[名前]]として[CODE(XML)@en[XMLNS]]や[CODE(XML)@en[xmlns.attrib]]が使われています。 [44] [[XML11]] には [CODE(XMLe)@en[[[xml11]]]] という[[要素型]]があります。 ([[名無しさん]] [sage]) [45] [[DC-XML]] には[[局所名]]が [CODE(XMLe)@en[[[XMLRepresentation]]]] という[[要素型]]があります。 ;; [CITE@en[Expressing Dublin Core metadata using XML]] ([[名無しさん]] [sage]) [46] [CITE[[CODE(XMLe)@en[[[xmlFileAdapter]]]] Element]] ([[名無しさん]]) [47] [CITE[[CODE(XMLe)@en[[[xmlToEdit]]]] Element]] ([[名無しさん]]) [48] [CITE[[CODE(XMLa)@en[[[xmlToEdit]]]] Attribute]] ([[名無しさん]]) [49] [[XFA]] [CODE(XMLe)@en[[QN[[[xmlConnection]]] [http://www.xfa.org/schema/xfa-connection-set/2.4/]]]] ([[名無しさん]]) [51] [CITE@ja[「XMLのXML要素」@水無月ばけらのえび日記]] ([CODE[2007-09-07 16:11:57 +09:00]] 版) ([[名無しさん]]) [52] [[XMLCatalog]] の [CODE(XMLe)@en[[[xmlcatalog]]]] [[要素]]。 ([[名無しさん]]) [53] [CITE@en[DTD for XML Schemas: Part 1: Structures]] ([CODE[2008-03-01 22:09:23 +09:00]] 版) ([[名無しさん]]) [54] [CITE@en[DTD for XML Schemas: Part 1: Structures]] ([CODE[2008-03-02 11:45:18 +09:00]] 版) ([[名無しさん]]) [55] [CITE[yhtml 2.1]] ([[80]] 著, [CODE[2008-03-23 19:05:58 +09:00]] 版) [CODE(XML)@en[%[[xmlattrs]];]] という[[引数実体]]が使われています。 ([[名無しさん]]) [56] [CITE@en[Representing Content in RDF]] ([CODE[2008-09-06 00:14:30 +09:00]] 版) ([[名無しさん]]) [57] [[Ant]] には [CODE(XMLe)@en[[[xmlproperty]]]] [[要素]]があります。 ([[名無しさん]]) [58] [CITE[Cisco Enhanced Device Interface Programmer's Guide, 2.0 - XML Programmatic Interface '''['''Cisco Enhanced Device Interface''']''' - Cisco Systems]] ([CODE[2008-04-11 03:34:06 +09:00]] 版) > [PRE(XML example code)[ ]PRE] ([[名無しさん]]) [59] [CITE[OSTwoDevManJavaConfigurationFile - OpenSAML - Internet2 Wiki]] ([CODE[2008-10-13 12:34:17 +09:00]] 版) > [PRE(XML example code)[ ]PRE] ([[名無しさん]]) [60] [CITE[DOM XML filter pipeline configuration]] ([TIME[2008-10-11 22:18:57 +09:00]] 版) [[要素型名]]として [CODE(XMLe)@en[[[xmlreader]]]] を使っています。 [85] [CITE@en[XML3D 0.4 Specification]] ([TIME[2011-05-27 23:40:28 +09:00]] 版) [CODE(XMLe)@en[[[xml3d]]]] [[要素]] [88] [[Ant]] [CODE(XMLe)@en[[[xmlcatalog]]]] [[要素]] [REFS[ - [87] [CITE@en-us[XMLCatalog Type]] ([TIME[2011-03-24 05:35:46 +09:00]] 版) ]REFS] [90] [[Ant]] [CODE(XMLe)@en[[[xmlvalidate]]]] [[要素]] [REFS[ - [89] [CITE[XMLValidate Task]] ([TIME[2011-03-24 05:35:46 +09:00]] 版) ]REFS] [84] [CITE[IRC logs: freenode / #whatwg / 20091106]] ([TIME[2009-12-16 07:56:02 +09:00]] 版) * XML の名前から Java の名前への変換 [21] [[JAXB]] 1.0 ([[JSR#31]]) の C.2 では [[XML]] の名前を [[Java]] の名前に変換する方法が規定されています。 [22] [[文字級]]を次のように定義します。 - 句読点 (punctuation character): [CODE(charname)[[[HYPHEN-MINUS]]]], [CODE(charname)[[[FULL STOP]]]], [CODE(charname)[[[COLON]]]], [CODE(charname)[[[LOW LINE]]]], [CODE(charname)[[[MIDDLE DOT]]]], [CODE(charname)[[[GREEK ANO TELELA]]]], [CODE(charname)[[[ARABIC END OF AYAH]]]], [CODE(charname)[[[ARABIC START OF RUB EL HIZB]]]] - Letter: [[Unicode]] の定義によります。 -- 大文字 (upper‐case letter): [[Unicode]] の定義によります。 -- 小文字 (lowercase [INS[(まま)]] letter): [[Unicode]] の定義によります。 -- uncased: 大文字・小文字以外の letter。 - 数字 (digit): [[Unicode]] の定義によります。 - 記号 (mark): [[Java]] の識別子で使える文字のうち、 句読点と letter と数字以外のもの。 この文字分類と次の表に基づき、改語位置 (word break) を探します。 ,前 ,分離子 ,後 ,例 ,句読点以外 ,1つ以上の句読点 ,句読点以外 ,"foo--bar → foo, bar" ,数字 , ,数字以外 ,"foo22bar → foo22, bar" ,数字以外 , ,数字 ,"foo22 → foo, 22" ,小文字 ,小文字以外 ,"fooBar → foo, Bar" ,大文字 , ,大文字の後に小文字 ,"fooBar → FOO, Bar" ,letter , ,letter 以外 ,"Foo〜 → Foo, 〜" ,letter 以外 , ,letter ,"〜Foo → 〜, Foo" ,uncased , ,uncased 以外 ,"あFoo → あ, Foo" ,uncased 以外 , ,uncased ,"Fooあ → Foo, あ" (前は前の語、後は後ろの語に属しますが、 分離子はどちらにも属しません。) 語分割して、各語頭が小文字なら大文字に替えます。 こうして得られた語をそのまま連結すれば [[Java]] の[[クラス名]]にできますし、適宜 [CODE(Java)[get]] や [CODE(Java)[set]] を付けて[[メソッド名]]にできますし、 すべて大文字化して [CODE(Java)[_]] で連結すれば[[定数名]]にもできます。 * メモ [1] [CITE@EN[W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes]] ( ([TIME[2012-04-05 06:34:51 +09:00]] 版))