XF में elementFormDefault क्या करता है?


88

क्या करता elementFormDefaultहै, और इसका उपयोग कब किया जाना चाहिए?

इसलिए मुझे elementFormDefaultमूल्यों के लिए कुछ परिभाषाएँ मिलीं :

योग्य - तत्व और विशेषताएँ स्कीमा के लक्ष्यनाम में हैं

अयोग्य - तत्वों और विशेषताओं का कोई नामस्थान नहीं है

तो उस परिभाषा से मुझे लगता है कि अगर एक स्कीमा को योग्य बनाया गया है तो आपको नामस्थान के साथ टाइप क्यों करना चाहिए? और वे कौन से परिदृश्य हैं, जिनके लिए आपको उस मामले के लिए अयोग्य घोषित करना होगा? मैंने Googling की कोशिश की, लेकिन मुझे जो कुछ मिला वह W3C के कुछ पन्ने थे जिन्हें समझना बहुत कठिन था।

यह वह फ़ाइल है, जिसके साथ मैं अभी काम कर रहा हूं, मुझे उसी target:TypeAssignmentsके targetNamespaceरूप में घोषित करने की आवश्यकता क्यों है xmlns:target?

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:target="http://www.levijackson.net/web340/ns"
        targetNamespace="http://www.levijackson.net/web340/ns" 
        elementFormDefault="qualified">
  <element name="assignments">
    <complexType>
      <sequence>
        <element name="assignments" type="target:TypeAssignments"
                 minOccurs="1" maxOccurs="unbounded"/>
      </sequence>
    </complexType>
  </element>
  <complexType name="TypeAssignments">
    <sequence>
      <element name="assignment" type="target:assignmentInfo"
               minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
  </complexType>
  <complexType name="assignmentInfo">
    <sequence>
      <element name="name" type="string"/>
      <element name="page" type="target:TypePage"/>
      <element name="file" type="target:TypeFile" 
               minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
    <attribute name="id" type="string" use="required"/>
  </complexType>
  <simpleType name="TypePage">
    <restriction base="integer">
      <minInclusive value="50" />
      <maxInclusive value="498" />
    </restriction>
  </simpleType>
  <simpleType name="TypeFile">
    <restriction base="string">
      <enumeration value=".xml" />
      <enumeration value=".dtd" />
      <enumeration value=".xsd" />
    </restriction>
  </simpleType>
</schema>

जवाबों:


71

ElementFormDefault का स्कीमा में प्रकारों के नाम स्थान से कोई लेना-देना नहीं है, यह XML दस्तावेज़ों में उन तत्वों के नामस्थानों के बारे में है जो स्कीमा का अनुपालन करते हैं।

यहाँ कल्पना का पुनरावृत्ति अनुभाग है:

Element Declaration Schema

Component Property  {target namespace}
Representation      If form is present and its ·actual value· is qualified, 
                    or if form is absent and the ·actual value· of 
                    elementFormDefault on the <schema> ancestor is qualified, 
                    then the ·actual value· of the targetNamespace [attribute]
                    of the parent <schema> element information item, or 
                    ·absent· if there is none, otherwise ·absent·.

इसका मतलब यह है कि आपके द्वारा स्कीमा के शीर्ष पर घोषित किया गया लक्ष्यनामपेस स्कीमा के अनुरूप एक्सएमएल दस्तावेज़ में तत्वों पर ही लागू होता है यदि एलिमेंटफॉर्मडिफॉल्ट "योग्य" है या तत्व फॉर्म = "योग्य" होने पर स्कीमा में स्पष्ट रूप से घोषित किया जाता है ।

उदाहरण के लिए: यदि elementFormDefault अयोग्य है -

<element name="name" type="string" form="qualified"></element>
<element name="page" type="target:TypePage"></element>

"नाम" तत्वों के लक्ष्यनाम में होने की उम्मीद करेंगे और "नाम" तत्व शून्य नामस्थान में होंगे।

प्रत्येक तत्व घोषणा पर फ़ॉर्म = "योग्य" रखने के लिए आपको बचाने के लिए, तत्वफ़ॉर्मडफ़ॉल्ट बताते हुए = "योग्य" का अर्थ है कि लक्ष्यनाम नाम प्रत्येक तत्व पर लागू होता है जब तक कि तत्व घोषणा पर फ़ॉर्म = "अयोग्य" लगाकर ओवरराइड नहीं किया जाता है।


