ความแตกต่างระหว่างองค์ประกอบและโหนดใน XML คืออะไร?


370

ฉันทำงานกับ Java ด้วย XML และฉันก็สงสัย ความแตกต่างระหว่างองค์ประกอบและโหนดคืออะไร?


7
แน่ใจว่าจะดูที่W3C datamodel นั้นเข้าใจง่าย - แม้สำหรับฉัน!
xtofl

15
ความคิดเห็นที่ดีจากforums.asp.net/t/443912.aspx/1#443940 : เช่นเดียวกับระหว่างผลไม้กับแอปเปิ้ล XmlElement ทุกตัวคือ XmlNode แต่ไม่ใช่ทุก XmlNode คือ XmlElement XmlElement เป็น XmlNode เพียงชนิดเดียว คนอื่น ๆ คือ XmlAttribute, XmlText เป็นต้น
atconway

2
องค์ประกอบเป็นส่วนหนึ่งของการกำหนดอย่างเป็นทางการของเอกสาร XML ที่มีรูปแบบที่ดีในขณะที่โหนดถูกกำหนดเป็นส่วนหนึ่งของรูปแบบวัตถุเอกสารสำหรับการประมวลผลเอกสาร XML
Jool

คำตอบ:


259

วัตถุโหนดเป็นชนิดข้อมูลหลักสำหรับ DOM ทั้งหมด

โหนดสามารถเป็นองค์ประกอบโหนดโหนดแอตทริบิวต์โหนดข้อความหรืออื่น ๆ ของประเภทโหนดที่อธิบายไว้ในบท "ประเภทโหนด"

องค์ประกอบ XML คือทุกอย่างตั้งแต่ (รวมถึง) แท็กเริ่มต้นขององค์ประกอบไปจนถึง (รวมถึง) แท็กสิ้นสุดขององค์ประกอบ


122
ตอนนี้ฉันเข้าใจคำตอบแล้ว ... การประชุมนั้นโง่ คำควรเป็นวิธีอื่น ๆ ในภาษาอังกฤษตามธรรมชาติ 'องค์ประกอบ' คือสิ่งที่เป็นส่วนประกอบพื้นฐานที่สุดซึ่งทุกอย่างถูกสร้างขึ้น เช่นองค์ประกอบในภาษาอังกฤษโดยทั่วไปมีความทั่วไปมากขึ้น ...
Sam Svenbjorgchristiensensen

11
@ Juan Mendes: นั่นคือสิ่งที่พวกเขาเป็นไปตาม DOM แต่ประเด็นของแซมคือ DOM พิจารณาโหนดพื้นฐาน (ดั้งเดิม) มากกว่าองค์ประกอบเมื่อ "องค์ประกอบ" จริง ๆ แล้วหมายถึงกลุ่มอาคารพื้นฐานที่สุดในภาษาอังกฤษ
BoltClock

16
@SamSvenbjorgchristiensensen ที่ไม่ค่อยแม่นยำ องค์ประกอบสามารถแบ่งย่อยออกเป็นส่วนต่าง ๆ เช่นโปรตอนนิวตรอนและอิเล็กตรอนซึ่งสามารถแบ่งออกเป็นควาร์กนิวตริโนเป็นต้นมันจะดีกว่าที่จะเข้าใจว่า 'โหนด' มีความหมายในทฤษฎีกราฟอย่างไร เข้าใจว่าทำไมนักออกแบบ XML จึงเลือกชื่อนั้น (DOM เป็นเพียงกราฟแบบลำดับชั้น)
Les Hazlewood

20
@LesHazlewood ที่จริงคำว่า "องค์ประกอบ" ถูกนำมาใช้เพื่ออธิบายองค์ประกอบทางกายภาพ (ไฮโดรเจนฮีเลียม ฯลฯ ) เพราะพวกเขาไม่ได้คิดว่าสิ่งเหล่านั้นแบ่งแยก ในไม่ช้าพวกเขาก็พบว่าพวกเขาผิด - สายเกินไปที่จะเปลี่ยนชื่อ; ) ฉันเห็นด้วยกับแซมวิธีที่พวกเขาตั้งชื่อและแยกองค์ประกอบ dom กับโหนดนั้นสับสนและคิดไม่ดีผ่าน (สเป็ค html มาก ๆ )
BT

