2013-09-04 5 views
7

RelaxNG के साथ, क्या मैं जांच सकता हूं कि एक विशेषता का मूल्य एक संलग्न तत्व के भीतर अद्वितीय है या नहीं?RelaxNG के साथ उन विशेषताओं को कैसे जांचें अद्वितीय हैं?

उदाहरण के लिए, इस castle सत्यापित करना चाहिए:

<castle> 
    <room> 
    <door to="North" /> 
    <door to="South" /> 
    </room> 
    <room> 
    <door to="North" /> 
    </room> 
</castle> 

लेकिन यह नहीं (समान room में दरवाजा नकल) करना चाहिए:

<castle> 
    <room> 
    <door to="Dungeon" /> 
    <door to="Dungeon" /> 
    </room> 
</castle> 

मैं RelaxNG (कॉम्पैक्ट) का उपयोग कर रहा हूँ। मुझे विशेषता समय 'समय से पहले' नहीं पता है, केवल वे room के भीतर अद्वितीय होना चाहिए।

धन्यवाद!

उत्तर

6

मेरे ज्ञान के लिए यह शुद्ध RELAX एनजी में नहीं किया जा सकता है। आप (एम्बेडेड) Schematron का उपयोग कर सकते हैं, जैसा कि हमने Citation Style Language schema के लिए किया था। यदि आप यह मार्ग लेते हैं, तो ध्यान दें कि सभी RELAX एनजी वैधकर्ता एम्बेडेड Schematron पार्स नहीं करते हैं, और स्टैंडअलोन Schematron schemas के लिए यह समर्थन भी सीमित है। जैसे लोकप्रिय Jing एक्सएमएल वैलिडेटर केवल पुराने आईएसएम स्कीमट्रॉन नहीं, पुराने स्कीमट्रॉन 1.5 संस्करण का समर्थन करता है।

हमारी परियोजना, जहां हम जिंग का उपयोग के लिए, हम एक script का उपयोग पहले (Trang के साथ) रिलेक्स NG XML स्वरूप के लिए हमारी रिलेक्स NG कॉम्पैक्ट स्कीमा परिवर्तित करने के लिए है, तो एक स्टैंडअलोन में रिलेक्स NG XML स्कीमा से स्कीमेट्रोन नियम निकालने Schematron स्कीमा (Saxon और RNG2Schtrn.xsl एक्सएसएलटी स्टाइल शीट के साथ), और अंत में जिंग के साथ निकाले गए Schematron स्कीमा के खिलाफ मान्य।

<?xml version="1.0" encoding="UTF-8"?> 
<sch:schema xmlns:sch="http://www.ascc.net/xml/schematron"> 
    <sch:pattern name="duplicateAttributeValues"> 
    <sch:rule context="//room/door[@to]"> 
     <sch:report test="preceding-sibling::door/@to = @to">Warning: @to values should be unique for a given room.</sch:report> 
    </sch:rule> 
    </sch:pattern> 
</sch:schema> 

जब निम्नलिखित XML दस्तावेज़ पर चलाने के लिए,

<?xml version="1.0" encoding="utf-8"?> 
<castle> 
    <room> 
    <door to="North"/> 
    <door to="South"/> 
    <door to="West"/> 
    </room> 
    <room> 
    <door to="West"/> 
    <door to="North"/> 
    <door to="West"/> 
    </room> 
</castle> 

Jing will report

:

यदि यह आप बंद डर नहीं है, मैं आपकी समस्या के लिए एक साथ पत्थर निम्नलिखित स्कीमेट्रोन 1.5 स्कीमा

Error: Warning: @to values should be unique for a given room.
From line 11, column 5; to line 11, column 21
th"/>↩ <door to="West"/>↩ </r

+0

आपके उत्तर के लिए धन्यवाद! मैं Schematron में देखेंगे। –

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