यद्यपि यह उत्तर उस युक्ति को संदर्भित करता है जो इसे सही ढंग से व्याख्या नहीं करती है। स्थानीय रूप से परिभाषित तत्व अभी भी लक्ष्यनाम में हैं और कभी भी अशक्त नाम स्थान में नहीं हैं। elementFormDefault सिर्फ एक स्विच है जो निर्दिष्ट करता है कि आप नामस्थान के लिए हैं या नहीं उन्हें एक उदाहरण में अर्हता प्राप्त करना चाहिए।
इहु ओवुका

1
@ अगर, यह सही नहीं है: या किसी भी दर पर, यह लोगों को भ्रमित करने के लिए उत्तरदायी है। यदि किसी स्थानीय तत्व घोषणा में फ़ॉर्म = योग्य नहीं है, तो तत्व घोषणा स्कीमा घटक का {लक्ष्य नाम स्थान} गुण "अनुपस्थित" है, और इसका अर्थ है कि तत्व उदाहरण के नामस्थान URI गुण भी "अनुपस्थित" होना चाहिए
माइकल Kay।

@MichaelKay मेरे लिए यह और भी भ्रामक है। प्रश्न यह है कि क्या उदाहरण पृष्ठ अशक्त नामस्थान में है, क्योंकि यदि यह नहीं है कि युक्ति बस एलिमेंट को सेट करने के लिए क्यों नहीं कहती है तो फिर भी = Unqualified स्थानीय रूप से परिभाषित तत्वों को शून्य नामस्थान में रखता है। यह कहना कि पृष्ठ नामस्थान होना चाहिए उदाहरण के लिए एक ही बात में योग्य नहीं है क्योंकि यह कहना है कि पृष्ठ नामस्थान कोस में नहीं है यदि ऐसा नहीं है तो कल्पना केवल यह क्यों नहीं कहती है और एक लक्ष्यनाम के साथ एक स्कीमा है जो चीजें मान्य नहीं हैं। उस नामस्थान में?
इहु ओवुका

1
यह "केवल यह नहीं कहता" कि आप इसे बहुत अनौपचारिक रूप से वर्णन कर रहे हैं: वाक्यांश "अशक्त नामस्थान में एक तत्व डाल" एक्सएससी विनिर्देश की शब्दावली का उपयोग नहीं कर रहा है; कल्पना बहुत अधिक सावधान शब्दावली का उपयोग करना पसंद करती है, जो अक्सर इसे पढ़ने के लिए कठिन बनाता है, लेकिन बहुत अधिक सटीक होने के कारण समाप्त होता है।
माइकल के

1
जहाँ तक मेरा सवाल है, यह लिखित रूप में एक सही उत्तर है।
माइकल केए

60

निम्नलिखित ComplexType तत्व AuthorTypeद्वारा उपयोग पर विचार करेंauthor

<xsd:complexType name="AuthorType">
  <!-- compositor goes here -->
  <xsd:sequence>
     <xsd:element name="name" type="xsd:string"/>
     <xsd:element name="phone" type="tns:Phone"/>
  </xsd:sequence>
  <xsd:attribute name="id" type="tns:AuthorId"/>
</xsd:complexType>
<xsd:element name="author" type="tns:AuthorType"/>

अगर elementFormDefault="unqualified"

तब XML इंस्टेंस मान्य है

<x:author xmlns:x="http://example.org/publishing">
   <name>Aaron Skonnard</name>
   <phone>(801)390-4552</phone>
</x:author>

नाम स्थान (अयोग्य) निर्दिष्ट किए बिना लेखकों के नाम विशेषता की अनुमति है। कोई भी तत्व जो कि एक हिस्सा है, <xsd:complexType>को जटिल से जटिल माना जाता है।

अगर elementFormDefault="qualified"

तब उदाहरण के पास स्थानीय तत्व होने चाहिए

<x:author xmlns:x="http://example.org/publishing">
   <x:name>Aaron Skonnard</name>
   <x:phone>(801)390-4552</phone>
</x:author>

कृपया अधिक जानकारी के लिए इस लिंक को देखें


