XML และ XSD แตกต่างกันอย่างไร


คำตอบ:


145

จริงๆแล้ว XSD คือ XML นั้นเอง มีวัตถุประสงค์เพื่อตรวจสอบความถูกต้องของโครงสร้างของเอกสาร XML อื่น XSD ไม่บังคับสำหรับ XML ใด ๆ แต่รับรองว่า XML สามารถใช้เพื่อวัตถุประสงค์บางอย่างได้ XML มีเฉพาะข้อมูลในรูปแบบและโครงสร้างที่เหมาะสม


ดังนั้นฉันจึงชัดเจน - หากบุคคลที่สามส่งเอกสาร. XSD มาให้ฉันพร้อมกับ: <xs: element name = "QuoteRequestID" type = "xs: unsignedLong" minOccurs = "0" /> รวมอยู่ด้วย - นี่เป็นเพียง คำอธิบายของฟิลด์ไม่ใช่มัน เป็นสิ่งที่สมเหตุสมผลหรือไม่ที่จะขอคำขอตัวอย่างจริงซึ่งจะเป็น XML ดิบที่มี <QuoteResultID> ฯลฯ เป็นต้น
James Wilson

3
แน่นอนคุณสามารถถามพวกเขาได้ นอกจากนี้คุณยังสามารถใช้บางส่วนของเครื่องมือออนไลน์ที่สามารถทำเช่นนี้สำหรับคุณเช่นนี้เช่น - xsd2xml เพียงแค่วาง xsd และมันจะสร้างเอกสาร xml ตัวอย่างขึ้นอยู่กับมัน
anthares

@anthares ฉันลองใช้ลิงก์กับ: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="QuoteRequestID" type="xs:unsignedLong" minOccurs="0" /> </xs:schema> แต่ได้รับข้อผิดพลาด: Error!!! The 'minOccurs' attribute cannot be present.
heretoinfinity

ทำไมถึงเป็นปัญหา?
heretoinfinity

111


ยกตัวอย่าง

<root>
  <parent>
     <child_one>Y</child_one>
     <child_two>12</child_two>
  </parent>
</root>

และออกแบบ xsd สำหรับสิ่งนั้น:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parent">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="child_one" type="xs:string" />
              <xs:element name="child_two" type="xs:int" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


สิ่งที่เป็นไปไม่ได้กับ XSD:ต้องการเขียนไว้ก่อนเนื่องจากรายการมีขนาดเล็กมาก
1) คุณไม่สามารถตรวจสอบโหนด / แอตทริบิวต์โดยใช้ค่าของโหนด / แอตทริบิวต์อื่น
2) นี่คือข้อ จำกัด :องค์ประกอบที่กำหนดในไฟล์ XSD ต้องถูกกำหนดด้วยประเภทข้อมูลเดียวเท่านั้น [ในตัวอย่างด้านบนหาก<child_two>ปรากฏใน<parent>โหนดอื่นจะไม่สามารถกำหนดประเภทข้อมูลได้นอกจาก int
3) คุณไม่สามารถเพิกเฉยต่อการตรวจสอบความถูกต้องขององค์ประกอบและแอตทริบิวต์กล่าวคือหากองค์ประกอบ / แอตทริบิวต์ปรากฏใน XML จะต้องกำหนดไว้อย่างชัดเจนใน XSD ที่เกี่ยวข้อง แม้ว่าการใช้งาน <xsd:any>อนุญาต แต่ก็มีกฎของตัวเอง การปฏิบัติตามซึ่งนำไปสู่ข้อผิดพลาดในการตรวจสอบความถูกต้อง ฉันได้ลองใช้แนวทางที่คล้ายกันแล้วและไม่ประสบความสำเร็จอย่างแน่นอนนี่คือคำถาม & คำตอบ


