2009-07-15 15 views
42

क्या ऑर्डर है कि एक सामान्य माता-पिता के तत्व एक्सएमएल में एक्सएमएल दस्तावेज़ द्वारा कैप्चर किए गए डेटा का एक सार्थक टुकड़ा दिखाई देते हैं, या ऑर्डर को अर्थपूर्ण के रूप में निर्दिष्ट नहीं किया गया है?एक्सएमएल में, आदेश महत्वपूर्ण है?

<people> 
<person name="sam"/> 
<person name="juni"/> 
</people> 

और

<people> 
<person name="juni"/> 
<person name="sam"/> 
</people> 

पर कब्जा कर लिया इन दस्तावेजों समान डेटा का प्रतिनिधित्व करने पर विचार कर रहे हैं, या आदेश में अंतर होता है: उदाहरण के लिए, दो एक्सएमएल दस्तावेजों पर विचार?

उत्तर

1

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

+2

हाँ मुझे पता है कि कई एपीआई क्रम बनाए रखने कर रहा हूँ। लेकिन मुझे आश्चर्य है कि एक्सएमएल विनिर्देशन द्वारा इस व्यवहार की आवश्यकता है या नहीं। –

+0

प्रत्येक एक्सएमएल तत्व में एक सामग्री मॉडल हो सकता है। आपके तत्वों के लिए सामग्री मॉडल बहुत ही सरल हैं, लेकिन आप XML में बहुत जटिल सामग्री मॉडल बना सकते हैं जिसमें अनुक्रम या तत्वों की सूचियां शामिल हैं। एक्सएचटीएमएल तत्व में उस क्रम में और तत्व होना चाहिए। उस अर्थ में एक्सएमएल विनिर्देश आपको ऑर्डर निर्दिष्ट करने की अनुमति देता है। यदि आपके पास अनुक्रम का एक सामग्री मॉडल है (शून्य या अधिक) तत्व यदि आदेश में कोई अर्थशास्त्र है तो यह आपके ऊपर निर्भर करता है। –

1

आदेश कब्जा कर लिया है।

20

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

+0

हाँ मुझे पता था कि एक्सएचटीएमएल आ जाएगा। मुझे यकीन नहीं है कि यह एक अच्छा उदाहरण है, क्योंकि एक्सएचटीएमएल पूरी तरह से एक्सएमएल अनुरूप नहीं है? –

+11

बिल्कुल यह है। यह एक्सएचटीएमएल का राइस डी'एट्रे है। – skaffman

+2

एक्सएचटीएमएल एक्सएमएल अनुपालन है, हालांकि एक्सएमएल एक्सएचटीएमएल अनुरूप नहीं है। – txwikinger

4

this article के अनुसार, मानक के 1.0 संस्करण भी आवश्यकता नहीं है कि पारसर्स क्रम में वे दस्तावेज़ में दिखाई देते हैं में भाई बहन की सूचना दें। उस प्रकाश में, उन्हें अलग नहीं माना जाएगा, क्योंकि दोनों बच्चे वहां हैं। शायद यह बदल गया है, ताकि अन्य उत्तरों एक्सएमएल के नए संस्करणों के लिए हैं, हालांकि।

+0

यदि आपको ऑर्डर सुनिश्चित करने की आवश्यकता है तो आप प्रत्येक प्रविष्टि –

44

तत्वों के आदेश, एक्सएमएल में महत्वपूर्ण है तो अपने उदाहरण में दो दस्तावेज़ों अलग हैं। हालांकि, विशेषता आदेश महत्वपूर्ण नहीं है।

<people> 
    <person name="kathy" id="1"/> 
</people> 

यह बिल्कुल वैसा ही है जैसे:

<people> 
    <person id="1" name="kathy"/> 
</people> 
+0

पर 'index =' विशेषताओं को जोड़ सकते हैं, इसलिए यदि आपके पास आप ऑर्डर करेंगे subelements मामलों, हालांकि वे अलग-अलग प्रकार हैं? – rogerdpack

+2

हाँ, यह सही है। तत्वों का क्रम हमेशा महत्वपूर्ण होता है चाहे वे क्या हैं। –

+0

आप नीचे एक टिप्पणी में उल्लेख करते हैं कि एक्सएमएल विशिष्टता में तत्वों के क्रम का महत्व स्पष्ट रूप से बताया गया है। क्या आप इस स्रोत को अपने उत्तर में जोड़ सकते हैं? मेरा मानना ​​है कि तथ्य वास्तव में * गारंटी * गारंटी (भाई) तत्व आदेश नहीं करता है। Unwind द्वारा जवाब में जुड़े आलेख में यह भी कहा गया है। – Lilienthal

1

मैं उन समान विचार किया जाना चाहिए लगता है, लेकिन यह वास्तव में सॉफ्टवेयर या व्यक्ति यह तय करने के लिए पढ़ने पर निर्भर है। एक्सएमएल डेटा लिखने का एक तरीका है। आवेदन निर्धारित करता है कि उस डेटा का उपयोग कैसे किया जाता है और इसलिए इसका अर्थ अधिक है।

