102

I ran one of my xml files through a schema generator and everything generated was what was expected, with the exception of one node:

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

What exactly is xs:NCName? And why would one use it, rather xs:string?

4

4 回答 4

117

@skyl 实际上激怒了我写这个答案,所以请注意冗余。

NCName代表“非殖民化名称”。NCName 可以定义为 XML Schema 正则表达式[\i-[:]][\c-[:]]*

...那个正则表达式是什么意思?

\i并且\c是在 XML Schema 定义中定义的多字符转义。
http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i是初始 XML 名称字符集的转义,是 XML 名称字符\c集。 [\i-[:]]表示由集合组成的集合\i,不包括由冒号字符组成的集合:。所以用简单的英语来说,它的意思是“任何初始字符,但不是:”。整个正则表达式读作“一个初始 XML 名称字符,但不是冒号,后跟零个或多个 XML 名称字符,但不是冒号”。

NCName 的实际限制

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

哪里需要 NCNames

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

  • 命名空间前缀
  • 代表 ID 的值
  • 表示 IDREF 的值
  • 表示 NOTATION 的值
  • 处理指令目标
  • 实体名称
于 2011-05-28T01:00:05.820 回答
97

NCName是非殖民化名称,例如“名称”。与 QName 相比,QName 是限定名称,例如“ns:name”。如果您的名称不应该由不同的名称空间限定,那么它们就是 NCNames。

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

于 2009-10-27T15:11:16.967 回答
30

实际来说...

允许 的字符:-, ., 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 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_ , , , , , , , ,fghijklmnopq, r, s, t, u, v, w, x, y,z

此外,-and.不能用作值的第一个字符。

不允许使用的字符: , !, ", #, $, %, &, ', (, ), *, +, ,, /, :, ;, <, =, >, ?, @, [, \, ], ^, `, {, |, },~

于 2013-06-05T20:17:12.030 回答
7

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

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

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

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

于 2011-05-26T16:54:56.867 回答