ฉันเห็นบรรทัดต่อไปนี้ในไฟล์ XML:
xmlns:android="http://schemas.android.com/apk/res/android"ฉันยังเห็นxmlnsในไฟล์ XML อื่น ๆ อีกมากมายที่ฉันเจอ
มันคืออะไร?
ฉันเห็นบรรทัดต่อไปนี้ในไฟล์ XML:
xmlns:android="http://schemas.android.com/apk/res/android"ฉันยังเห็นxmlnsในไฟล์ XML อื่น ๆ อีกมากมายที่ฉันเจอ
มันคืออะไร?
คำตอบ:
มันกำหนดNamespace XML
ในตัวอย่างของคุณNamespace Prefixคือ " android " และNamespace URIคือ " http://schemas.android.com/apk/res/android "
ในเอกสารคุณจะเห็นองค์ประกอบต่างๆเช่น: <android:foo />
คิดว่าส่วนนำหน้าเนมสเปซเป็นตัวแปรที่มีชื่อแทนแบบสั้นสำหรับ URI เนมสเปซแบบเต็ม มันเทียบเท่า<http://schemas.android.com/apk/res/android:foo />กับการเขียนเกี่ยวกับสิ่งที่ "หมายถึง" เมื่อตัวแยกวิเคราะห์ XML อ่านเอกสาร
หมายเหตุ:คุณไม่สามารถใช้ URI เนมสเปซแบบเต็มแทนการใช้ส่วนนำหน้าเนมสเปซในเอกสารอินสแตนซ์ XML
ลองดูบทแนะนำนี้เกี่ยวกับ namespaces: http://www.sitepoint.com/xml-namespaces-explained/
<LinearLayoutทำงานโดยไม่ต้องขึ้นต้น?
                    มันหมายความว่าnamespace XML
โดยทั่วไปทุกองค์ประกอบ (หรือแอตทริบิวต์) ในXMLเป็นของ namespace ซึ่งเป็นวิธีการ "คัดเลือก" ชื่อขององค์ประกอบ
ลองนึกภาพคุณและฉันทั้งคู่คิดค้น XML ของเราเอง คุณคิดค้น XML เพื่ออธิบายผู้คนฉันคิดค้นเหมืองเพื่ออธิบายเมือง nameเราทั้งคู่มีองค์ประกอบที่เรียกว่า คุณหมายถึงชื่อของบุคคลนั้นและเป็นชื่อเมือง - โอเคมันเป็นเรื่องเล็กน้อย
<person>
    <name>Rob</name>
    <age>37</age>
    <homecity>
        <name>London</name>
        <lat>123.000</lat>
        <long>0.00</long>
    </homecity>
</person>หาก XML สองตัวของเรารวมกันเป็นเอกสารเดียวเราจะบอกชื่อทั้งสองได้อย่างไร? อย่างที่คุณเห็นด้านบนมีสองnameองค์ประกอบ แต่ทั้งคู่มีความหมายต่างกัน
คำตอบคือคุณและฉันจะกำหนด namespace ให้กับ XML ของเราซึ่งเราจะสร้างเอกลักษณ์ให้:
<personxml:person xmlns:personxml="http://www.your.example.com/xml/person"
                  xmlns:cityxml="http://www.my.example.com/xml/cities">
    <personxml:name>Rob</personxml:name>
    <personxml:age>37</personxml:age>
    <cityxml:homecity>
        <cityxml:name>London</cityxml:name>
        <cityxml:lat>123.000</cityxml:lat>
        <cityxml:long>0.00</cityxml:long>
    </cityxml:homecity>
