2011-11-25 29 views
0

我们可以在XSD中说一些规则:所有这些具有ID作为其属性的元素应该将其视为唯一ID,以便其他元素不应该使用该ID。 如何应用getElementById(“id”)仅在此之后才有效。XSD应用全局规则

感谢

+0

您必须使用xs:key元素。请参阅:http://stackoverflow.com/questions/4491983/xml-schema-key-keyref-how-to-use-them –

+0

当我使用xsd:ID得到这个错误 - > attribucvc-datatype-valid.1.2。 1:'41537'对'NCName'.te不是有效的值。它给我一些weired错误: – Chandan

+0

关于xsd:id,这个类型必须是一个NCName,因此不能以数字开头。这是一种古怪的类型。 –

回答

1

如果你只为你的标识数字,不能使用的xs:ID。 然后这里是一个示例模式:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
    <xs:element name="root" type="rootType"> 
     <xs:key name="attritemIdentifier"> 
      <xs:selector xpath="item"/> 
      <xs:field xpath="@XYZ"/> 
     </xs:key> 
    </xs:element> 
    <xs:complexType name="rootType"> 
     <xs:sequence> 
      <xs:element name="item" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
          <xs:attribute name="XYZ" type="xs:string"/> 
         </xs:extension> 
        </xs:simpleContent> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

这里是一个有效的实例:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <item XYZ="12345">item0</item> 
    <item XYZ="XYZ1">item1</item> 
    <item XYZ="XYZ2">item2</item> 
    <item XYZ="XYZ3">item3</item> 
    <item XYZ="XYZ4">item4</item> 
    <item XYZ="XYZ5">item5</item> 
    <item XYZ="XYZ9">item6</item> 
    <item XYZ="XYZ7">item7</item> 
</root> 

只要你有XYZ属性具有相同的值,你会得到以下错误:

CVC-身份constraint.4.2.2:复制密钥值[XYZ9]申报 用于标识约束元件的 “根” 的 “attritemIdentifier”

+0

如果我想,如果我的任何元素有ID属性,那么它应该是类型xsd:ID,那么我该怎么做。我的ID将始终是字母数字。 – Chandan

+0

一旦以数字开头,您可以使用ID作为属性的名称,但不能使用xs:Id类型。您可以像这样替换我的模式中的属性:

+0

exaclty ...我使用上述““在我的XSD中...所以它应该被用作默认的唯一ID ...但是我不能在我的XML文档上使用getElementById,它返回null ..可能是bcoz我有一些ID有重复值...但我没有得到代码中的任何验证错误。 – Chandan