आपके आवेदन व्यक्ति के सभी तत्वों में पढ़ता है और उसके बाद उन्हें नाम से alphabetizes, तो XML दस्तावेज में आदेश अर्थहीन है। यदि आपका एप्लिकेशन उन्हें उसी क्रम में सीटों को निर्दिष्ट करता है और निर्दिष्ट करता है तो लोग एक्सएमएल में दिखाई देते हैं, तो ऑर्डर बहुत महत्वपूर्ण है।

यह डेटा का उपयोग करता है आवेदन पर निर्भर है। यदि आदेश महत्वपूर्ण है, तो फ़ाइलों को उत्पन्न करने वाले लोगों के लिए चश्मा में वर्णित किया जाना चाहिए।

+0

एक्सएमएल विनिर्देश इस पर स्पष्ट है, तत्वों का क्रम महत्वपूर्ण है। –

1

http://www.ibm.com/developerworks/xml/library/x-eleord.html

हो सकता है कि लेख में चर्चा अपने सवाल का जवाब देने में मदद मिलेगी। चूंकि आपका प्रश्न कुछ हद तक खुला है, मुझे यकीन नहीं है कि यह आपको चिंताओं को कवर करता है या नहीं।

18

आदेश संभावित महत्वपूर्ण है, लेकिन यह इस बात पर निर्भर करता है कि क्या प्रसारित किया जा रहा है।

एक्सएचटीएमएल में, उदाहरण के लिए, आदेश अत्यंत महत्वपूर्ण है - यदि आपके पास यादृच्छिक क्रम में अनुच्छेद अनुच्छेद था, तो यह बहुत भ्रमित होगा!

कई अन्य मामलों में, यह महत्वहीन है।

एक्सएमएल सिर्फ नोड्स के एक पेड़ का प्रतिनिधित्व करने का एक तरीका है। एक्सएमएल ही कहना है कि आदेश महत्वपूर्ण है: एपीआई, क्रम बनाए रखने चाहिए - उदाहरण के लिए, लेकिन यह ऊपर जो कुछ भी/पैदा करता है करने के लिए आदेश या नहीं के बारे में करने के लिए डेटा वास्तव में देखभाल व्याख्या करता है।

एक्सएमएल विनिर्देश प्रभावी ढंग से "ऑर्डरिंग के पक्ष में गलती" करना है - अगर आपको इसकी परवाह नहीं है तो ऑर्डरिंग को अनदेखा करना आसान है, लेकिन अगर एपीआई चीजों को बदलने के लिए निर्णय लेती है तो ऑर्डरिंग का पुनर्निर्माण करना दर्द होता है। (आपको ऑर्डर आदि में ऑर्डर देना होगा)

+0

क्या आपके पास "एपीआई को ऑर्डर को सुरक्षित रखना होगा" के लिए स्पष्ट स्रोत होना चाहिए? http://www.w3.org/TR/xml-infoset/#infoitem.document स्पष्ट रूप से कहता है कि तत्व ऑर्डर किसी XML दस्तावेज़ की सूचना सामग्री का हिस्सा है, लेकिन यह भी कहता है कि वह दस्तावेज़ "न्यूनतम जानकारी का सेट नहीं है जिसे एक एक्सएमएल प्रोसेसर द्वारा वापस किया जाना चाहिए। " क्या चश्मे में कोई स्पष्ट बाधा है कि अगर मैं एक एक्सएमएल प्रोसेसर उत्पन्न करता हूं तो मैं उल्लंघन कर रहा हूं जिसने तत्व ऑर्डर जानकारी तक कोई पहुंच प्रदान नहीं की है? – bames53

+0

@ bames53: ठीक है कि XML विवरण एक इन्फोसेट विनिर्देश के बजाय है ... लेकिन फिर भी, एक्सएमएल कल्पना और अधिक बारीकी से क्या की तुलना में कैसे एपीआई जानकारी लौटाने के एक वैध दस्तावेज के गठन को परिभाषित करता है। उस ने कहा, यह कहता है कि एक तत्व के बजाय एक सेट के बजाय बाल तत्वों का * अनुक्रम * है। इसे इस तरह से रखें: यदि आप एक एक्सएमएल प्रोसेसर उत्पन्न करते हैं जो ऑर्डरिंग को संरक्षित नहीं करता है, तो आप इसके लिए संभावित उपयोगों की संख्या को कम कर देंगे * अत्यधिक *। यदि आपके मन में एक विशिष्ट उपयोग है, और यह आपके जीवन को आसान बनाता है, तो ठीक है - लेकिन आश्चर्यजनक लोगों से बचने के लिए यह स्पष्ट और * विशाल * चेतावनियां देता है। –

+0

