什么是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-[:]]*翻译成英文。