Xmlファイルの1つをスキーマジェネレーターで実行し、1つのノードを除いて、生成されたものはすべて予期したものでした。
<xs:element name="office" type="xs:NCName"/>
xs:NCName
?そして、なぜxs:string
?
NCName は、非コロン化名です。 "名前"。修飾名であるQNameと比較して「ns:name」。名前が異なる名前空間で修飾されることになっていない場合、それらはNCNamesです。
xs:stringは名前にまったく制限を加えませんが、xs:NCNameは基本的に「:」が文字列に含まれることを禁止します。
@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に表示することはできます。
名前空間準拠のXMLドキュメントでは、すべての名前は修飾名またはNCNamesでなければなりません。 次の値はNCNamesでなければなりません(修飾名ではありません):
実用的に...
使用可能な文字:-
、.
、0
、1
、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
、p
、q
、r
、s
、t
、u
、 v
、w
、x
、y
、z
また、-
および.
は、値の最初の文字として使用できません。
使用できない文字:、!
、"
、#
、$
、%
、&
、'
、(
、)
、*
、+
、,
、/
、:
、;
、<
、=
、>
、?
、@
、[
、\
、]
、^
、`
、{
、|
、}
、~
http://books.xmlschemata.org/relaxng/ch19-77215.html
スペースやコロンは使用できません。 「_」および「-」を許可します。
文字列の代わりにこれを使用して、値が許可されているものに制限されていることを検証できるようにします。これは、たとえばDjangoの「スラッグ」の概念のような名前/識別子の特定の規則にうまく対応しています。
[\i-[:]][\c-[:]]*
は英語に翻訳されます。