2014-09-23 7 views
5

मान लीजिए मैं एक XML फ़ाइल है कि इस तरह दिखता है:एक्सएमएल स्कीमा को तत्वों द्वारा गुणों को क्रमबद्ध करने की आवश्यकता कैसे हो सकती है?

<Transactions> 
<Transaction OrderID="5"> ... </Transaction> 
<Transaction OrderID="6"> ... </Transaction> 
<Transaction OrderID="11"> ... </Transaction> 
<Transaction OrderID="7"> ... </Transaction> 
</Transactions> 

XML स्कीमा का उपयोग करना, यह संभव है संकेत मिलता है कि आदेश # 11 सही क्रम में नहीं है? प्रत्येक लेनदेन तत्व व्यक्तिगत रूप से सत्यापन पास करता है, लेकिन ऑर्डर आईडी बढ़ते क्रम में होना चाहिए।

और, एक संबंधित प्रश्न: क्या सत्यापन नियम इंगित कर सकता है कि संख्याओं को छोड़ दिया जा सकता है या नहीं? उदाहरण के लिए, वहाँ कोई लेन-देन है # 8,9, या 10

उत्तर

1

अपने सत्यापनकर्ता XSD 1.1 का समर्थन करता है, तो आप XS उपयोग कर सकते हैं: इस तरह कुछ विशेषता मान अस्वीकार करने के लिए जोर:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
      elementFormDefault="qualified" 
      attributeFormDefault="unqualified" 
      vc:minVersion="1.1"> 
    <xs:element name="Transactions"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Transaction" maxOccurs="unbounded"> 
       <xs:complexType mixed="true"> 
        <xs:attribute name="OrderID" type="xs:integer"/> 
        <xs:assert test="empty(index-of((8,9,10),@OrderID))"/> 
       </xs:complexType>         
      </xs:element> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

यह चाहिए अपने दूसरे प्रश्न का उत्तर दें।

आपके पहले प्रश्न के लिए, मुझे नहीं लगता कि ऑर्डर सत्यापन संभव है। हालांकि, आप XML दस्तावेज़ को सॉर्ट करने के लिए XSLT का उपयोग कर सकते हैं।

----- पहला सवाल -----

धन्यवाद, माइकल Kay का जवाब गयी। खैर ... यहां आपके पहले प्रश्न का उत्तर है।

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Transactions"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Transaction" maxOccurs="unbounded"> 
        <xs:complexType mixed="true"> 
         <xs:attribute name="OrderID" type="xs:integer"/> 
         <xs:assert test="empty(index-of((8,9,10),@OrderID))"/> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      <xs:assert test="every $x in Transaction satisfies 
          (empty($x/preceding-sibling::*) or 
          ($x/@OrderID gt $x/preceding-sibling::*[1]/@OrderID))"/> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 
+2

हां, ऑर्डर सत्यापन संभव है। उदाहरण के लिए '' –

+0

धन्यवाद चोंग लिप फांग। ईमानदारी से, मैं यह जानने के लिए पर्याप्त रूप से आपके उत्तर को समझ नहीं पा रहा हूं कि यह मेरी समस्या हल करता है या नहीं। जब आपने संभवत: 8, 9, 10 ऑर्डर आईडी के विशिष्ट मानों को संदर्भित करता है? जिस फाइल पर मैं काम कर रहा हूं उसके बारे में 30 के लेन-देन हैं। मेरे लिए काम करने वाली कोई भी विधि ऑर्डर आईडी के विशिष्ट मानों के संदर्भ के बिना काम करने की आवश्यकता होगी। दूसरा Selecter

+0

हां, ऑर्डर आईडी का मान 8,9 या 10 होने पर सत्यापन विफल हो जाएगा। एक्सएमएल डेटा बहुत है, तो आपको शायद एक विशिष्ट पैटर्न से मेल खाने के लिए एक नियम की आवश्यकता है। यदि आप इस दावे नियम को छोड़ देते हैं और ऑर्डर आईडी 8,9 या 10. –

संबंधित मुद्दे