* SGML での名前 [5] > :名前 (name): 最初の[[文字]]が[[名前開始文字]]である[[名前字句]]。 ([[JIS X 4151]]‐1992 3. (194)) [6] 名前の長さは [CODE(SGML)[[[NAMELEN]]]] 以下でなければなりません。 (8.3.1 参照。) [7] 名前は、 [CODE(SGML)[[[NAMECASE]]]] 引数の指定によっては対応する[[大文字]]に置換されます。 (8.3 参照。) [[#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] ]] [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宣言]]は処理指令ではないのです。]] [11] XML 1.0 で[CODE(ABNF)[名前]]が使用される場所: - [[名前並び]] (属性型 [CODE(XML)[[[IDREFS]]]], [CODE(XML)[[[ENTITIES]]]]) - 処理指令の対象名 - [[要素型名]] ([[文書型名]], [[タグ]]の[CODE(ABNF)[名前]], [[要素型宣言]]の[CODE(ABNF)[名前]], [[属性定義並び宣言]]の[CODE(ABNF)[名前]], [[内容モデル]]中の[CODE(ABNF)[名前]]) - [[属性名]] - 属性型 [CODE(XML)[[[ID]]]], [CODE(XML)[[[IDREF]]]], [CODE(XML)[[[ENTITY]]]], [CODE(XML)[[[NOTATION]]]] の[[属性値]] ([[開始タグ]]中の[[属性値表記]]内, [[属性定義]]中の属性値表記内) - [[実体名]] ([[実体参照]]の[CODE(ABNF)[名前]], [[実体宣言]]の[CODE(ABNF)[名前]]) - [[記法名]] (実体宣言内, 属性定義内, [[記法宣言]]の[CODE(ABNF)[名前]]) [12] コロン [CODE(XML)[:]] を含む[CODE(ABNF)[名前]]は、 普通は [[XML名前空間]]仕様書に従って解釈されます。 しかしながら、 XML 1.0 仕様書は、 XML 名前空間的に不正な[CODE(ABNF)[名前]]も扱えることを XML [[処理系]]に要求しています。 実際、稀ではありますが XML 名前空間に従わない [CODE(XML)[:]] を含む[CODE(ABNF)[名前]]が使われることがあります。[WEAK[そのほとんどは過去の遺物。]] - [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]) [[#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]] ''[[日渡怜]]'':