2011-04-04 37 views
38

Benzersiz Özellik Değerlerini uygula Aşağıdaki XML tanımlayan bir şema var Sağlar ki yukarıdaki örnekte geçerlidir yani Anahtar özelliği, benzersiz, ancak aşağıdaki örnek geçersiz olacaktır: iki Add elemanları Key ait olan vardırXML XSD şeması şeması

<Values> 
    <Add Key="Key1">Value 1</Add> 
    <Add Key="Key2">Value 2</Add> 
    <Add Key="Key2">Value 3</Add> 
    <Add Key="Key3">Value 4</Add> 
</Values> 

Bildirim o Key2

ancak her kulağa değilim,

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="Values"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Add" maxOccurs="unbounded"> 
        <xs:complexType> 
         <xs:simpleContent> 
          <xs:extension base="xs:string"> 
           <xs:attribute name="Key" type="xs:token" use="required"/> 
          </xs:extension> 
         </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

Bunun bir şema seviyesinde mümkün olmadığını izlenimi altında değilim: Burada Başvuru için 691.363.210

basit şema olduğunu.

cevap

49

@BatteryBackupUnit doğru karar verdi, ancak sözdizimi daha gibidir: Daha on

<xs:element name="Values"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="Add" maxOccurs="unbounded"/> 
    </xs:sequence> 
    </xs:complexType> 
    <xs:unique name="UniqueAddKey"> 
    <xs:selector xpath="Add" /> 
    <xs:field xpath="@Key" /> 
    </xs:unique> 
</xs:element> 
+0

daha açıklama alamadım lütfen, yani sadece aradığınız açıklama ne tür bu şema – Tarek

+1

tarafından üretilen xml koydu? Xs'yi açıklayan bir XSD öğreticisi: benzersiz mi? XSD'deki herhangi bir kitapta veya öğreticide mutlaka bulabilirsiniz. –

+0

? –

6

xs kullanarak bunu başarabilirsiniz: Benzersiz

<xs:element name="Instrument"> 
    <xs:complexType> 
    <xs:all> 
    <xs:unique name="ModuleId"> 
     <xs:selector xpath="./*" /> 
     <xs:field xpath="@id" /> 
    </xs:unique> 
    </xs:all> 
    </xs:complexType> 
</xs:element> 

Yukarıdaki örnek tüm Enstrüman Elements için benzersiz özellik "id" zorunlu hale getirecek. Bir birincil anahtar oluşturmak için kullanılabilecek anahtar, - Yabancı Anahtar ilişki: orada da xs oluyor http://www.datypic.com/books/defxmlschema/chapter17.html

5

Michael Kay'in cevabı: Şemanınız (XSD) bir ad alanı ilan ederse, bunu selection.xpath dosyanıza eklemelisiniz. Microsoft Visual Studio 2010 kullanıyorsanız, otomatik olarak ilan edilen bir ad alanı bulabilirsiniz.

<xs:schema id="MyData" 
    targetNamespace="http://tempuri.org/MyData.xsd" 
    elementFormDefault="qualified" 
    xmlns="http://tempuri.org/MyData.xsd" 
    xmlns:mstns="http://tempuri.org/MyData.xsd" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
> 
    ... 
    <xs:unique name="UniqueAddKey"> 
     <xs:selector xpath="mstns:Add" /> 
     <xs:field xpath="@Key" /> 
    </xs:unique> 
</xs:schema>