Submitted by mk on 12 May, 2005 - 15:33
(ควรมีความรู้ XML เล็กน้อยก่อนอ่าน)
- XML (Extensive Markup Language) เป็นภาษาที่ใช้เก็บข้อมูล ใช้แท็ก <> </> เหมือนกับ HTML แต่จุดต่างคือ เราสามารถ define แท็กเองได้
<addressBook> <card> <name>John Smith</name> <email>js@example.com</email> </card> <card> <name>Fred Bloggs</name> <email>fb@example.net</email> </card> </addressBook> |
ตัวอย่าง XML
- น ั่นหมายความว่า HTML เป็นหนึ่ง subset ของ XML เช่นเดียวกับ WML ที่ใช้ใน WAP ของโทรศัพท์ และ ebXML ที่แลกเปลี่ยนข้อมูลของ e-Business
- เมื่อ XML สามารถสร้างแท็กเองได้ การแลกเปลี่ยน XML ระหว่างกันจึงต้องมีเอกสารไว้ตรวจสอบว่า ไฟล์นั้นถูกต้องตามแท็กที่ตกลงกันไว้
- XML ที่เขียนถูกต้องตามมาตรฐาน XML เช่น มี <h1> ต้องมี </h1> หรือถ้าแท็กเดียวก็ต้องเป็น <br/> เรียกว่า Well Formed
- XML ที่แท็กถูกต้องตามเอกสารกำกับที่ตกลงกัน เรียกว่า Valid
- รูปแบบเอกสารกำกับแบบแรก เรียกว่า DTD (Document Type Definitions) ออกมานานแล้ว ข้อเสียก็คือ DTD เองเป็นอีกภาษานึงไปเลย ทำให้ยากต่อการเรียนรู้
<!DOCTYPE addressBook [ <!ELEMENT addressBook (card*)> <!ELEMENT card (name, email)> <!ELEMENT name (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> |
DTD สำหรับ XML ข้างบน
- ต่อมาปี 2001 ก็มีเอกสารกำกับแบบใหม่ ชื่อว่า XML Schema (.xsd) ที่ออกมากะให้แทน DTD แต่ตัว XSD เป็น XML เหมือนกัน
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="addressBook"> <xs:complexType> <xs:sequence> <xs:element name="card"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="email" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
XML Schema สำหรับ XML ข้างบน
- เค้าว่ากันว่า XML Schema ยากเกินไป และมีข้อเสียอีกหลายอย่าง เลยมีตัวใหม่ที่ชื่อว่า RELAX NG ซึ่งจะแบ่งเป็นแบบปกติ (ใช้ซินแท็ก XML) และแบบ Compact (ใช้การเขียนวงเล็บ แบบ C) ลดรูปลงไปอีก ให้เขียนง่ายอ่านง่ายขึ้น คิดว่าน่าจะให้เป็นหน้าที่ของ parser ในการแปลง Compact เป็นแบบปกตินะครับ
<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0"> <zeroOrMore> <element name="card"> <element name="name"> <text/> </element> <element name="email"> <text/> </element> </element> </zeroOrMore> </element> |
RELAX NG สำหรับ XML ข้างบน
element addressBook { element card { element name { text }, element email { text } }* } |
RELAX NG Compact สำหรับ XML ข้างบน
- อันไหนดีกว่ากัน ก็ตัดสินใจด้วยตัวเองดีกว่านะครับ (แต่บอสผมชื่อ James Clark อะ)
Comments
aRtie
14 May, 2005 - 15:19
Permalink
เรื่องของ m
เรื่องของ mark-up language เนี่ย.. สรุปได้สั้นๆว่า
จะทำอะไรให้มันถูกใจไปหมดทุกคนทุกฝ่ายเนี่ย..
มันแทบจะเป็นไปไม่ได้เลยนะ..
Add new comment