什么是xs:NCName类型以及何时应该使用它?

时间:2009-10-27 14:58:51

标签: xml xsd xml-namespaces

我通过模式生成器运行了一个xml文件,生成的所有内容都是预期的,除了一个节点:

<xs:element name="office" type="xs:NCName"/>

究竟是什么xs:NCName?为什么会使用它,而不是xs:string

4 个答案:

答案 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的实际限制

NCName的实际限制是它不能包含多个符号字符,如:@$%&,{{1 },/+,,空白字符或不同的括号。此外,NCName不能以数字,点或减号开头,尽管它们可以稍后出现在NCName中。

NCNames需要在哪里

在符合命名空间的XML文档中,所有名称都必须是限定名称或NCNames。 以下值必须是NCNames(非限定名称):

  • 名称空间前缀
  • 表示ID的值
  • 代表IDREF的值
  • 代表NOTATION的值
  • 处理指令目标
  • 实体名称

答案 1 :(得分:84)

NCName是非殖民名称,例如“名称”。与QName相比,QName是限定名称,例如“NS:名称”。如果你的名字不应该被不同的命名空间限定,那么它们就是NCNames。

xs:string对你的名字没有任何限制,但是xs:NCName基本上不允许“:”出现在字符串中。

答案 2 :(得分:28)

实际上说......

允许的字符: -.0123,{ {1}},456789A,{{1 }},BCDEFGHIJKLMNOPQ,{ {1}},RSTUVWX,{{1 }},YZ_abcdefghijklm,{ {1}},nopqrst,{{1 }}

此外,uv不能用作值的第一个字符。

不允许的字符: wxyz-.,{ {1}},!"#$%&,{{1 }},'()*+,/:;<=>?@[

答案 3 :(得分:4)

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

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

您可以使用此字符串而不是字符串,以便您可以验证该值是否仅限于允许的值。它很好地映射到名称/标识符的某些约定,例如django的“slug”概念。

我赞助[\i-[:]][\c-[:]]*为我们翻译成英语的人。