什么是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的值
  • 处理指令目标
  • 实体名称

实际上说…

允许的字符: -.0ABCDEFGHIJKLMNO PQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

另外, -. 不能作为值的第一个字符。

不允许的字符: !"#$%&'()*+ {|}~

http://books.xmlschemata.org/relaxng/ch19-77215.html

没有空格或冒号。 允许“_”和“ – ”。

你可以用这个而不是string,这样你就可以validation这个值是被限制的。 它很好地映射到名称/标识符的某些约定,比如django的“slug”的概念。

我向我们致敬[\i-[:]][\c-[:]]*翻译成英文。