[81] > 名前ってなんなの? バラの花を別の名前で呼んでも、甘い香りは同じこと。 > ――ウィリアム・シェイクスピア, ロミオとジュリエット * SGML での名前 [5] > :名前 (name): 最初の[[文字]]が[[名前開始文字]]である[[名前字句]]。 ([[JIS X 4151]]‐1992 3. (194)) [6] 名前の長さは [CODE(SGML)[[[NAMELEN]]]] 以下でなければなりません。 (8.3.1 参照。) [7] 名前は、 [CODE(SGML)[[[NAMECASE]]]] 引数の指定によっては対応する[[大文字]]に置換されます。 (8.3 参照。) [50] yt ([[名無しさん]] [WEAK[2007-08-27 13:31:41 +00:00]]) [[#comment]] ** XML での名前 - [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] ]] [31] 仕様書: - [[XML 1]] -- [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[そのほとんどは過去の遺物。]] [[#comment]] ** [CODE@en[XML]]で始まる名前 [10] 1文字目から3文字目が [CODE(ABNF)["XML"]] (大文字・小文字を問わない。) である[CODE(ABNF)[名前]]は、 XML 及び関連仕様によって予約されています。 を参照。 この制限は[CODE(ABNF)[名前]]が使われるすべての場面に影響します。 しかし、その使用がまったく禁止されているのではなく、 [[W3C]] が認めていない使用が禁止されているのだということに注意してください。 ただし、[[処理指令]]の[[対象名]]は、 [CODE(ABNF)["XML"]] と丁度一致するものを''除く''[CODE(ABNF)[名前]]と定義されています。 よって、[WEAK[大文字・小文字を問わず]] [SAMP(XML)[]] のような処理指令に見えるものが [WEAK[XML 宣言以外で]]文書中にあれば、 その文書は[[整形式]]ですらありません。 [WEAK[ですから、 XML 的には [[XML宣言]]は処理指令ではないのです。]] - [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宣言]]および[[文宣言]])。 - [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]]]]が定義されています。 - [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]]]] を使っています。 ([[名無しさん]]) [[#comment]] * 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)[_]] で連結すれば[[定数名]]にもできます。 [[#comment]] * メモ - [1] 名前というのは、考えてみれば本当に恐ろしい。名前の指す対象は名前にとらわれてしまう。怖いなあ。 - [2] >>1 もっと広く、[[言葉]]って奴は・・・言葉には[[言霊]]が宿るのですよ。 - [3] 名前の付いていない化け物より名前の付いた化け物の方が手を打ちやすい、という諺(?)もある。それだけ名前の威力は絶大だ。 - [4] [WEAK[2003-10-02 10:56:32 +00:00]] ''[[日渡怜]]'':