xs:NCNameタイプとは何ですか?いつ使用する必要がありますか?
-
06-07-2019 - |
質問
XMLファイルの1つをスキーマジェネレーターで実行し、1つのノードを除いて、生成されたものはすべて予想どおりでした:
<xs:element name="office" type="xs:NCName"/>
xs:NCName
とは正確には何ですか?そして、なぜxs:string
ではなくそれを使用するのですか?
解決
NCName は、非コロン化名です。 <!> quot; name <!> quot;。修飾名であるQNameと比較して<!> quot; ns:name <!> quot;。名前が異なる名前空間で修飾されることになっていない場合、それらはNCNamesです。
xs:stringは名前にまったく制限を加えませんが、xs:NCNameは基本的に<!> quot;:<!> quot;を許可しません。文字列に表示されます。
他のヒント
@skylはこの答えを書くように私を実際に刺激しましたので、冗長性に注意してください。
NCName
は、<!> quot;非コロン化された名前<!> quot;を表します。 NCNameは、XMLスキーマの正規表現[\i-[:]][\c-[:]]*
...そしてその正規表現はどういう意味ですか?
\i
および\c
は、XMLスキーマ定義で定義された複数文字のエスケープです。
http://www.w3.org/TR/xmlschema-2/#dt-ccesN
[\i-[:]]
は初期XML名文字セットのエスケープで、:
はXML名文字セットです。 @
は、コロン文字$
で構成されるセットを除く、セット%
で構成されるセットを意味します。したがって、平易な英語では、<!> quot;任意の初期文字を意味しますが、&
<!> quot;は意味しません。正規表現全体は、<!> quot;コロンではなく、最初のXML名文字の1つとして読み取られ、その後にコロンではなく0個以上のXML名文字が続きます。<!> quot;
NCNameの実際の制限
NCNameの実際の制限は、/
、+
、,
、;
、<=>、<=>、<=>、<=>、<などの複数の記号文字を含めることができないことです。 =>、空白文字または異なる括弧。さらに、NCNameは、数字、ドット、またはマイナス文字で始めることはできませんが、後でNCNameに表示できます。
NCNameが必要な場所
名前空間準拠のXMLドキュメントでは、すべての名前は修飾名またはNCNamesでなければなりません。 次の値はNCNames(修飾名ではない)でなければなりません:
- 名前空間プレフィックス
- IDを表す値
- IDREFを表す値
- NOTATIONを表す値
- 命令ターゲットの処理
- エンティティ名
実際に話す...
使用可能な文字: -
、。
、 0
、 1
、< code> 2 、 3
、 4
、 5
、 6
、 7
、 8
、 9
、 A
、 B
、 C
、 D
、 E
、 F
、 G
、 H
、 I
、 J
、 K
、 L
、 M
、 N
、 O
、 P
、 Q
、 R
、 S
、 T
、 U
、 V
、 W
、 X
、 Y
、 Z
、 _
、 a
、 b
、 c
、 d
、 e
、 f
、 g
、 h
、 i
、 j
、 k
、 l
、 m
、 n
、 o
、< code> p 、 q
、 r
、 s
、 t
、 u コード>、
v
、 w
、 x
、 y
、 z
また、-
および。
は値の最初の文字として使用できません。
使用不可の文字:
、!
、&quot;
、#
、< code> $ 、%
、&amp;
、 '
、(
、)
、 *
、 +
、、
、 /
、:
、< code>; 、&lt;
、 =
、&gt;
、?
、 @
、 [
、 \
、]
、 ^
、 `
、 {
、 |
、}
、〜
http://books.xmlschemata.org/relaxng/ch19-77215.html
スペースやコロンは使用できません。 &quot; _&quot;を許可しますおよび&quot;-&quot;。
値が許可されているものに制限されていることを検証できるように、文字列の代わりにこれを使用します。これは、たとえばdjangoの「スラッグ」の概念のような名前/識別子の特定の規則にうまく対応しています。
[\ i-[:]] [\ c-[:]] *
が英語に翻訳してくれる人に賛成です。