我将我的一个XML文件通过模式生成器运行了一遍,除了一个节点之外,生成的结果都符合预期:
<xs:element name="office" type="xs:NCName"/>
什么是xs:NCName
?为什么要使用它,而不是xs:string
?
我将我的一个XML文件通过模式生成器运行了一遍,除了一个节点之外,生成的结果都符合预期:
<xs:element name="office" type="xs:NCName"/>
什么是xs:NCName
?为什么要使用它,而不是xs:string
?
@skyl几乎逼迫我写这个答案,所以请注意冗余。
NCName
代表“非冒号名称”。NCName可以定义为XML模式正则表达式[\i-[:]][\c-[:]]*
\i
和\c
是在XML模式定义中定义的多字符转义。
http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i
是用于表示XML名称首字母的字符集转义,而\c
是用于表示XML名称字符的字符集转义。 [\i-[:]]
表示一个由集合\i
组成的集合,但不包括冒号字符:
的集合。因此简单来说,它的意思是“任何起始字符,但不包括:
”。整个正则表达式读作“一个XML名称的初始字符,但不是冒号,后跟零个或多个XML名称字符,但不包括冒号。”
NCName的实际限制是它不能包含多个符号字符,如:
,@
,$
,%
,&
,/
,+
,,
,;
,空格字符或不同的括号。此外,NCName不能以数字、点或减号字符开头,尽管它们可以在NCName中出现。
在命名空间符合XML文档中,所有名称必须是限定名称或NCName。 以下值必须是NCName(而不是限定名称):
NCName 是非冒号化的名称,例如 "name"。与限定名称 QName 相比,例如 "ns:name"。如果您的名称不应由不同命名空间限定,则它们是 NCNames。
xs:string 对您的名称没有任何限制,但 xs:NCName 基本上禁止字符串中出现 ":"。
xs:NCName
中也是不允许的。 - WeizhongTu-
、.
、0-9
、A-Z
、_
、a-z
,以及所有匹配 \p{L}+
的非 ASCII 字符。
此外,数字、-
和 .
不能作为值的第一个字符。
、!
、"
、#
、$
、%
、&
、'
、(
、)
、*
、+
、,
、/
、:
、;
、<
、=
、>
、?
、@
、[
、\
、]
、^
、{
、|
、}
、~
`。http://books.xmlschemata.org/relaxng/ch19-77215.html
不能包含空格或冒号。允许使用“_”和“-”。
您可以使用此选项代替字符串,以便验证该值仅限于所允许的内容。它很好地映射到某些名称/标识符约定,例如Django的“slug”概念。
我会为我们翻译[\i-[:]][\c-[:]]*
的人点赞。
[\i-[:]][\c-[:]]*
翻译成英语的答案。请按照你的承诺进行点赞;) - jasso