สิ่งที่เป็นไปได้กับ XSD:
1) คุณสามารถทดสอบลำดับชั้นที่เหมาะสมของโหนด XML [xsd กำหนดว่าลูกใดควรอยู่ภายใต้พาเรนต์ ฯลฯ ซึ่งจะถูกนับเป็นข้อผิดพลาดในตัวอย่างข้างต้น child_two ไม่สามารถเป็นชายด์ของ root ในทันที แต่เป็นแท็กย่อยของ "parent" ซึ่งอยู่ในทางกลับกัน a ลูกของโหนด "ราก" มีลำดับชั้น .. ]
2) คุณสามารถกำหนดชนิดข้อมูลของค่าของโหนด [ในตัวอย่างข้างบน child_two ไม่สามารถมีข้อมูลอื่นนอกจากตัวเลข]
3) คุณยังสามารถกำหนด data_types ที่กำหนดเอง [ตัวอย่างเช่นสำหรับโหนด<month>ข้อมูลที่เป็นไปได้อาจเป็นหนึ่งใน 12 เดือน .. ดังนั้นคุณต้องกำหนด 12 เดือนทั้งหมด ในชนิดข้อมูลใหม่เขียนชื่อ 12 เดือนทั้งหมดเป็นค่าการแจงนับ ..
4) คุณสามารถกำหนดข้อ จำกัด ในการเกิดองค์ประกอบโดยใช้ minOccurs และ maxOccurs ค่าเริ่มต้นคือ 1 และ 1

.. และอื่น ๆ อีกมากมาย ...


1
@ InfantPro'Aravind 'คุณหมายถึงอะไรโดย "คุณไม่สามารถตรวจสอบความถูกต้องของโหนด / แอตทริบิวต์โดยใช้ค่าของโหนด / แอตทริบิวต์อื่นได้" ทำไมคนถึงอยากทำแบบนั้น?
Geek


"คุณไม่สามารถตรวจสอบโหนด / แอตทริบิวต์โดยใช้ค่าของโหนด / แอตทริบิวต์อื่นได้" หมายความว่าอย่างไร
GrowinMan

@ GrowinMan การตรวจสอบเงื่อนไข (ไม่สัมพันธ์พ่อแม่และเด็ก) Ex: ถ้าเป็น XML ของคุณ: <root> <A>A</A> <B/> <C/> </root>และถ้าโหนด<A>เป็น<A>B</A>แล้วให้<B>บังคับถ้า<A>C</A>แล้วให้<C>บังคับ
InfantPro'Aravind '

ข้อกำหนดข้างต้นเป็นไปไม่ได้ที่จะบรรลุด้วยXSD เพียงอย่างเดียว
InfantPro'Aravind '

15

XSD:
XSD (XML Schema Definition) ระบุวิธีอธิบายองค์ประกอบอย่างเป็นทางการในเอกสาร Extensible Markup Language (XML)
Xml:
XML ได้รับการออกแบบมาเพื่ออธิบายข้อมูลซึ่งไม่ขึ้นอยู่กับซอฟต์แวร์และฮาร์ดแวร์
มันช่วยเพิ่มสิ่งต่อไปนี้
- การแบ่งปันข้อมูล
- แพลตฟอร์มอิสระ
- เพิ่มความพร้อมใช้งานของข้อมูล

แตกต่าง:

  1. XSD อิงและเขียนบน XML

  2. XSD กำหนดองค์ประกอบและโครงสร้างที่สามารถปรากฏในเอกสารได้ในขณะที่ XML ไม่มี

  3. XSD ทำให้แน่ใจว่าข้อมูลถูกตีความอย่างถูกต้องในขณะที่ XML ไม่

  4. เอกสาร XSD ได้รับการตรวจสอบเป็น XML แต่สิ่งที่ตรงกันข้ามอาจไม่เป็นจริงเสมอไป

  5. XSD จับข้อผิดพลาดได้ดีกว่า XML

XSD กำหนดองค์ประกอบที่สามารถใช้ในเอกสารซึ่งเกี่ยวข้องกับข้อมูลจริงที่จะเข้ารหัส
เช่น
วันที่ที่แสดงเป็น 1/12/2010 อาจหมายถึง 12 มกราคมหรือ 1 ธันวาคม การประกาศชนิดข้อมูลวันที่ในเอกสาร XSD ตรวจสอบให้แน่ใจว่าเป็นไปตามรูปแบบที่กำหนดโดย XSD


