web-dev-qa-db-ja.com

xs:NCNameタイプとは何ですか?いつ使用する必要がありますか?

Xmlファイルの1つをスキーマジェネレーターで実行し、1つのノードを除いて、生成されたものはすべて予期したものでした。

<xs:element name="office" type="xs:NCName"/>

xs:NCName?そして、なぜxs:string

92
user189320

NCName は、非コロン化名です。 "名前"。修飾名であるQNameと比較して「ns:name」。名前が異なる名前空間で修飾されることになっていない場合、それらはNCNamesです。

xs:stringは名前にまったく制限を加えませんが、xs:NCNameは基本的に「:」が文字列に含まれることを禁止します。

87

@skylはこの答えを書くことを私に実際に刺激しましたので、冗長性に注意してください。

NCNameは「非コロン化名」を表します。 NCNameは、XMLスキーマの正規表現[\i-[:]][\c-[:]]*として定義できます

...そして、その正規表現はどういう意味ですか?

\iおよび\cは、XMLスキーマ定義で定義された複数文字エスケープです。
http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\iは初期XML名文字セットのエスケープであり、\cはXML名文字セットです。 [\i-[:]]は、セット\iで構成されるセットを意味します。ただし、コロン文字:で構成されるセットは除きます。したがって、平易な英語では、「:ではなく、任意の初期文字」を意味します。正規表現全体は、「コロンではなく、1つの初期XML名文字に続き、コロンではなく0個以上のXML名文字が続きます」と読みます。

NCNameの実際的な制限

NCNameの実際的な制限は、:@$%&/+,;、空白文字または異なる括弧。さらに、NCNameは数字、ドット、またはマイナス文字で始めることはできませんが、後でNCNameに表示することはできます。

NCNameが必要な場所

名前空間準拠のXMLドキュメントでは、すべての名前は修飾名またはNCNamesでなければなりません。 次の値はNCNamesでなければなりません(修飾名ではありません):

  • 名前空間プレフィックス
  • iDを表す値
  • iDREFを表す値
  • 表記法を表す値
  • 命令ターゲットの処理
  • エンティティ名
105
jasso

実用的に...

使用可能な文字:-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz

また、-および.は、値の最初の文字として使用できません。

使用できない文字:!"#$%&'()*+,/:;<=>?@[\]^`{|}~

28
izilotti

http://books.xmlschemata.org/relaxng/ch19-77215.html

スペースやコロンは使用できません。 「_」および「-」を許可します。

文字列の代わりにこれを使用して、値が許可されているものに制限されていることを検証できるようにします。これは、たとえばDjangoの「スラッグ」の概念のような名前/識別子の特定の規則にうまく対応しています。

[\i-[:]][\c-[:]]*は英語に翻訳されます。

4
Skylar Saveland