2013-10-19 12 views
5

Aşağıda bir XSD belge parçası var. Bir XML dosyası bu şemaya göre doğrulandığında, mm:Depot ve mm:Customer/mm:County'daki değerin aynı olmasını ve Location türündeki öğelerle sınırlı olmasını sağlamak istiyorum.XML Şeması'nda <assert>'a bir alternatif var

Bu, XML Şeması 1.1'de <assert> etiketini kullanarak yapılabilir, ancak XML Şeması 1.0'a karşı doğrulama yapmam gerekir. Bu çalışmayı 1.0'da yapmak için bazı numaralar var mı? Ne elde etmek istiyorum böyle bir şeydir

<xsd:element name="DeliveryOrder" type="OrderDetails" /> 

<xsd:complexType name="OrderDetails"> 
    <xsd:sequence> 
     <xsd:element name="Depot" type="mm:Location" /> 
     <xsd:element name="Customer" type="mm:Customer" maxOccurs="1" minOccurs="1" /> 
    </xsd:sequence> 
</xsd:complexType> 

<xsd:simpleType name="Location"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:enumeration value="OverHere" /> 
     <xsd:enumeration value="OverThere" /> 
    </xsd:restriction> 
</xsd:simpleType> 

<xsd:complexType name="Customer"> 
    <xsd:sequence> 
     <xsd:element name="firstname" type="string" /> 
     <xsd:element name="surname" type="string" /> 
     <xsd:element name="County" type="mm:Location" /> 
    </xsd:sequence> 
</xsd:complexType> 

...

<?xml version="1.0" encoding="UTF-8"?> 
<mm:DeliveryOrder xmlns:mm="http://myNamespace/DeliveryOrderSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://myNamespace/DeliveryOrderSchema DeliveryOrder.xsd "> 

    <mm:Depot>OverThere</mm:Depot> 
    <mm:Customer> 
    <mm:firstname>Jane</mm:firstname> 
    <mm:surname>Doe</mm:surname> 
    <mm:County>OverThere</mm:County> 
    </mm:Customer> 
</mm:DeliveryOrder> 

Not değeri OverThere iki kez görünür.

cevap

1

"Başvuru bütünlüğü" ni kullanabilirsiniz.

<?xml version="1.0" encoding="utf-8" ?> 
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) --> 
<xsd:schema targetNamespace="http://myNamespace/DeliveryOrderSchema" xmlns="http://myNamespace/DeliveryOrderSchema" xmlns:mm="http://myNamespace/DeliveryOrderSchema" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="DeliveryOrder" type="OrderDetails"> 
     <xsd:key name="LocationDepot"> 
      <xsd:selector xpath="mm:Depot"/> 
      <xsd:field xpath="."/> 
     </xsd:key> 
     <xsd:keyref refer="LocationDepot" name="CustomerLocation"> 
      <xsd:selector xpath="mm:Customer"/> 
      <xsd:field xpath="mm:County"/> 
     </xsd:keyref> 
    </xsd:element> 

    <xsd:complexType name="OrderDetails"> 
     <xsd:sequence> 
      <xsd:element name="Depot" type="Location"/> 
      <xsd:element name="Customer" type="Customer" maxOccurs="1" minOccurs="1"/> 
     </xsd:sequence> 
    </xsd:complexType> 

    <xsd:simpleType name="Location"> 
     <xsd:restriction base="xsd:string"> 
      <xsd:enumeration value="OverHere"/> 
      <xsd:enumeration value="OverThere"/> 
     </xsd:restriction> 
    </xsd:simpleType> 

    <xsd:complexType name="Customer"> 
     <xsd:sequence> 
      <xsd:element name="firstname" type="xsd:string"/> 
      <xsd:element name="surname" type="xsd:string"/> 
      <xsd:element name="County" type="Location"/> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:schema> 

bir hata olarak aşağıda görünebilir:

Error occurred while loading [], line 10 position 3 The key sequence 'OverHere' in 'http://myNamespace/DeliveryOrderSchema:LocationDepot' Keyref fails to refer to some key.

İlgili konular