xml - शून्य एक्सएमएल तत्वों का प्रतिनिधित्व करने का सही तरीका क्या है?




null xml-nil (5)

xsi: शून्य एक मान का प्रतिनिधित्व करने का सही तरीका है कि: जब डोम लेवल 2 कॉल getElementValue () जारी किया जाता है, तो NULL मान वापस कर दिया जाता है। xsi: nil का उपयोग किसी भी सामग्री के साथ वैध तत्व को इंगित करने के लिए भी किया जाता है, भले ही वह तत्व सामग्री प्रकार सामान्य रूप से रिक्त तत्वों की अनुमति न दें।

यदि एक खाली टैग का उपयोग किया जाता है, तो getElementValue () खाली स्ट्रिंग ("") देता है अगर टैग छोड़ा जाता है, तो कोई लेखक टैग भी मौजूद नहीं है। यह 'शून्य' (पूर्व सेटिंग "श्रृंखला" को शून्य से सेट करने से पहले अलग-अलग हो सकता है, यह हो सकता है कि पुस्तक कोई श्रृंखला नहीं है, जबकि श्रृंखला छोड़ने का मतलब यह हो सकता है कि श्रृंखला वर्तमान तत्व के लिए एक अपरिहार्य तत्व है।)

से: डब्ल्यू 3 सी

एक्सएमएल स्कीमा: संरचनाएं सिग्नलिंग के लिए एक तंत्र पेश करती हैं कि एक तत्व को वैध के रूप में स्वीकार किया जाना चाहिए · जब सामग्री सामग्री के बावजूद इसमें कोई सामग्री नहीं है जिसके लिए आवश्यक सामग्री की आवश्यकता नहीं है या यहां तक ​​कि आवश्यक सामग्री भी अनुमति नहीं है। सामग्री के बिना एक तत्व · वैध हो सकता है यदि उसके पास विशेषता xsi: nil मान सही है। लेबल वाला एक तत्व खाली होना चाहिए, लेकिन संबंधित जटिल प्रकार द्वारा अनुमत होने पर गुणों को ले जाया जा सकता है।

एक स्पष्टीकरण:
यदि आपके पास एक पुस्तक xml तत्व है और बाल तत्वों में से एक पुस्तक है: श्रृंखला को भरते समय आपके पास कई विकल्प हैं:

  1. तत्व को पूरी तरह से हटा रहा है - यह तब किया जा सकता है जब आप यह इंगित करना चाहते हैं कि श्रृंखला इस पुस्तक पर लागू नहीं होती है या वह पुस्तक श्रृंखला का हिस्सा नहीं है। इस मामले में xsl ट्रांसफॉर्म (या अन्य ईवेंट आधारित प्रोसेसर) जिनमें टेम्पलेट है जो पुस्तक से मेल खाता है: श्रृंखला को कभी भी नहीं कहा जाएगा। उदाहरण के लिए, यदि आपका xsl पुस्तक तत्व को तालिका पंक्ति (xhtml: tr) में बदल देता है तो आपको इस विधि का उपयोग कर तालिका कक्षों (xhtml: td) की गलत संख्या मिल सकती है।
  2. तत्व को खाली छोड़ना - यह इंगित कर सकता है कि श्रृंखला "" है, या अज्ञात है, या पुस्तक श्रृंखला का हिस्सा नहीं है। कोई भी एक्सएसएल ट्रांसफॉर्म (या अन्य ईवर्न आधारित पार्सर) जो पुस्तक से मेल खाता है: श्रृंखला को कॉल किया जाएगा। वर्तमान () का मान "" होगा। आपको इस विधि का उपयोग करके एक्सएचटीएमएल: टीडी टैग की एक ही संख्या मिल जाएगी जैसा कि अगले वर्णित है।
  3. Xsi का उपयोग करना: nil = "true" - यह इंगित करता है कि पुस्तक: श्रृंखला तत्व शून्य है, न केवल खाली है। आपका एक्सएसएल ट्रांसफॉर्म (या अन्य इवेंट आधारित पार्सर) जिसमें टेम्पलेट मिलान करने वाली पुस्तक है: श्रृंखला को कॉल किया जाएगा। वर्तमान () का मान खाली होगा (खाली स्ट्रिंग नहीं)। इस विधि और (2) के बीच मुख्य अंतर यह है कि स्कीमा प्रकार की पुस्तक: श्रृंखला को खाली स्ट्रिंग ("") को वैध मान के रूप में अनुमति देने की आवश्यकता नहीं है। यह श्रृंखला तत्व के लिए कोई वास्तविक अर्थ नहीं बनाता है, लेकिन एक भाषा तत्व के लिए जिसे स्कीमा में एक समेकित प्रकार के रूप में परिभाषित किया गया है, xsi: nil = "true" तत्व को कोई डेटा नहीं होने देता है। एक और उदाहरण प्रकार दशमलव के तत्व होंगे। यदि आप उन्हें खाली रखना चाहते हैं तो आप एक समेकित स्ट्रिंग को जोड़ सकते हैं जो केवल "" और दशमलव की अनुमति देता है, या शून्य का उपयोग करने वाले दशमलव का उपयोग करता है।

