2008-12-27 10 views
23

इस एक्सएमएल डेटा के लिए सही प्रारूप कौन सा होगा, क्या वे बराबर हैं या दोनों के बीच व्यापार बंद हैं?सर्वोत्तम प्रथाओं: एक्सएमएल विशेषता बनाम एक्सएमएल तत्व - मुझे तत्वों का उपयोग कब करना चाहिए और मुझे विशेषताओं का उपयोग कब करना चाहिए?

1.

<sitemap> 
    <category name="Animals"> 
    <section title="Dogs"> 
     <page url="/pics/greatdane.jpg" title="Great Dane"/> 
    </section> 
    </category> 
</sitemap> 

2.

<sitemap> 
    <page> 
    <category>Animals</category> 
    <section>Dogs</section> 
    <title>Great Dane</title> 
    <url>/pics/greatdane.jpg</url>  
    </page> 
</sitemap> 

मैं अपने शैली पत्रक के साथ पहला उदाहरण क्रियान्वित किया है और यह ठीक काम करने लगता है, लेकिन मैं अनिश्चित हूँ क्या सही रूप में होना चाहिए हो।

+1

यह एक खराब शीर्षक के साथ एक अच्छा सवाल है। –

+0

हां, वास्तव में अच्छा सवाल है, लेकिन कृपया शीर्षक बदलें। –

उत्तर

20

विशेषता बनाम तत्वों का मुद्दा एक दशक के बेहतर हिस्से के लिए आसपास रहा है और इसका कोई सही जवाब नहीं है। इसके बजाय अंतर पर विचार और उस से आप जो उपयोग करने के लिए तय करने के लिए सक्षम होना चाहिए:

  • एक विशेषता उसमें केवल एक ही नहीं हो सकता है, हालांकि आप DTD या XML स्कीमा का उपयोग कर तत्वों के साथ इस लागू कर सकते हैं;
  • विशेषताएँ अनियंत्रित हैं। तत्व नहीं हैं;
  • यदि कोई बच्चा नहीं है तो गुण अधिक संक्षिप्त वाक्यविन्यास का कारण बनते हैं।की तुलना करें:

    < पेज नाम = "साइटमैप" />

रहे हैं:

<page> 
    <name>Sitemap</name> 
</page> 

मुझे पता है जो एक मैं पसंद करते हैं;

  • नहीं वास्तव में प्रासंगिक अब के बाद से DTDs XML स्कीमा पर ज्यादा (यदि सभी) उपयोग नहीं किया जाता है, लेकिन मैं वैसे भी यह जोड़ देंगे: DTDs की अनुमति देने के मूलभूत मूल्यों (निहित) गुण लेकिन तत्वों के लिए ऐसी कोई तंत्र के लिए; और
  • एलिमेंट्स, तत्व होने के नाते, उनके पास बच्चे और गुण हो सकते हैं। विशेषताएं स्पष्ट रूप से नहीं कर सकते हैं।

तो, अपने उदाहरण से, अपने अंतरतम <page> तत्व एक URL विशेषता (? - शायद एक पूर्वावलोकन आइकन यदि ऐसा है तो विशेषता नाम भ्रामक है, हालांकि यह किसी कारण के लिए एक छवि है) है। एक वेबपृष्ठ में केवल एक यूआरएल (आमतौर पर) होता है ताकि यह एक ऐसा अच्छा उदाहरण हो जो एक विशेषता हो।

यदि दूसरी तरफ आप पेज पर छवियों को सूचीबद्ध करना चाहते हैं, तो जाहिर है कि एक से अधिक हो सकते हैं ताकि आपको इसके लिए तत्वों की आवश्यकता हो।

लेकिन, अंत में, अधिकांश समय कोई सही या गलत जवाब नहीं होता है और यह काफी हद तक शैली का सवाल है।

+0

आप "नोड" कहते हैं, लेकिन आपका मतलब "तत्व" है। प्रसंस्करण निर्देश, टिप्पणियां, और पाठ भी नोड्स हैं। XML की बहुत जटिलताओं को समझने के लिए यह एक महत्वपूर्ण भेद है, जैसे XPath नोड() फ़ंक्शन। –

+0

काफी सही। सही किया। – cletus

+0

