2010-02-03 17 views
5

नीचे एक्सएमएल स्निपेट में ए, सी, डी और ई के नामस्थान क्या हैं? दस्तावेज़ीकरण या विनिर्देशों के संदर्भ की सराहना की जाएगी।एक्सएमएल नेमस्पेस डिफॉल्टिंग/विरासत

<a xmlns="http://domain/a"> 
    <pre:b xmlns:pre="http://domain/b"> 
     <c/> 
     <d xmlns=""> 
      <e/> 
     </d> 
    </pre:b> 
</a> 

इसके अलावा, जावा फ्रेमवर्क आधिकारिक नेमस्पेस को डिफ़ॉल्ट करने का सम्मान करते हैं? मेरे पास oride.w2c है। * डीओएम पैकेज, हालांकि यह नामस्थान यूआरआई को सही ढंग से हल नहीं कर रहा है? उदाहरण के लिए, समान कार्यक्षमता वाला कुछ।

String namespace = DocumentParser.parse(). 
        getElement("a"). 
        getElement("b"). 
        getElement("c"). 
        getNamespaceURI(); 

उत्तर

4

मेरे सर्वोत्तम ज्ञान के लिए, जावा में सभी मानक एक्सएमएल एपीआई नेमस्पेस का समर्थन करते हैं। नामस्थानों के निर्माण से पहले कई एपीआई लिखे गए थे (या लोकप्रिय हो गए - अब मुझे याद नहीं है)। आप अक्सर enable support की जरूरत है:

public class NS { 
    private static void print(Node node) { 
    Queue<Node> nodes = new LinkedList<Node>(); 
    nodes.add(node); 
    while (!nodes.isEmpty()) { 
     node = nodes.poll(); 
     NodeList list = node.getChildNodes(); 
     for (int i = 0; i < list.getLength(); i++) { 
     nodes.add(list.item(i)); 
     } 
     System.out.format("%s %s %s%n", node.getPrefix(), node.getLocalName(), 
      node.getNamespaceURI()); 
    } 
    } 

    public static void main(String[] args) throws Exception { 
    String xml = "<a xmlns=\"http://domain/a\">" 
     + "<pre:b xmlns:pre=\"http://domain/b\">" + "<c/>" + "<d xmlns=\"\">" 
     + "<e/>" + "</d>" + "</pre:b>" + "</a>"; 

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    dbf.setNamespaceAware(true); 
    Document doc = dbf.newDocumentBuilder().parse(
     new InputSource(new StringReader(xml))); 
    print(doc.getDocumentElement()); 
    } 
} 

इस कोड को प्रिंट होगा:

null a http://domain/a 
pre b http://domain/b 
null c http://domain/a 
null d null 
null e null 
8

एक नाम स्थान xmlns="..." यह के भीतर किसी भी तत्व के लिए डिफ़ॉल्ट हो जाता है (जब तक डिफ़ॉल्ट तो ज़ाहिर है, एक गहरी तत्व में redeclared है) का उपयोग कर की घोषणा की। तो अगर आप के साथ अंत:

  • एक का उपयोग करता है http://domain/a (एक डिफ़ॉल्ट के रूप में निर्दिष्ट)
  • http://domain/b (निर्दिष्ट, लेकिन एक डिफ़ॉल्ट नहीं) का उपयोग करता
  • http://domain/a का उपयोग करता
  • घ (से एक विरासत में मिला है) कोई नाम स्थान (एक नया डिफ़ॉल्ट के रूप में निर्दिष्ट)
  • ई कोई नाम स्थान है (घ से विरासत में मिली)

प्रासंगिक कल्पना रों है ection है XML नामों कल्पना, section 6.2:

एक डिफ़ॉल्ट नाम स्थान घोषणा स्टार्ट टैग की शुरुआत जिसमें यह इसी एंड-टैग के अंत तक दिखाई देता है, को छोड़कर तक फैली हुई है की गुंजाइश किसी भी आंतरिक डिफ़ॉल्ट नामस्थान घोषणाओं का दायरा। खाली टैग के मामले में, दायरा टैग ही है।

एक डिफ़ॉल्ट नामस्थान घोषणा सभी अपरिवर्तित तत्व अपने दायरे के भीतर नामों पर लागू होती है। डिफ़ॉल्ट नेमस्पेस घोषणाएं सीधे नामों के नाम पर लागू नहीं होती हैं; अपरिक्स्ड विशेषताओं की व्याख्या तत्व द्वारा निर्धारित की जाती है जिस पर वे दिखाई देते हैं।

अगर कोई गुंजाइश में एक डिफ़ॉल्ट नाम स्थान घोषणा है, विस्तारित नाम एक बिना उपसर्ग तत्व नाम के लिए इसी अपने नाम स्थान नाम के रूप में डिफ़ॉल्ट नाम स्थान का URI है। यदि दायरे में कोई डिफ़ॉल्ट नामस्थान घोषणा नहीं है, तो नामस्थान नाम का कोई मूल्य नहीं है। नामस्थान नाम एक अपरिवर्तित विशेषता नाम के लिए हमेशा कोई मूल्य नहीं है। सभी मामलों में, स्थानीय नाम स्थानीय भाग है (जो पाठ्यक्रम है जो अपरिक्स्ड नाम स्वयं के समान है)।

11

जो मैं कह सकता हूं उससे यह निम्नानुसार होगा।

  • एक http://domain/a कि के रूप में हो जाएगा के रूप में है कि ख के लिए परिभाषित नाम स्थान है डिफ़ॉल्ट नाम स्थान
  • http://domain/b हो जाएगा
  • http://domain/a हो जाएगा के रूप में है कि डिफ़ॉल्ट नाम स्थान
  • घ हो जाएगा एक खाली/सेट किए बिना कारण नाम स्थान को फिर से स्थापित करने के लिए नाम स्थान का
  • ई एक खाली/सेट किए बिना नाम स्थान हो जाएगा, क्योंकि यह नई घोषणा के अंदर नीडिंत है

मैं इस specification से इसे बंद कर रहा हूं। नीचे भी मदद करने के लिए एक सारांश उद्धरण है।

अगर कोई गुंजाइश में एक डिफ़ॉल्ट नाम स्थान घोषणा है, विस्तारित नाम एक बिना उपसर्ग तत्व नाम के लिए इसी अपने नाम स्थान नाम के रूप में डिफ़ॉल्ट नाम स्थान का URI है। यदि कोई डिफ़ॉल्ट नामस्थान दायरे में घोषणा नहीं है, तो नामस्थान नाम का कोई मूल्य नहीं है। नामस्थान नाम एक अपरिवर्तित विशेषता नाम के लिए हमेशा कोई मूल्य नहीं है। सभी मामलों में, स्थानीय नाम स्थानीय भाग है (जो पाठ्यक्रम है जो अपरिक्स्ड नाम स्वयं के समान है)।

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