मैंने कई तरीकों से प्रतिनिधित्व किए गए null तत्वों को देखा है:

तत्व xsi:nil="true" साथ मौजूद है:

 <book>
     <title>Beowulf</title>
     <author xsi:nil="true"/>
 </book>

तत्व मौजूद है, लेकिन एक खाली तत्व के रूप में प्रतिनिधित्व किया जाता है (जो मुझे लगता है कि 'खाली' और null बाद से गलत है अर्थात् अलग हैं):

 <book>
     <title>Beowulf</title>
     <author/>
 </book>

 <!-- or: -->
 <book>
     <title>Beowulf</title>
     <author></author>
 </book>

तत्व वापस लौटे मार्कअप में मौजूद नहीं है :

 <book>
     <title>Beowulf</title>
 </book>

तत्व में <null/> बाल तत्व है (नीचे TStamper से):

 <book>
     <title>Beowulf</title>
     <author><null/></author>
 </book>

क्या इस तरह के null मूल्य का प्रतिनिधित्व करने के लिए कोई सही, या कैनोलिक तरीका है? क्या उपरोक्त उदाहरणों के मुकाबले अतिरिक्त तरीके हैं?

ऊपर दिए गए उदाहरणों के लिए एक्सएमएल बढ़ गया है, इसलिए इसमें बहुत दूर न पढ़ें। :)


आप xsi:nil उपयोग करते हैं xsi:nil जब आपका स्कीमा अर्थशास्त्र इंगित करता है कि किसी तत्व का डिफ़ॉल्ट मान होता है, और यदि तत्व मौजूद नहीं है तो डिफ़ॉल्ट मान का उपयोग किया जाना चाहिए। मुझे यह मानना ​​है कि ऐसे स्मार्ट लोग हैं जिनके लिए पिछली सजा एक स्पष्ट रूप से भयानक विचार नहीं है, लेकिन यह मेरे लिए नौ प्रकार के बुरे की तरह लगता है। प्रत्येक एक्सएमएल प्रारूप जो मैंने कभी भी काम किया है, तत्व को छोड़कर शून्य मानों का प्रतिनिधित्व करता है। (या विशेषता, और अच्छी किस्मत xsi:nil साथ एक विशेषता चिह्नित xsi:nil ।)


कोई कैनोलिक जवाब नहीं है, क्योंकि एक्सएमएल मूल रूप से कोई शून्य अवधारणा नहीं है। लेकिन मुझे लगता है कि आप एक्सएमएल / ऑब्जेक्ट मैपिंग चाहते हैं (क्योंकि ऑब्जेक्ट ग्राफ के पास नल हैं); तो आपके लिए जवाब "जो भी आपका टूल उपयोग करता है" है। यदि आप हैंडलिंग लिखते हैं, तो इसका मतलब है कि आप जो कुछ भी पसंद करते हैं। एक्सएमएल स्कीमा का उपयोग करने वाले टूल्स के लिए, xsi:nil जाने का रास्ता है। अधिकांश मैपर्स के लिए, मेल खाने वाले तत्व / विशेषता को छोड़ना इसका तरीका है।