3
@ BT ข้อโต้แย้งของคุณจะระงับถ้าคณะกรรมการข้อมูลจำเพาะ XML อาศัยอยู่ในกรีซโบราณ :) พวกเขาไม่ได้และดังนั้นคำจำกัดความที่ทันสมัย ​​(พจนานุกรม) ขององค์ประกอบที่ (ชัดเจน) หมายถึงส่วนที่เป็นส่วนประกอบ เพิ่มด้วยความรู้ทฤษฎีกราฟของโหนดและมีพื้นที่ไม่มากสำหรับการตีความ
Les Hazlewood

68

ข้อมูลจำเพาะ W3C ที่แตกต่างกันกำหนดประเภท "โหนด" ที่แตกต่างกัน

ดังนั้นข้อมูลจำเพาะ DOM จะกำหนดประเภทของโหนดต่อไปนี้:

  • Document- Element(สูงสุดหนึ่ง) ProcessingInstruction, Comment,DocumentType
  • DocumentFragment - Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • DocumentType -- ไม่มีลูก
  • EntityReference - Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • Element- Element, Text, Comment, ProcessingInstruction, CDATASection,EntityReference
  • Attr- Text,EntityReference
  • ProcessingInstruction -- ไม่มีลูก
  • Comment -- ไม่มีลูก
  • Text -- ไม่มีลูก
  • CDATASection -- ไม่มีลูก
  • Entity- Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • Notation -- ไม่มีลูก

