我通过模式生成器运行了一个xml文件,生成的所有内容都是预期的,除了一个节点:
<xs:element name="office" type="xs:NCName"/>
究竟是什么xs:NCName
?为什么会使用它,而不是xs:string
?
答案 0 :(得分:103)
@skyl实际上激怒了我写这个答案所以请注意冗余。
NCName
代表“非殖民名称”。 NCName可以定义为XML Schema正则表达式[\i-[:]][\c-[:]]*
\i
和\c
是XML Schema定义中定义的多字符转义符
http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i
是初始XML名称字符集的转义符,\c
是XML名称字符集。 [\i-[:]]
表示由集合\i
组成的集合,不包括由冒号字符:
组成的集合。因此,用简单的英语表示“任何初始字符,但不是:
”。整个正则表达式读作“一个初始XML名称字符,但不是冒号,后跟零个或多个XML名称字符,但不是冒号。”
NCName的实际限制是它不能包含多个符号字符,如:
,@
,$
,%
,&
,{{1 },/
,+
,,
,空白字符或不同的括号。此外,NCName不能以数字,点或减号开头,尽管它们可以稍后出现在NCName中。
在符合命名空间的XML文档中,所有名称都必须是限定名称或NCNames。 以下值必须是NCNames(非限定名称):
答案 1 :(得分:84)
NCName是非殖民名称,例如“名称”。与QName相比,QName是限定名称,例如“NS:名称”。如果你的名字不应该被不同的命名空间限定,那么它们就是NCNames。
xs:string对你的名字没有任何限制,但是xs:NCName基本上不允许“:”出现在字符串中。
答案 2 :(得分:28)
实际上说......
允许的字符: -
,.
,0
,1
,2
,3
,{ {1}},4
,5
,6
,7
,8
,9
,A
,{{1 }},B
,C
,D
,E
,F
,G
,H
,I
,J
,K
,L
,M
,N
,O
,P
,Q
,{ {1}},R
,S
,T
,U
,V
,W
,X
,{{1 }},Y
,Z
,_
,a
,b
,c
,d
,e
,f
,g
,h
,i
,j
,k
,l
,m
,{ {1}},n
,o
,p
,q
,r
,s
,t
,{{1 }}
此外,u
和v
不能用作值的第一个字符。
不允许的字符: w
,x
,y
,z
,-
,.
,{ {1}},,
!
,"
,#
,$
,%
,&
,{{1 }},'
,(
,)
,*
,+
,,
,/
,:
,;
,<
,=
,>
,?
,@
,[
答案 3 :(得分:4)
http://books.xmlschemata.org/relaxng/ch19-77215.html
没有空格或冒号。允许“_”和“ - ”。
您可以使用此字符串而不是字符串,以便您可以验证该值是否仅限于允许的值。它很好地映射到名称/标识符的某些约定,例如django的“slug”概念。
我赞助[\i-[:]][\c-[:]]*
为我们翻译成英语的人。