2012-03-26 2 views
7

일부 XML 및 XSD를 할당으로 작성하고 있습니다 ... 내 XML에 a (실제 이름이 아님)이라는 태그가 있고 id이라는 속성이 있습니다. 내 XML의 일부는 다음과 같습니다의 데이터 형식으로 ID :XML에서 속성 ID를 선언하는 방법

<xsd:attribute name="id" type="xsd:string" /> 

<a id="1"> 
    ........... 
    </a> 
    <a id="1"> 
    ............ 
    </a> 

나는 그것이 오류를 제공하지 않습니다 XSD를 사용하여 유효성을 검사 .... 나는 XSD를 사용하려고 속성 id하지만 오류가 발생했습니다; 나는 그 문제가 무엇인지 알 수 없었다.

어떻게하면됩니까?

+0

그래서 당신이 오류가 발생하지 않지만, 당신이 하나를 지정하지 않는 경우가 있습니까? – kjosh

답변

14

을 하위 요소를 포함해야합니다 일부 "myList에"로 선언 해당 요소 "루트"를 의미합니다 type="xsd:ID"을 사용하십시오. 값이 고유하다는 것을 확인하는 것 외에도 참조 용으로 xsd:IDREF을 사용할 수도 있습니다.

xsd:ID을 사용하려고 할 때 나타나는 오류는 ID 값이 문자로 시작해야한다는 것입니다. ID를 "ID-1"/ "ID-2"또는 "a1"/ "a2"로 변경하면 정상적으로 작동합니다.

예 스키마 :

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
    <xsd:element name="doc"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element maxOccurs="unbounded" ref="a"/> 
     <xsd:element maxOccurs="unbounded" ref="b"/> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
    <xsd:element name="a"> 
    <xsd:complexType> 
     <xsd:simpleContent> 
     <xsd:extension base="xsd:string"> 
      <xsd:attribute name="id" use="required" type="xsd:ID"/> 
     </xsd:extension> 
     </xsd:simpleContent> 
    </xsd:complexType> 
    </xsd:element> 
    <xsd:element name="b"> 
    <xsd:complexType> 
     <xsd:simpleContent> 
     <xsd:extension base="xsd:string"> 
      <xsd:attribute name="idref" use="required" type="xsd:IDREF"/> 
     </xsd:extension> 
     </xsd:simpleContent> 
    </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

예 XML : 당신이 XSD를 할당하는 경우

<doc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="Untitled1.xsd"> 
    <a id="ID-1"> 
    ........... 
    </a> 
    <a id="ID-2"> 
    ............ 
    </a> 
    <b idref="ID-1"/> 
</doc> 
+0

어떻게 모든 요소에 대해 속성 ID가 xsd : ID 유형으로 지정되도록 XML에 텍스트를 추가 할 수 있습니까? 이 선언을 문서 자체에 포함시킬 수 있습니까? – AndreaBogazzi

+0

[this (다소 날짜가있는) 기사] (http://www.xml.com/pub/a/2002/11/20/schemas.html?page=3)는'key','keyref','unique 'ID '와'IDREF '를 통해. 그것에 대한 의견이 있으십니까? – Jens

1

"1"은 유효한 문자열이므로 유효성 검사에서 오류를 반환하지 않습니다. 당신은 몇 가지 제한을 지정하려면 , 당신이 당신의 유형을 선언하고 패턴을 지정해야합니다 (예 : "ID를해야 편지로 시작") : 고유성 제한을 지정하려면

<xsd:simpleType name="myID"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:pattern value="[a-zA-Z].*"/> 
    </xsd:restriction> 
</xsd:simpleType> 
.... 
    <xsd:attribute name="id" type="myID"/> 
.... 

을, 당신은 사용할 수 있습니다 XSD를이 같은 독특한 요소 :

<xsd:element name="root" type="myList"> 
    <xsd:unique name="myId"> 
    <xsd:selector xpath="./a"/> 
    <xsd:field xpath="@id"/> 
    </xsd:unique> 
</xsd:element> 

이 당신은 다시 가야한다 "는"독특한 특성 "ID"

+0

내가 원하는 것은 각 요소에 id 속성을 부여하고 id의 각 값이 고유한지 확인하는 것입니다. – Zeemaan

+0

xsd : unique feature에 대한 주석을 추가했습니다. 그것은 당신을 도울 것입니다. –

관련 문제