"एक्सएमएल कल्पना और अधिक बारीकी से क्या एक वैध दस्तावेज के गठन को परिभाषित करता है" एक्सएमएल कल्पना कहना है "यह विनिर्देश इसे पढ़ने करना चाहिए XML डेटा जानकारी _and के मामले में एक XML प्रोसेसर के लिए आवश्यक व्यवहार का वर्णन करता है यह application._ को प्रदान करनी चाहिए "मैं मानता हूं कि आदेश प्रदान नहीं करने से एक्सएमएल प्रोसेसर काफी हद तक बेकार हो जाएगा, लेकिन मैं सोच रहा था कि वास्तव में यह एक अनुरूपता की आवश्यकता है। धन्यवाद। – bames53

5

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

इस (और अन्य) कारणों के लिए, वहाँ अब एक्सएमएल कैनॉनिकलाइज़ेशन है, जो फिर से आयोजन XML दस्तावेज़ों के लिए नियमों को परिभाषित करता है ऐसी है कि वे एक ही जानकारी सामग्री पास होंगे, लेकिन खाली स्थान के, नाम स्थान घोषणाओं और विशेषताओं को पुन: व्यवस्थित जैसी चीजों के लिए एक मानक है एक अनुमानित तरीके से।

xml.com

विहित एक्सएमएल से कोषगत आरोही क्रम में नाम स्थान घोषणाओं और विशेषताओं का समावेश की आवश्यकता है।

3

XML 1.0 Spec समान माता-पिता तत्व के बच्चों के समान नाम वाले तत्वों के क्रम के बारे में कुछ भी नहीं कहता है। तो ऐसा लगता है, मुद्दा अपरिभाषित है।

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

और अधिक बारीकी से देख रहे हैं, तो आप eveluate के लिए क्या आपके उपयोग के मामले है की आवश्यकता होगी। यदि आपके एक्सएमएल को अलग-अलग (शायद तृतीय पक्ष) अनुप्रयोगों के साथ अंतःक्रिया करने की आवश्यकता है, तो आपको हमेशा यह मानना ​​चाहिए कि ऑर्डर मायने रखता है। यदि आपके पास उत्पादन और उपभोग करने वाले आवेदन पर कुल नियंत्रण है, तो आप इस नियम को आराम कर सकते हैं।

हमेशा की तरह, आप का न्याय करना होगा।

4

पूरी तरह से एक एक्सएमएल वैधता बिंदु से, यह स्कीमा पर निर्भर करता है, यदि कोई है, तो यह बताता है कि नियम XML को स्वरूपित करने के लिए क्या हैं।

यह कहा गया है कि आदेश संरक्षित किया जाना चाहिए (http://www.w3.org/TR/xml-infoset/ में 2.1.1 देखें) लेकिन क्या यह एप्लिकेशन के लिए "महत्वपूर्ण" है, इसके लेखक पर निर्भर है।

एक स्कीमा के भीतर, xs:all कंपोजिटर के उपयोग के साथ आदेश को महत्वहीन बनाया जा सकता है, हालांकि मुझे यकीन नहीं है कि यह कैप्चर किए गए आदेश के संरक्षण को प्रभावित करता है, यानी मैं अभी भी उत्पत्ति/क्रमिकरण के क्रम की अपेक्षा करता हूं एक्सएमएल प्रोसेसर द्वारा बनाए रखा।

हालांकि, 1.0 में यह कंपोजिटर बच्चे तत्वों पर प्रतिबंध जोड़ता है ताकि वे 0 या 1 बार हो जाएं। एक्सएसडी 1 में।1, यह प्रतिबंध हटा दिया गया है, जिससे यह अनुबंध करना आसान हो जाता है कि आदेश महत्वपूर्ण नहीं है, प्रभावी ढंग से xs:allxs:sequence का असाधारण संस्करण बन गया है।

ओवरली-प्रतिबंधित 1.0 xs:all कंपोजिटर के कारण, आदेश दिया गया xs:sequence कंपोजिटर का उपयोग किया जाना था। इस प्रकार, आदेश कृत्रिम रूप से लगाया गया था। सत्यापनकर्ता पुस्तकालयों के विक्रेताओं द्वारा 1.1 की

दत्तक ग्रहण धीमी है।

जैसे, एपीआई आदेश पर विचार करने के लिए जब नए तत्व के साथ विकसित किया जा रहा जरूरत है। मुझे किसी एक्सएमएल सीरियलाइजेशन फ्रेमवर्क से अवगत नहीं है जो 1.1 के साथ काम कर सकता है और आपको लगता है कि आपके क्लाइंट 1.0 का उपयोग करेंगे और 1.1 नियमों और चोक के साथ आने वाले संदेशों को मान्य करेंगे।

ल्यूक

+0

+1: अनुक्रम। यदि कोई xsd तत्वों का क्रम निर्दिष्ट कर सकता है तो अर्थपूर्ण है, एक्सएमएल से संबंधित किसी भी तकनीक को तत्वों के क्रम से अवगत होना चाहिए और इस आदेश को संरक्षित करने में सक्षम होना चाहिए। – Mishax

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