55

एक पुराने, अक्सर पूछे जाने वाले प्रश्न का नया, विस्तृत उत्तर और स्पष्टीकरण ...

संक्षिप्त उत्तर : यदि आप नहीं जोड़ते elementFormDefault="qualified"हैं xsd:schema, तो डिफ़ॉल्ट unqualifiedमान का मतलब है कि स्थानीय रूप से घोषित तत्व किसी भी नामस्थान में नहीं हैं

वहाँ क्या elementFormDefaultकरता है के बारे में बहुत भ्रम है, लेकिन यह एक छोटे उदाहरण के साथ जल्दी से स्पष्ट किया जा सकता है ...

आपके XSD का सुव्यवस्थित संस्करण:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:target="http://www.levijackson.net/web340/ns"
        targetNamespace="http://www.levijackson.net/web340/ns">
  <element name="assignments">
    <complexType>
      <sequence>
        <element name="assignment" type="target:assignmentInfo" 
                 minOccurs="1" maxOccurs="unbounded"/>
      </sequence>
    </complexType>
  </element>
  <complexType name="assignmentInfo">
    <sequence>
      <element name="name" type="string"/>
    </sequence>
    <attribute name="id" type="string" use="required"/>
  </complexType>
</schema>

प्रमुख बिंदु:

  • assignmentतत्व स्थानीय रूप से परिभाषित किया गया है।
  • स्थानीय रूप से XSD में परिभाषित तत्व डिफ़ॉल्ट रूप से किसी भी नाम स्थान पर नहीं हैं।
    • इसका कारण यह है कि डिफ़ॉल्ट मान elementFormDefaultहै unqualified
    • यकीनन यह XSD के रचनाकारों द्वारा एक डिज़ाइन गलती है।
    • मानक अभ्यास हमेशा उपयोग करने के लिए होता है elementFormDefault="qualified" ताकि assignmentलक्ष्य नाम स्थान में हो जैसा कि कोई उम्मीद करेगा।
  • यह घोषणाओं formपर शायद ही कभी इस्तेमाल की जाने वाली विशेषता है xs:elementजिसके लिए elementFormDefaultडिफ़ॉल्ट मान स्थापित किए जाते हैं।

तेजी से मान्य XML

यह XML ऐसा लगता है कि उपरोक्त XSD के अनुसार मान्य होना चाहिए:

<assignments xmlns="http://www.levijackson.net/web340/ns"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.levijackson.net/web340/ns try.xsd">
  <assignment id="a1">
    <name>John</name>
  </assignment>
</assignments>

