ぽざうねっと

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  396  : 記事  0  : コメント  1030  : トラックバック  66

ニュース

さて、今年の秋は何を漬けようか

書庫

日記カテゴリ

Accessory

Community

Private

昨日の XML Schema のデータ型に Name と NCName と QName という似たようなデータ型があります。
これはいったいなんでしょう?
まず、QName とは属性名や要素名の形式です。
xsl:stylesheet のように名前空間接頭辞:localName の形式です。
これに対して展開された名前というものが存在します。
これは "http://www.w3.org/1999/XSL/Transform"+"stylesheet" のように名前空間を URI に展開します。
つまり、同じ名前空間に属する同じ localName の要素でも QName は違う可能性がありますが、展開された名前は必ず一致します。
この、名前空間接頭辞:localName の形式を QName といいます。
データ型としてわかりやすいのは、xsd:element 要素の name 属性とかでしょうか。

たいして、Name と NCName は要素内容や属性値に使用できる文字の集合を表しています。
要素名や属性名に使用できる文字で構成された文字列データということです。
そのため、xsd:string から派生したものになっています。
NCName とは Name で使用される文字から : を取り除いたものです。
XML において名前に : は含むことができます。
ただし、名前空間とのデリミタとしても使用されるため、推奨されていません。(パーサーによってはエラーにもなりますね)
要するにまぎらわしいんですよ。

ID データ型は NCName から派生しています。
つまり、ID データ型に指定された属性値には : を含むことができないのです。
そういえば、ASP.NET で id 属性にレンダリングされる Control.ClientID は Control.UniqueID の : を _ に置換したものですね。
(ASP.NET 2.0 以降なら $ か。まあ $ は ID 型や NCName 型以前に Name 型として不適なので同じですけど)
それもちゃんと理由があるわけですね。
ま、これは XML Schema の ID 型というか DTD の ID 型なんですけれども。
XML Schema の ID 型も DTD の ID 型に対応させるためにあるわけなので、結局は同じ話です。
投稿日時 : 2007年3月15日 1:35

コメント

# re: Name と NCName と QName 2008/04/08 22:37 komikoni
凄く分かりやすい解説ありがとうございます。

Qnameで検索しても結局何なのかよく分からない
説明ばかりで・・・・

# re: Name と NCName と QName 2008/04/08 22:54 THREE-ONE
そうなんですよ。
QName ってよく出てきて、かなり大事な単語なんですけど、結構知ってて当たり前と扱われたたりするんですよね。

Post Feedback

タイトル
名前
Url:
コメント: