什么是xs:NCNametypes,什么时候应该使用?
我通过模式生成器运行了我的一个xml文件,生成的所有内容都是预期的,除了一个节点:
<xs:element name="office" type="xs:NCName"/>
什么是xs:NCName
? 为什么会使用它,而不是xs:string
?
NCName是非殖民化的名称,例如“name”。 与名称相符的QName,例如“ns:name”。 如果你的名字不应该被不同的命名空间限定,那么它们是NCNames。
xs:string对你的名字没有任何限制,但是xs:NCName基本上不允许“:”出现在string中。
实际上@skyl激怒我写这个答案,所以请介意冗余。
NCName
代表“非殖民化名称”。 NCName可以定义为XML模式正则expression式[\i-[:]][\c-[:]]*
…那个正则expression式是什么意思?
\i
和\c
是在XML模式定义中定义的多字符转义。
http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i
是初始XML名称字符集的转义符, \c
是XML名称字符集。 [\i-[:]]
表示一个由set \i
组成的集合,不包括由冒号字符组成的集合。 所以用简单的英文表示“任何初始字符,但不是:
”。 整个正则expression式读作“一个最初的XML名称字符,但不是冒号,后跟零个或多个XML名称字符,但不是冒号”。
NCName的实际限制
NCName的实际限制是它不能包含几个符号字符,如:
@
, $
, %
, &
, /
, +
;
,空白字符或不同的括号。 此外,NCName不能以数字,点号或减号字符开始,尽pipe它们可以稍后出现在NCName中。
NCNames需要什么
在符合命名空间的XML文档中,所有名称必须是限定名称或NCNames。 以下值必须是NCNames(不合格名称):
- 命名空间前缀
- 代表一个ID的值
- 代表IDREF的值
- 代表一个NOTATION的值
- 处理指令目标
- 实体名称
实际上说…
允许的字符: -
, .
, 0
, 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
没有空格或冒号。 允许“_”和“ – ”。
你可以用这个而不是string,这样你就可以validation这个值是被限制的。 它很好地映射到名称/标识符的某些约定,比如django的“slug”的概念。
我向我们致敬[\i-[:]][\c-[:]]*
翻译成英文。