为什么数字不是有效的NCName

时间:2019-02-28 11:00:40

标签: xml xsd xsd-validation

我有这个xml可以验证:

 <row Id="411" TagName="python" Count="9" ExcerptPostId="7058" WikiPostId="7057"/>
  <row Id="413" TagName="faces" Count="3" ExcerptPostId="5232" WikiPostId="5231"/>
  <row Id="414" TagName="global" Count="8" ExcerptPostId="5270" WikiPostId="5269"/>
  <row Id="415" TagName="wikimedia-commons" Count="5" ExcerptPostId="5301" WikiPostId="5300"/>
  <row Id="416" TagName="photographs" Count="7"/>

但是,如果我将id定义为xs:ID,则会给我错误411,它不是有效的NCNAME ...似乎ID不能是整数,并且不知道为什么,从理论上讲,它是格式正确的字符串。

<xs:complexType name="typeRow">
  <xs:attribute name="Id" type="xs:ID" use="required"/>
    <xs:attribute name="TagName" type="xs:string" use="required"/>
      <xs:attribute name="Count" type="xs:positiveInteger" use="required"/>
      <xs:attribute name="ExcerptPostId" type="xs:positiveInteger"/>
      <xs:attribute name="WikiPostId" type="xs:positiveInteger"/>
</xs:complexType>

我怎么写xml中的ID是一个ID(唯一且显然不能重复)

谢谢

2 个答案:

答案 0 :(得分:0)

根据xsd类型定义: xsd:ID 类型用于唯一标识XML文档中元素的属性。 xsd:ID值必须是NCName。这意味着它必须以字母或下划线开头,并且只能包含字母,数字,下划线,连字符和句点。

答案 1 :(得分:0)

在架构中定义xs:ID约束,而不是使用xs:unique。如果行是rows元素的子级,则需要

<xs:element name="rows">
  <xs:complexType>....</xs:complexType>
  <xs:unique name="rowID">
    <xs:selector xpath="row"/>
    <xs:field xpath="@Id"/>
  </xs:unique>
</xs:element>