Relax NG

(ควรมีความรู้ 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 อะ)

Keyword:

Comments

เรื่องของ mark-up language เนี่ย.. สรุปได้สั้นๆว่า
จะทำอะไรให้มันถูกใจไปหมดทุกคนทุกฝ่ายเนี่ย..
มันแทบจะเป็นไปไม่ได้เลยนะ..

Add new comment