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

95 xml xsd xml-namespaces

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

<xs:element name="office" type="xs:NCName"/>
Run Code Online (Sandbox Code Playgroud)

到底是xs:NCName什么?为什么人们会使用它xs:string呢?

jas*_*sso 105

@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来的实际限制是它不能包含像几个符号字符:,@,$,%,&,/,+,,,;,空白字符或不同括号.此外,NCName不能以数字,点或减号开头,尽管它们可以稍后出现在NCName中.

NCNames需要在哪里?

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

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

  • "此外,NCName不能以数字开头"这一行帮助我理解一个数字不能是'xs:ID' (3认同)

And*_*ich 88

NCName是非殖民化名称,例如"名称".与QName相比,QName是限定名称,例如"ns:name".如果你的名字不应该被不同的命名空间限定,那么它们就是NCNames.

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

  • `xs:NCName` 中也不允许使用空字符串 (2认同)

izi*_*tti 28

实际上......

允许的字符: -,.,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,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z

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

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

  • 数字也不能用作第一个字符. (11认同)
  • 我认为这缺少许多允许的字符,例如é或ø. (2认同)

Sky*_*and 5

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

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

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

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

  • 我添加了一个答案,将`[\ i-[:]] [\ c-[:]] *`转换为英语。如您所愿,继续投票;) (11认同)