2009-01-15 15 views
7

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

एक संलग्न सूची इकाई के साथ

:

<person> 
    <firstname>Joe</firstname> 
    <lastname>Bloggs</lastname> 

    <children> 
     <child .../> 
     <child .../> 
     <child .../> 
     <child .../> 
     <child .../> 
    </children> 
</person> 

या बिना:

<person> 
    <firstname>Joe</firstname> 
    <lastname>Bloggs</lastname> 

    <child .../> 
    <child .../> 
    <child .../> 
    <child .../> 
    <child .../> 
</person> 

उत्तर

7

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

+0

अच्छा बिंदु। मैं बच्चों के लिए एक विशेषता के बारे में सोच सकता हूं ... पति/पत्नी ... तो अगर बच्चा किसी अन्य विवाह से था। – dacracot

7

मैं इसे एक इकाई में संलग्न अन्य तत्वों से अलग करने के होगा।

+0

नीचे जेसन जैक्सन द्वारा सूचीबद्ध कारण के लिए सहमति हुई। – dacracot

+0

इसके अलावा, आपके पास और .... हो सकता है ताकि आप विभिन्न प्रकार के बच्चों की सूचियां प्राप्त कर सकें, यदि आप संलग्न इकाई का उपयोग करते हैं। – Eddie

0

आईएमएचओ, यह डोमेन पर निर्भर करता है।

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

इसके अतिरिक्त, यदि आपको कभी भी धारावाहिक/deserialize करने की आवश्यकता है, तो एक संलग्नक का उपयोग करने में मदद मिलेगी।

1

पहला व्यक्ति सरल सूचियों के लिए बहुत अच्छी तरह से काम करेगा, लेकिन क्या होगा यदि सूची में नेस्टेड सूची स्वयं ही है ?! क्या होगा यदि किसी तत्व में दो अलग-अलग सूचियां हों? चीजों को सुसंगत रखने के लिए मैं सूची के लिए एक तत्व पसंद करता हूं और <item> टैग या बाल डेटा के लिए कुछ उपयोग करता हूं। यह सभी सूचियों को पार्स करने के लिए एक सामान्य फ़ंक्शन का उपयोग करने में मदद करेगा।

2

यदि सूची में तत्वों के नाम हमेशा समान होते हैं, तो यह बहुत अंतर नहीं करता है, क्योंकि यदि आप इसे XPath या Linq-to-XML का उपयोग करके संसाधित कर रहे हैं या फिर भी क्वेरी यदि एक रैपर नोड है तो एक और चयनकर्ता है, लेकिन अन्यथा समान होगा।

दूसरी तरफ यदि सूची में तत्व नाम भिन्न हो सकते हैं, तो यह रैपर तत्व होने पर सूची को आसान बना सकता है, क्योंकि आप केवल '*' को सूची तत्व के नीचे चयनकर्ता के रूप में उपयोग कर सकते हैं नामों के निर्दिष्ट सेट वाले सभी तत्वों को फ़िल्टर करना होगा।

तो शायद यह शायद कोई फर्क नहीं पड़ता है, लेकिन मुझे एक रैपर तत्व पसंद करना पसंद है क्योंकि यह उन वस्तुओं से संग्रह में वस्तुओं को चित्रित करता है जो नहीं हैं। कोड में इसके बारे में

2

लगता है कि तुम लिखने के खिलाफ .:

मेरे लिए

चाहता हूँ ...

spouse.children = person.children... 

एक बहुत अच्छे से शब्दार्थ है ...

for child in person: 
    spouse.addChild(person.child) 
1

हम एक सूची का एक सार्वभौमिक एक्सएमएल प्रतिनिधित्व की जरूरत है, हम समाप्त होगा निम्नलिखित प्रतिनिधित्व का एक प्रकार इस्तेमाल किया जा नहीं है:

<_listSomeName> 
    <_listItem>...</_listItem> 
    <_listItem>...</_listItem> 
    <_listItem>...</_listItem> 
    <_listItem>...</_listItem> 
    <_listItem>...</_listItem> 
</_listSomeName> 

के इस का विश्लेषण करते हैं:

  1. <_listSomeName> रैपर तत्व की आवश्यकता है क्योंकि हमारे पास तत्व के बच्चों के रूप में दो या दो से अधिक सूचियां हो सकती हैं और प्रत्येक सूची को विशिष्ट रूप से और आसानी से पहचानने में सक्षम होना चाहिए। "SomeName" भाग सूची का नाम अद्वितीय बनाता है।

  2. <_listItem> तत्व प्रत्येक व्यक्तिगत सूची आइटम को लपेटने के लिए आवश्यक है। इसे छोड़ा नहीं जा सकता क्योंकि एक सूची आइटम में एक जटिल संरचना हो सकती है (जैसे कि एक एक्सएमएल टुकड़ा होना) और इसे पूरी तरह से पहचानना चुनौतीपूर्ण होगा।

1

मैं पहले समाधान का उपयोग करूंगा। सूची में अर्थपूर्ण प्रासंगिकता है: यह तत्वों की तरह संग्रह है, और इसलिए इस तरह पहचानने योग्य होना चाहिए। दूसरे समाधान में सूची तत्व के रूप में मौजूद नहीं है।

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