</personxml:person>ตอนนี้เราได้ผ่านการรับรอง XML ของเราอย่างสมบูรณ์แล้วไม่มีความคลุมเครือเกี่ยวกับความnameหมายของแต่ละองค์ประกอบ แท็กทั้งหมดที่เริ่มต้นด้วยpersonxml:เป็นแท็กที่เป็นของ XML ของคุณแท็กทั้งหมดที่เริ่มต้นด้วยcityxml:เป็นของฉัน
มีกี่จุดที่ควรทราบ:
หากคุณแยกการประกาศเนมสเปซใด ๆ สิ่งต่าง ๆ จะถือว่าอยู่ในเนมสเปซเริ่มต้น
หากคุณประกาศเนมสเปซที่ไม่มีตัวระบุนั่นคือxmlns="http://somenamespace"แทนที่จะxmlns:rob="somenamespace"เป็นตัวระบุมันจะกำหนดเนมสเปซเริ่มต้นสำหรับเอกสาร
เนมสเปซที่แท้จริงนั้นมักจะเป็นIRIซึ่งไม่มีผลที่แท้จริง มันควรจะไม่ซ้ำกันดังนั้นผู้คนมักจะเลือก IRI / URI ที่พวกเขาเป็นเจ้าของ แต่ไม่มีความหมายมากไปกว่านั้น บางครั้งผู้คนจะวางสคีมา (คำจำกัดความ) สำหรับ XML ที่ IRI ที่ระบุ แต่เป็นแบบแผนของบางคนเท่านั้น
คำนำหน้าจะไม่มีผลใด ๆ สิ่งเดียวที่มีความสำคัญคือสิ่งที่ namespace คำนำหน้าหมายถึง หลายแท็กเริ่มต้นด้วยคำนำหน้าที่แตกต่างกันทั้งหมดซึ่งแมปไปยังเนมสเปซเดียวกันจะถือว่าเหมือนกัน
ตัวอย่างเช่นหากคำนำหน้าpersonxmlและmycityxmlทั้งคู่แมปกับเนมสเปซเดียวกัน (เช่นในตัวอย่างด้านล่าง) ก็ไม่เป็นไรถ้าคุณนำหน้าองค์ประกอบที่กำหนดด้วยpersonxmlหรือmycityxmlพวกเขาทั้งสองจะได้รับการปฏิบัติเหมือนกันโดยตัวแยกวิเคราะห์ XML . ประเด็นก็คือตัวแยกวิเคราะห์ XML ไม่สนใจสิ่งที่คุณเลือกเป็นคำนำหน้าเฉพาะเนมสเปซที่จะจับคู่ด้วย คำนำหน้าเป็นเพียงร้ายชี้ไปที่การ namespace
<personxml:person 
     xmlns:personxml="http://example.com/same/url"
     xmlns:mycityxml="http://example.com/same/url" />คุณสมบัติสามารถมีคุณสมบัติได้ แต่โดยทั่วไปจะไม่ พวกเขายังไม่ได้รับ namespace ของพวกเขาจากองค์ประกอบที่พวกเขาอยู่ตรงข้ามกับองค์ประกอบ (ดูด้านล่าง)
นอกจากนี้เนมสเปซองค์ประกอบยังสืบทอดมาจากองค์ประกอบหลัก ในคำอื่น ๆ ฉันสามารถเขียน XML ข้างต้นเท่า ๆ กันเป็น
<person xmlns="http://www.your.example.com/xml/person">
    <name>Rob</name>
    <age>37</age>
    <homecity xmlns="http://www.my.example.com/xml/cities">
        <name>London</name>
        <lat>123.000</lat>
        <long>0.00</long>
    </homecity>
</person>ฉันคิดว่าความสับสนที่ยิ่งใหญ่ที่สุดคือเนมสเปซ xml ชี้ไปยัง URL บางประเภทที่ไม่มีข้อมูลใด ๆ แต่ความจริงก็คือบุคคลที่คิดค้นด้านล่างชื่อ:
xmlns:android="http://schemas.android.com/apk/res/android"ยังสามารถเรียกมันว่า:
xmlns:android="asjkl;fhgaslifujhaslkfjhliuqwhrqwjlrknqwljk.rho;il"นี่เป็นเพียงตัวระบุที่ไม่ซ้ำกัน อย่างไรก็ตามมีการกำหนดว่าคุณควรใส่ URL ที่ไม่ซ้ำใครและอาจชี้ไปที่ข้อมูลจำเพาะของแท็ก / แอตทริบิวต์ที่ใช้ในเนมสเปซนั้น มันไม่จำเป็นต้องใช้ท่อ
ทำไมมันควรจะไม่ซ้ำกัน? เนื่องจากวัตถุประสงค์ของเนมสเปซคือการทำให้มันไม่ซ้ำกันดังนั้นแอตทริบิวต์สำหรับตัวอย่างที่เรียกว่าพื้นหลังจากเนมสเปซของคุณสามารถแยกความแตกต่างจากพื้นหลังจากเนมสเปซอื่น
เนื่องจากความเป็นเอกลักษณ์ดังกล่าวคุณไม่จำเป็นต้องกังวลว่าหากคุณสร้างแอตทริบิวต์ที่กำหนดเองคุณจะต้องมีการชนกันของชื่อ
xmlns - xml เนมสเปซ เป็นเพียงวิธีการหลีกเลี่ยงความขัดแย้งของชื่อองค์ประกอบ ตัวอย่างเช่น:
<config xmlns:rnc="URI1" xmlns:bsc="URI2">
  <rnc:node>
      <rnc:rncId>5</rnc:rncId>
  </rnc:node>
  <bsc:node>
      <bsc:cId>5</bsc:cId>
  </bsc:node>
</config>nodeองค์ประกอบสองอย่างที่แตกต่างกันในไฟล์ xml ไฟล์เดียว หากไม่มีเนมสเปซไฟล์นี้จะไม่ถูกต้อง
คุณมีช่องว่างชื่อเพื่อให้คุณสามารถมีองค์ประกอบที่ไม่ซ้ำกันทั่วโลก อย่างไรก็ตาม 99% ของเวลานี้ไม่สำคัญ แต่เมื่อคุณใส่ในมุมมองของThe Semantic Webมันเริ่มมีความสำคัญ
ตัวอย่างเช่นคุณสามารถทำให้ XML mash-up xmlnsของรูปแบบที่แตกต่างกันโดยใช้เพียงแค่ที่เหมาะสม ตัวอย่างเช่นผสมเพื่อนของเพื่อนด้วยvCardเป็นต้น