XML Infoset (ใช้ XPath) มีชุดเล็กของโหนด:

  • รายการเอกสารข้อมูล
  • รายการข้อมูลองค์ประกอบ
  • รายการข้อมูลคุณสมบัติ
  • การประมวลผลรายการข้อมูลคำสั่ง
  • รายการข้อมูลอ้างอิงเอนทิตีที่ไม่ได้ขยาย
  • รายการข้อมูลตัวละคร
  • รายการข้อมูลความคิดเห็น
  • รายการข้อมูลการประกาศประเภทเอกสาร
  • รายการข้อมูลเอนทิตีที่ไม่ได้แยกวิเคราะห์
  • รายการข้อมูลสัญลักษณ์
  • รายการข้อมูลเนมสเปซ
  • XPath มีชนิดของโหนดต่อไปนี้:

    • โหนดรูท
    • โหนดองค์ประกอบ
    • โหนดข้อความ
    • โหนดคุณสมบัติ
    • โหนดเนมสเปซ
    • โหนดคำสั่งการประมวลผล
    • โหนดความคิดเห็น

    คำตอบสำหรับคำถามของคุณ " ความแตกต่างระหว่างองค์ประกอบและโหนด " คืออะไร:

    An element is a type of node. Many other types of nodes exist and serve different purposes.


    29

    โหนดเป็นส่วนหนึ่งของต้นไม้ DOM องค์ประกอบเป็นชนิดเฉพาะของโหนด

    เช่น <foo> This is Text </foo>

    คุณมีองค์ประกอบ foo (ซึ่งเป็นโหนดด้วยเนื่องจากองค์ประกอบสืบทอดมาจากโหนด) และโหนดข้อความ 'This is Text' ซึ่งเป็นลูกของ foo Element / Node


    7
    ตัวอย่างสั้น ๆ นี้ทำให้ฉันเข้าใจมากขึ้นจากนั้นเลือกคำตอบ
    KMC

    27

    โหนดสามารถเป็นสิ่งต่าง ๆ จำนวนมาก: ข้อความความคิดเห็นองค์ประกอบองค์ประกอบเอนทิตี้ ฯลฯ องค์ประกอบคือโหนดชนิดใดชนิดหนึ่งโดยเฉพาะ


    15

    ตามที่อธิบายไว้ใน XML ต่างๆข้อกำหนดการelementเป็นที่ซึ่งประกอบด้วยแท็กเริ่มต้นและแท็กสิ้นสุดและเนื้อหาในระหว่างหรือสลับกันแท็กองค์ประกอบที่ว่างเปล่า (ซึ่งมีเนื้อหาหรือไม่มีที่สิ้นสุดแท็ก) กล่าวคือองค์ประกอบเหล่านี้ทั้งหมด:

    <foo> stuff </foo>
    <foo bar="baz"></foo>
    <foo baz="qux" />

    แม้ว่าคุณจะได้ยิน "โหนด" ที่ใช้กับความหมายเดียวกันโดยประมาณ แต่ก็ไม่มีคำจำกัดความที่แม่นยำตามข้อกำหนด XML โดยปกติจะใช้เพื่ออ้างถึงโหนดของสิ่งต่าง ๆ เช่น DOMs ซึ่งอาจเกี่ยวข้องกับ XML หรือใช้ XML เพื่อเป็นตัวแทนของพวกเขา


    11

    เอกสาร xml ทำจากองค์ประกอบซ้อนกัน องค์ประกอบของมันเริ่มต้นที่แท็กเปิดและสิ้นสุดที่ดีแท็กปิด คุณอาจเห็น<body>และเป็น</body>html ทุกอย่างระหว่างการเปิดและปิดแท็กเป็นองค์ประกอบของเนื้อหา หากองค์ประกอบถูกกำหนดโดยแท็กปิดตัวเอง (เช่น<br/>) เนื้อหานั้นจะว่างเปล่า

    การเปิดแท็กยังสามารถระบุแอตทริบิวต์ได้เช่น <p class="rant">. ในตัวอย่างนี้ชื่อคุณลักษณะคือ 'class' และค่า 'rant'

    ภาษา XML ไม่มีสิ่งดังกล่าวเป็น 'โหน' อ่านข้อมูลจำเพาะคำไม่เกิดขึ้น

    บางคนใช้คำว่า 'โหนด' อย่างไม่เป็นทางการเพื่อหมายถึงองค์ประกอบซึ่งทำให้เกิดความสับสนเนื่องจากตัวแยกคำบางคำยังให้ความหมายทางเทคนิค (ระบุ 'โหนดข้อความ' และ 'โหนดองค์ประกอบ') ความหมายที่แท้จริงนั้นขึ้นอยู่กับตัวแยกวิเคราะห์ดังนั้นคำจะถูกกำหนดอย่างไม่ดีเว้นแต่คุณจะระบุสิ่งที่คุณใช้แยกวิเคราะห์ หากคุณองค์ประกอบหมายถึงพูดว่า 'องค์ประกอบ'


    คำนี้เกิดขึ้น: "(เช่นแต่ละโหนดใบไม้ในแผนผังไวยากรณ์สำหรับนิพจน์ทั่วไป)" มันอยู่ในภาคผนวกที่ไม่ใช่กฎเกณฑ์ แต่อย่างไรก็ตามมันจะเกิดขึ้น มีคำที่ใช้เป็นโหนดในทรีการแยกวิเคราะห์
    skyking

    แม้ว่าใครจะเห็นว่าคำจำกัดความของ XML นั้นไม่ได้กล่าวถึงโหนด แต่ Document Object Model (DOM) ที่กำหนดไว้สำหรับการตีความโดยทางโปรแกรมและการจัดการของ XML (โดยองค์กรมาตรฐานเดียวกัน) นั้นแน่นอนและใช้คำว่า "node" คำตอบนี้ไม่ได้ช่วยในการแยกแยะความแตกต่างและมันไม่ได้ช่วยเพียงแค่เพิกเฉยต่อการใช้งานที่หลากหลายโดยยืนยันว่าพวกเขาหมายถึงสิ่งเดียวกัน
    C Perkins

    9

    โหนดเป็นคลาสพื้นฐานสำหรับทั้งองค์ประกอบและคุณสมบัติ (และโดยทั่วไปแล้วการเป็นตัวแทน XML อื่นทั้งหมดด้วย)


    7

    องค์ประกอบเป็นโหนดชนิดเดียวที่สามารถมีโหนดลูกและคุณลักษณะ

    เอกสารยังมีโหนดลูก แต่
    ไม่มีแอตทริบิวต์ไม่มีข้อความองค์ประกอบลูกหนึ่งรายการ


    2

    โหนดถูกกำหนดเป็น:

    หน่วยที่เล็กที่สุดของโครงสร้างที่สมบูรณ์และถูกต้องในเอกสาร

    หรือเป็น:

    วัตถุในมุมมองแบบต้นไม้ที่ทำหน้าที่เป็นคอนเทนเนอร์เพื่อเก็บวัตถุที่เกี่ยวข้อง

    ตอนนี้มันมีหลายชนิดของโหนดเป็นโหนดองค์ประกอบ, โหนดคุณสมบัติเป็นต้น


    1

    ตอนนี้ฉันรู้แล้วองค์ประกอบคือหนึ่งในโหนด

    โหนดทุกประเภทมาที่นี่ " http://www.w3schools.com/dom/dom_nodetype.asp "

    องค์ประกอบอยู่ระหว่างแท็กเริ่มต้นและสิ้นสุดในแท็กสิ้นสุด

    ดังนั้นโหนดข้อความจึงเป็นโหนด แต่ไม่ใช่องค์ประกอบ


    0

    องค์ประกอบเป็นชนิดของโหนดเช่นเดียวกับแอตทริบิวต์ข้อความ ฯลฯ


    -3

    องค์ประกอบ XML เป็นโหนด XML แต่มีองค์ประกอบเพิ่มเติมเช่นแอตทริบิวต์

    <a>Lorem Ipsum</a>  //This is a node
    
    <a id="sample">Lorem Ipsum</a>  //This is an element

    ฉันไม่คิดว่าคุณมีแหล่งที่มาสำหรับการอ้างสิทธิ์นี้หรือไม่? ตัวอย่างเช่นมาตรฐาน XML กำหนดคำว่า "องค์ประกอบ" เป็นแท็กองค์ประกอบที่ว่างเปล่าหรือทุกอย่างจากและรวมถึงแท็กเริ่มต้นไปยังและรวมถึงแท็กสิ้นสุด แท็กเริ่มต้นและแท็กองค์ประกอบที่ว่างเปล่าไม่จำเป็นต้องมีองค์ประกอบใด ๆ ทั้งตัวอย่างของคุณเป็นองค์ประกอบ คำว่า "node" ถูกกำหนดไว้ที่อื่นใน DOM ซึ่งเกี่ยวกับโมเดลวัตถุและไม่ได้อยู่ในข้อความ
    skyking

    -7

    โหนดและองค์ประกอบเหมือนกัน ทุกองค์ประกอบเป็นโหนด แต่ไม่ใช่ว่าทุกโหนดจะต้องเป็นองค์ประกอบ


    9
    เนื่องจาก "ไม่ใช่ว่าทุกโหนดจะต้องเป็นองค์ประกอบ" การอ้างสิทธิ์ "โหนดและองค์ประกอบเหมือนกัน" จึงเป็นสิ่งที่ผิด
    glglgl

    1
    นอกจากคำอธิบายของคุณไม่ถูกต้องแล้วมันก็ไม่มีประโยชน์อะไร สิ่งเดียวที่คุณถูกต้องเกี่ยวกับการที่มีความแตกต่างระหว่างคำ แต่คำถามคือสิ่งที่แตกต่างกัน
    2560
    โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
    Licensed under cc by-sa 3.0 with attribution required.