2012-03-26 10 views
7

benim XML bazı XML ve bir görev olarak bir XSD ... yazıyorum bir nitelik kimliğini beyan etmek. Benim XML kısmı aşağıda gösterilmiştir: veri türü olarak ID:bir <code>a</code> (değil gerçek isim) adı verilen etiket ve nitelik <code>id</code> denilen i nasıl da XML

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

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

Ben bir hata vermez XSD kullanarak doğrulamak .... ben xsd kullanmaya çalıştı id özniteliği ancak bana bir hata verdi; Problemin ne olduğunu anlayamadım.

Bunu nasıl yapabilirim?

+0

Yani bir hata alamadım, ama bir atama yoksa değil mi? – kjosh

cevap

14

alt öğeleri içermelidir bazı "mylist" olarak ilan unsuru "root" anlamına gelecektir type="xsd:ID" kullanıyor. Bu, değerin benzersiz olduğundan emin olmanın yanı sıra, referans için xsd:IDREF'u kullanmanıza da izin vermesidir.

xsd:ID'u kullanmaya çalıştığınızda karşılaştığınız hata, bir ID değeri bir harfle başlamalıdır. Kimliklerinizi "ID-1"/"ID-2" veya "a1"/"a2" gibi bir şeye değiştirirseniz, iyi çalışır.

Örnek Şema:

<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> 

Örnek XML: Eğer xsd atarsanız

<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

Her bir öğe için öznitelik kimliğinin xsd: ID türünde olduğunu belirtmek için xml'ime nasıl bazı metinler ekleyebilirim? Bu beyanı dokümanın içine yerleştirmek mümkün mü? – AndreaBogazzi

+0

[Bu (biraz tarihli] makale] (http://www.xml.com/pub/a/2002/11/20/schemas.html?page=3) 'key',' keyref', 'kullanarak tartışıyor 'ID' ve' IDREF' üzerinden. Bunun hakkında yorumlarınız var mı? – Jens

1

"1" geçerli bir dizgedir, bu nedenle doğrulama bir hata döndürmez. Bazı kısıtlama belirtmek isterseniz , kendi türünü bildirmek ve desen belirtmek gerekiyor (örneğin "id gereken bir harfle başlayan"): Eğer tekliği kısıtlamayı belirtmek isterseniz

<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"/> 
.... 

kullanabileceğiniz xsd: Bu gibi benzersiz eleman:

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

Bu Sen geri dönmelisin "a" ile benzersiz nitelikler "id"

+0

İstediğim her öğe için bir id özelliğine sahip olmak ve her bir kimlik değerinin benzersiz olduğundan emin olmanız – Zeemaan

+0

xsd: unique özelliği hakkında bir yorum ekledim. Sana yardım edecektir. –