2012-03-26 11 views
7

में एक विशेषता आईडी कैसे घोषित करें मैं कुछ एक्सएमएल और एक्सएसडी को असाइनमेंट के रूप में लिख रहा हूं ... मेरे एक्सएमएल में मेरे पास a (वास्तविक नाम नहीं) नामक एक टैग है और id नामक विशेषता है। मेरी एक्सएमएल का एक हिस्सा नीचे दिखाया गया है: के एक डेटा प्रकार के रूप ID:एक्सएमएल

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

जब मैं XSD का उपयोग कर यह मान्य यह एक त्रुटि नहीं देता है ....

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

मैं उपयोग करने के लिए XSD करने की कोशिश की विशेषता id लेकिन यह मुझे एक त्रुटि दे दी; मैं समझ नहीं पाया कि समस्या क्या है।

मैं यह कैसे कर सकता हूं?

+0

तो आपको कोई त्रुटि मिलती नहीं है, लेकिन अगर आप एक असाइन नहीं करते है न? – kjosh

उत्तर

14

आप के लिए वापस जाना चाहिए के रूप में घोषित मतलब होगा type="xsd:ID" का उपयोग कर। यह सुनिश्चित करने के अलावा यह भी करता है कि मान अद्वितीय है कि यह आपको संदर्भ के लिए xsd:IDREF का उपयोग करने की अनुमति देगा।

xsd:ID का उपयोग करने का प्रयास करते समय आप जो त्रुटि प्राप्त कर रहे हैं वह यह है कि एक आईडी मान एक अक्षर से शुरू होना चाहिए। यदि आप अपनी आईडी को "आईडी -1"/"आईडी -2" या "ए 1"/"ए 2" जैसे कुछ में बदलते हैं, तो यह ठीक काम करेगा।

उदाहरण स्कीमा:

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

उदाहरण एक्सएमएल: यदि आप XSD आवंटित

<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

मैं अपने xml में कुछ टेक्स्ट कैसे जोड़ सकता हूं यह निर्दिष्ट करने के लिए कि प्रत्येक तत्व के लिए विशेषता आईडी xsd: ID है? इस घोषणा को दस्तावेज़ के अंदर ही एम्बेड करना संभव है? – AndreaBogazzi

+0

[यह (कुछ हद तक दिनांकित) लेख] (http://www.xml.com/pub/a/2002/11/20/schemas.html?page=3) 'key',' keyref', 'अद्वितीय का उपयोग करके चर्चा करता है 'आईडी' और 'आईडीआरईएफ 'से अधिक। उस पर कोई टिप्पणी? – Jens

1

"1" एक वैध स्ट्रिंग है, इसलिए सत्यापन कोई त्रुटि नहीं देता है। आप कुछ प्रतिबंध निर्दिष्ट करने के लिए चाहते हैं (उदाहरण के लिए "आईडी एक पत्र के साथ शुरू होता चाहिए"), आप अपने प्रकार की घोषणा और पैटर्न निर्दिष्ट करने के लिए है: आप विशिष्टता प्रतिबंध निर्दिष्ट करने के लिए चाहते हैं

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

, तो आप उपयोग कर सकते हैं XSD: इस तरह अद्वितीय तत्व:

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

यह उस तत्व "रूट" कुछ "MyList" उसके उप-तत्व को शामिल करना चाहिए "एक" के साथ अद्वितीय गुण "आईडी"

+0

जो मैं चाहता हूं वह प्रत्येक तत्व के लिए एक आईडी विशेषता है और सुनिश्चित करें कि आईडी का प्रत्येक मान अद्वितीय है – Zeemaan

+0

मैंने अभी xsd: अद्वितीय सुविधा के बारे में एक टिप्पणी जोड़ा है। यह तुम्हे मदद करेगा। –