जोड़ने के लिए एक और बात यह है कि एक्सएमएल को एक्सएमएल बदलने के लिए एक्सएसएल का उपयोग करने के लिए गुणों के भीतर इकाइयों को डीकोड करने का कोई तरीका नहीं है (http://stackoverflow.com/questions/67859/xslt-cannot-get-xslt-to-output-an -even के बाद भागने-चरित्र # 86,934)। – null

2

इस तरह की चीज़ों के लिए आमतौर पर सही या गलत जवाब नहीं होते हैं। अधिकतर यह इस बात पर निर्भर करता है कि आपको अपने डेटा तक पहुंचने की आवश्यकता है।

पहले के बारे में एक अच्छी बात यह है कि यह आसानी से, शायद बाद में, किसी अनुभाग में एकाधिक पृष्ठों का समर्थन करता है और एक श्रेणी में कई अनुभागों का समर्थन करता है। दूसरे में यह जानकारी पृष्ठों पर फैली हुई है।

2

एक्सएमएल भयानक फ़ाइल प्रारूप है और धार्मिक युद्धों में समाप्त होता है। जो कुछ भी आपको लगता है वह उस समय सबसे अच्छा है, बशर्ते आप इसे उचित ठहरा सकें। हालांकि, आपके विशेष उदाहरण काफी अलग हैं:

1 में, साइटमैप एक अनुभाग को समाहित करता है जो पृष्ठ को समाहित करता है।

2 में, साइटमैप एक पृष्ठ को समाहित करता है जो तीन आइटम: श्रेणी, अनुभाग, शीर्षक और यूआरएल को समाहित करता है। इनमें से किसी भी तीन आइटम में कोई अन्य नहीं है, वे भाई बहन हैं, जो आमतौर पर पृष्ठ के भीतर आयोजित होते हैं।

दो अलग-अलग संरचनाओं के रूप में, यह उस पर निर्भर करता है जिस पर आप इरादा रखते हैं।

एक अलग सवाल प्राथमिक स्तर के टैग बनाम विशेषताओं के लिए प्राथमिकता होगी। लेकिन जैसा कि मैंने कहा, यह अलग प्रश्न है!

1

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

12

दो उदाहरण समान नहीं हैं, क्योंकि वे अलग-अलग पदानुक्रम बनाते हैं। साइटमैप श्रेणियों की एक सूची है, जैसा कि पहला उदाहरण है? या यह दूसरे उदाहरण की तरह पृष्ठों की एक सूची है?

इसका उत्तर तत्व बनाम विशेषता प्रश्न के लिए ऑर्थोगोनल है।

तत्व बनाम गुण सवाल पर:

<sitemap> 
<page  
    category='Animals' 
    section='Dogs' 
    title='Great Dane' 
    url='/pics/greatdane.jpg' 
    /> 
</sitemap> 

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

<sitemap> 
<page>  
    <category>Animals</category> 
    <section>Dogs</section>  
    <title>Great Dane</title>  
    <url nofollow="true">/pics/greatdane.jpg</url> 
</page> 
</sitemap> 
1

आईबीएम Principles of XML Design शीर्षक से एक लेख है कि जब गुण बनाम तत्वों का उपयोग करने के बारे में कुछ दिशा निर्देश प्रदान पोस्ट किया गया है। मैंने यह आलेख उपयोगी पाया है, आपका माइलेज भिन्न हो सकता है।

2

मैं डेटा के लिए तत्वों का उपयोग और के लिए Metadata

1

पहले विकल्प थोड़ा मापता बेहतर जिम्मेदार बताते हैं। मान लीजिए कि आपको किसी अनुभाग अनुभाग की एक और विशेषता जोड़ने की आवश्यकता है, जैसे अनुभाग की स्थिति।मेरा सुझाव है कि इस प्रतिनिधित्व:

  1. नाम श्रेणी की संपत्ति है
  2. एक वर्ग एकाधिक अनुभागों हो सकता था
  3. स्थिति है:

    <sitemap> 
        <category name="Animals"> 
        <section title="Dogs" status="draft"> 
         ... 
        </section> 
        </category> 
    </sitemap> 
    

    निम्न तथ्यों संदेश को बेहतर ढंग से काम करता है एक खंड की संपत्ति; श्रेणी में सभी वर्गों को समान स्थिति रखने की आवश्यकता नहीं है।

संक्षेप में, यह पदानुक्रमिक संरचना स्पष्ट बनाता है, और दिखाता है कि पदानुक्रम के प्रत्येक स्तर पर कौन से गुण लागू होते हैं।

3

मुझे लगता है कि इस सवाल का जवाब काफी स्पष्ट है, जब आप आप कैसे और अधिक कुत्तों को जोड़ना चाहते हैं के बारे में सोचना:

<sitemap> 
    <category name="Animals"> 
    <section title="Dogs"> 
     <page url="/pics/greatdane.jpg" title="Great Dane"/> 
     <page url="/pics/wienerdog.jpg" title="Wiener Dog"/> 
    </section> 
    </category> 
</sitemap> 

या

<sitemap> 
    <page> 
    <category>Animals</category> 
    <section>Dogs</section> 
    <title>Great Dane</title> 
    <url>/pics/greatdane.jpg</url>  
    </page> 
    <page> 
    <category>Animals</category> 
    <section>Dogs</section> 
    <title>Wiener Dog</title> 
    <url>/pics/wienerdog.jpg</url> 
    </page> 
</sitemap> 
1

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

दो अन्य चीजें हैं जो यह गलत प्रतिनिधित्व कर सकते हैं:

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

गुणों का उपयोग करने के लिए स्पष्ट लाभ यह है कि वे टियरर एक्सएमएल में परिणाम देते हैं। वे (बहुत) तत्वों की तुलना में पार्स करने के लिए भी बहुत तेज हैं।

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