नोटिस:

  • assignmentsस्थानों पर डिफ़ॉल्ट नाम स्थान assignmentsऔर डिफ़ॉल्ट नाम स्थान ( http://www.levijackson.net/web340/ns) में इसके सभी वंशज हैं ।

लंबित मान्यता त्रुटि

मान्य दिखने के बावजूद, उपरोक्त XML निम्न भ्रामक सत्यापन त्रुटि देता है:

[त्रुटि] try.xml: 4: 23: cvc-complex-type.2.4.a: अमान्य सामग्री तत्व 'असाइनमेंट' के साथ शुरू हुई थी। एक '{असाइनमेंट}' अपेक्षित है।

टिप्पणियाँ:

  • आप इस निदान को शाप देने वाले पहले डेवलपर नहीं होंगे जो यह कहते प्रतीत होते हैं कि सामग्री अमान्य है क्योंकि इसमें एक assignmentतत्व को खोजने की उम्मीद थी लेकिन यह वास्तव में एक assignmentतत्व मिला । ( डब्ल्यूटीएफ )
  • इसका वास्तव में क्या मतलब है: {और }आस - पास का assignmentअर्थ है कि सत्यापन यहां assignment किसी भी नामस्थान में होने की उम्मीद कर रहा था । दुर्भाग्य से, जब यह कहता है कि यह एक assignmentतत्व पाया गया है, तो यह उल्लेख नहीं करता है कि यह इसे एक डिफ़ॉल्ट नामस्थान में मिला है जो बिना नाम के भिन्न होता है।

समाधान

  • समय का सबसे बड़ा हिस्सा: XSD elementFormDefault="qualified"के xsd:schemaतत्व में जोड़ें । इसका अर्थ है कि मान्य XML को स्थानीय रूप से XSD में घोषित किए जाने पर लक्ष्य नाम स्थान में तत्व रखने चाहिए; अन्यथा, मान्य XML को स्थानीय रूप से घोषित तत्वों को बिना किसी नामस्थान में रखना चाहिए।
  • उस समय के छोटे अल्पसंख्यक: एक्सएमडी की आवश्यकता के अनुपालन के लिए एक्सएमएल को बदलें जो assignmentबिना किसी नाम के स्थान पर हो। यह, उदाहरण के लिए, तत्व xmlns=""को जोड़कर प्राप्त किया जा सकता है assignment

श्रेय: इस उत्तर पर उपयोगी प्रतिक्रिया के लिए माइकल के को धन्यवाद ।


12

ElementFormDefault के साथ ध्यान देने योग्य बात यह है कि यह स्थानीय रूप से परिभाषित तत्वों पर लागू होता है , आमतौर पर एक complexType ब्लॉक के अंदर नामित तत्व, स्कीमा के शीर्ष-स्तर पर परिभाषित वैश्विक तत्वों के विपरीत। ElementFormDefault = "योग्य" के साथ आप स्कीमा के लक्ष्य नाम स्थान का उपयोग करके दस्तावेज़ के डिफ़ॉल्ट नामस्थान के रूप में xml दस्तावेज़ के भीतर से स्कीमा में स्थानीय तत्वों को संबोधित कर सकते हैं।

व्यवहार में, नेस्टेड ब्लॉकों में तत्वों को घोषित करने में सक्षम होने के लिए elementFormDefault = "योग्य" का उपयोग करें, अन्यथा आपको शीर्ष स्तर पर सभी तत्वों को घोषित करना होगा और रेफरी विशेषता का उपयोग करके नेस्टेड तत्वों में स्कीमा में उन्हें संदर्भित करना होगा, जिसके परिणामस्वरूप बहुत कम कॉम्पैक्ट स्कीमा।

XML स्कीमा प्राइमर में यह बिट इसके बारे में बात करता है: http://www.w3.org/TR/xmlschema-0/#NS


सबसे सटीक उत्तर जैसा दिखता है, उस पर थोड़ा स्पष्टीकरण। ElementFormDefault = योग्य के साथ आपको नाम स्थान में स्थानीय तत्वों को अर्हता प्राप्त करनी चाहिए। इसके साथ अयोग्य घोषित करने के लिए आपको नाम स्थान नहीं देना चाहिए।
इहु ओवुका

6

elementFormDefault = "योग्य" का उपयोग XML उदाहरण दस्तावेज़ों (.xml फ़ाइल) में नामस्थानों के उपयोग को नियंत्रित करने के लिए किया जाता है, बजाय स्कीमा दस्तावेज़ में नामस्थानों (.xsd फ़ाइल) के।

ElementFormDefault = "योग्य" निर्दिष्ट करके हम इस स्कीमा के साथ मान्य दस्तावेजों में उपयोग किए जाने वाले नामस्थान घोषणा को लागू करते हैं।

इस मूल्य को घोषित करने के लिए यह निर्दिष्ट करना आम बात है कि तत्वों को अयोग्य के बजाय योग्य होना चाहिए। हालाँकि, चूंकि SpecFormDefault = "अयोग्य" डिफ़ॉल्ट मान है, इसलिए स्कीमा दस्तावेज़ में निर्दिष्ट करने की आवश्यकता नहीं है, अगर कोई नामस्थान को अर्हता प्राप्त नहीं करना चाहता है।


elementFormDefault केवल स्थानीय रूप से परिभाषित तत्वों पर लागू होता है। वैश्विक तत्वों को नामांकित होना चाहिए भले ही योग्य हो।
इहु ओवुका

0

मैंने देखा है कि XMLSpy (कम से कम 2011 संस्करण) को एक लक्ष्यनाम की आवश्यकता है जिसे परिभाषित किया गया है अगर elementFormDefault = "योग्य" का उपयोग किया जाता है। अन्यथा मान्य नहीं होगा। और नामस्थान उपसर्गों के साथ xmls भी उत्पन्न नहीं करेगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.