डब्ल्यू 3 लिंक में प्रलेखन

http://www.w3.org/TR/REC-xml/#sec-starttags

कहते हैं कि यह अनुशंसित रूप हैं।

<test></test>
<test/>

दूसरे उत्तर में उल्लिखित विशेषता सत्यापन तंत्र है और राज्य का प्रतिनिधित्व नहीं है। कृपया http://www.w3.org/TR/xmlschema-1/#xsi_nil देखें

एक्सएमएल स्कीमा: संरचनाएं सिग्नलिंग के लिए एक तंत्र पेश करती हैं कि एक तत्व को वैध के रूप में स्वीकार किया जाना चाहिए · जब सामग्री सामग्री के बावजूद इसमें कोई सामग्री नहीं है जिसके लिए आवश्यक सामग्री की आवश्यकता नहीं है या यहां तक ​​कि आवश्यक सामग्री भी अनुमति नहीं है। सामग्री के बिना एक तत्व · वैध हो सकता है यदि उसके पास विशेषता xsi: nil मान सही है। लेबल वाला एक तत्व खाली होना चाहिए , लेकिन संबंधित जटिल प्रकार द्वारा अनुमत होने पर गुणों को ले जाया जा सकता है।

इस उत्तर को स्पष्ट करने के लिए: सामग्री

  <Book>
    <!--Invalid construct since the element attribute xsi:nil="true" signal that the element must be empty-->
    <BuildAttributes HardCover="true" Glued="true" xsi:nil="true">
      <anotherAttribute name="Color">Blue</anotherAttribute>
    </BuildAttributes>
    <Index></Index>
    <pages>
      <page pageNumber="1">Content</page>            
    </pages>
    <!--Missing ISBN number could be confusing and misguiding since its not present-->
  </Book>
</Books>

विशेषता या तत्व को छोड़कर कम औपचारिक डेटा में अच्छी तरह से काम करता है।

यदि आपको अधिक परिष्कृत जानकारी की आवश्यकता है, तो जीएमएल स्कीमा विशेषता nilReason जोड़ते हैं, उदाहरण के लिए: GeoSciML :

  • xsi:nil "सत्य" के मान के साथ xsi:nil का उपयोग यह इंगित करने के लिए किया जाता है कि कोई मान उपलब्ध नहीं है
  • लापता मूल्यों के लिए अतिरिक्त जानकारी रिकॉर्ड करने के लिए nilReason का उपयोग किया जा सकता है; यह मानक जीएमएल कारणों में से एक हो सकता है ( missing, inapplicable, withheld, unknown ), या other: द्वारा प्रस्तुत पाठ other: या अधिक विस्तृत स्पष्टीकरण के लिए एक यूआरआई लिंक हो सकता है।

जब आप डेटा का आदान-प्रदान कर रहे होते हैं, तो जिस भूमिका के लिए एक्सएमएल आमतौर पर उपयोग किया जाता है, किसी प्राप्तकर्ता को भेजे गए डेटा या किसी दिए गए उद्देश्य के लिए सामग्री अस्पष्ट हो सकती है जो किसी अन्य व्यक्ति के लिए उपलब्ध होगी जो भुगतान या अलग प्रमाणीकरण करता है। सामग्री खोने का कारण जानना बहुत महत्वपूर्ण हो सकता है।

वैज्ञानिक भी चिंतित हैं कि जानकारी क्यों गुम है। उदाहरण के लिए, यदि इसे गुणवत्ता कारणों से गिरा दिया गया था, तो वे मूल खराब डेटा देखना चाहेंगे।





xml-nil