คำสั่งแรกอธิบายทุกอย่าง
Ojonugwa Jude Ochalifu

6

XML เทียบกับ XSD

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

XSD (หรือที่เรียกว่า XML Schema)เช่น DTD ก่อนหน้านี้จะเพิ่มพลังให้กับ e X tensibility ใน XMLโดยให้ผู้ใช้กำหนดคำศัพท์และไวยากรณ์ขององค์ประกอบและแอตทริบิวต์ในเอกสาร XML ที่ถูกต้อง


6

ตัวอย่าง XML ที่เรียบง่าย:

<school>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</school>

XSD ของ XML ข้างต้น (อธิบาย):

<xs:element name="school">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

ที่นี่:

xs: element : กำหนดองค์ประกอบ

xs: ลำดับ : หมายถึงองค์ประกอบลูกที่ปรากฏตามลำดับที่กล่าวถึงเท่านั้น

xs: complexType : แสดงว่ามีองค์ประกอบอื่น ๆ

xs: simpleType : แสดงว่าไม่มีองค์ประกอบอื่น ๆ

ชนิด: สตริงทศนิยมจำนวนเต็มบูลีนวันที่เวลา

  • กล่าวง่ายๆคือ xsd เป็นอีกวิธีหนึ่งในการแสดงและตรวจสอบข้อมูล XML ด้วยชนิดที่ระบุ
  • ด้วยความช่วยเหลือของคุณสมบัติพิเศษเราสามารถดำเนินการได้หลายอย่าง

  • การดำเนินการใด ๆ บน xsd นั้นง่ายกว่า xml


Hi! ฉันใช้โปรแกรมอะไรในการสร้างไฟล์ XSD
Judith

โปรแกรม @Judith? คุณช่วยอธิบายคำถามของคุณได้ไหม เช่นตัวแก้ไขหรือภาษาหรือเครื่องมือ?
shubham1js

1

โดยทั่วไปไฟล์ XSD จะกำหนดว่าไฟล์ XML จะมีลักษณะอย่างไร เป็นไฟล์ Schemaที่กำหนดโครงสร้างของไฟล์ XML ดังนั้นจึงระบุว่าฟิลด์ที่เป็นไปได้คืออะไรและจะมีขนาดเท่าใด

ไฟล์ XML เป็นอินสแตนซ์ของ XSD เนื่องจากใช้กฎที่กำหนดไว้ใน XSD


0

XML มีแอปพลิเคชั่นที่กว้างกว่า f.ex. HTML ไม่มี "แอปพลิเคชัน" ที่แท้จริงหรือเป็นค่าเริ่มต้น ดังนั้นในขณะที่คุณอาจไม่สนใจจริงๆว่าหน้าเว็บจะถูกควบคุมโดยสิ่งที่อนุญาตจากฝั่งของผู้เขียนคุณอาจต้องการกำหนดสิ่งที่เอกสาร XML อาจมีและอาจไม่มี

มันเหมือนกับการออกแบบฐานข้อมูล

สิ่งที่เกี่ยวกับเทคโนโลยี XML ก็คือสิ่งเหล่านี้มีลักษณะเป็นข้อความ ด้วย XSD หมายความว่าคุณมีกรอบการกำหนดโครงสร้างข้อมูลที่สามารถ "เสียบ" กับเครื่องมือประมวลผลข้อความเช่น PHP ดังนั้นไม่เพียง แต่คุณสามารถจัดการข้อมูลได้เอง แต่ยังสามารถเปลี่ยนแปลงและจัดทำเอกสารโครงสร้างได้อย่างง่ายดายและยังสร้างส่วนหน้าอัตโนมัติอีกด้วย

เมื่อมองเช่นนี้ XSD คือ "กาว" หรือ "ตัวกลาง" ระหว่างข้อมูล (XML) และเครื่องมือประมวลผลข้อมูล

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