SlideShare a Scribd company logo
1 of 24
“หนึ่งหน่วยกลุ่ม” (Group 1)
Selected Topics in Computer Engineering II
DTD &
XML Schema
To try and create
Question Last Week:
About the same tag
เนื่องจาก XML ไม่มีการกาหนดชื่อของ element ที่ตายตัว จึงอาจเกิดปัญหาในการตั้งชื่อ้้ากัน
แต่วัตถุประสงค์และองค์ประกอบไม่ตรงกัน ยกตัวอย่างเช่น
<table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
เอกสารจัดเก็บข้อมูลแบบตาราง
Question Last Week:
About the same tag
<table>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
เอกสารจัดเก็บรายละเอียดข้อมูลเฟอรฺ์นิเจอร์
เห็นว่าทั้ง 2 ส่วนจะมี root element เป็น table เหมือนกัน แต่ table แรก และ table หลังมีข้อมูลที่
ไม่เหมือนกัน วิธีการแก้ปัญหาดังกล่าวทาได้โดยเพิ่ม Prefix เข้าไปในชื่อ ดังนี้
Question Last Week:
About the same tag
<h:table>
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>
<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
Question Last Week:
About the same tag
สาหรับเอกสาร XML จะมี attribute เพิ่มเติมอีกส่วนหนึ่งเพื่อเป็นการประกาศ namespace สาหรับ
อ้างอิงภายหลัง ดังนี้
<table xmlns="http://www.w3.org/TR/html5/ ">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
<table xmlns="http://www.w3schools.com/furniture ">
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
Question Last Week:
About the same tag
ตัวอย่างการอ้างอิงโดยใช้ namespace
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform ">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr>
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
การใช้XSL style sheet สาหรับแปลงเอกสาร
XML ให้อยู่ในรูปแบบที่กาหนด จากตัวอย่าง tag ที่
ขึ้นต้นด้วย xsl จะเป็น tag ที่ใช้namespace ในการ
อ้างอิงรูปแบบ้ึ่งประกาศไว้ที่
http://www.w3.org/1999/XSL/Transform
XML Schema
XML Schema ใช้สาหรับการให้รายละเอียดโครงสร้างของเอกสาร XML โดยมีชื่อเรียกอีกอย่า
ว่า XML Schema Definition (.XSD)
โดยเป้าหมายของการทา XML Schema คือการกาหนด Block ของ XML ที่อ่านแล้วรู้เรื่อง
เข้าใจง่ายและนาไปใช้ได้อย่างถูกต้องโดยจะกาหนดสิ่งต่อไปนี้ :
• elements และ attributesที่ สามารถไปอยู่บนเอกสาร (XML document)ได้
• เลขที่และอันดับของ child elements
• data types สาหรับ elements และ attributes
• ค่าเริ่มต้น และ ค่าคงที่ ของ elements และ attributes
XML Schema
• ตัวอย่าง XML ธรรมดา
<?xml version="1.0" encoding="UTF-8"?>
<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
<orderperson>John Smith</orderperson>
<shipto>
<name>Ola Nordmann</name>
<address>Langgt 23</address>
<city>4000 Stavanger</city>
<country>Norway</country>
</shipto>
<item>
<title>Empire Burlesque</title>
<note>Special Edition</note>
<quantity>1</quantity>
<price>10.90</price>
</item>
<item>
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
</shiporder>
XML Schema
• เทียบกับ XML Schema
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="orderid" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
XML Schema
• Simplified form
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- definition of simple elements -->
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
<!-- definition of attributes -->
<xs:attribute name="orderid" type="xs:string"/>
<!-- definition of complex elements -->
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="address"/>
<xs:element ref="city"/>
<xs:element ref="country"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item">
<xs:complexType>
<xs:sequence>
<xs:element ref="title"/>
<xs:element ref="note" minOccurs="0"/>
<xs:element ref="quantity"/>
<xs:element ref="price"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element ref="orderperson"/>
<xs:element ref="shipto"/>
<xs:element ref="item"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute ref="orderid" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
DTD
(Document Type
Declaration)
DTD การนิยามความหมาย การกาหนดโครงสร้างและข้อมูลของกฎเกณฑ์ของ
เอกสาร ที่จัดเก็บโดยเอกสาร XML ใช้เป็นตัวกาหนดว่า Element หนึ่งๆ นั้นมีส่วนประกอบ
อะไรบ้าง แล้วสามารถใช้ DTD สาหรับตรวจสอบความถูกต้องของเอกสาร XML ว่าสอดคล้อง
กับข้อตกลงที่กาหนดไว้เป็นไวยากรณ์ในไฟล์DTD หรือไม่ ถ้าไม่ก็จะฟ้องแสดงข้อผิดพลาด
ออกมา
โครงสร้างของ DTD
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
DTD
(Document Type
Declaration)
• ใช้<!ELEMENTnote (to,from,heading,body)>ในการกาหนดค่าต่างๆของ ELEMENT ใน (to,from,heading,body)
เป็นการบอกว่ามี ELEMENT ใดที่อยู่ใน ELEMENTnote หากมีสัญลักษณ์
+ ต้องมีค่าอย่างน้อยหนึ่งค่าแต่อาจมีได้มากกว่านั้น
* อาจมีค่าได้N ครั้ง หรืออาจไม่มีค่าเลยก็ได้
? มีค่าได้เพียงค่าเดียวหรือไม่มีค่าเลย
• ส่วน (#PCDATA)เป็นตัวกาหนดให้ภายใน element มีข้อความอยู่ หรือไม่มีข้อความอยู่ หากมี Attributeจะ
ใช้ <!ATTLISTelementNameattributeNameCDATA> ้ึ่งสามารถกาหนดรายละเอียดได้ตัวอย่างเช่น
CDATA:ค่าข้อมูลของ attributeต้องเป็นตัวอักษร
ENTITY,ENTITIES:ชื่อของเอนติตี้ที่ประกาศในDTD
ID: ข้อมูล้ึ่งมีค่าไม่้้า (unique)
• การประกาศแบบภายใน (Internal)
<!DOCTYPEroot [
ข้อมูล
]>
• การประกาศแบบภายนอก (External)
<!DOCTYPEroot SYSTEM "ชื่อไฟล์.dtd">
DTD
(Document Type
Declaration)
<!ELEMENT film (movie+)>
<!ELEMENT movie (name,types,stars,director,date)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT types (type+)>
<!ELEMENT type (#PCDATA)>
<!ELEMENT stars (name_actor+)>
<!ELEMENT name_actor (#PCDATA)>
<!ELEMENT director (#PCDATA)>
<!ELEMENT date (day,month,year)>
<!ELEMENT day (#PCDATA)>
<!ELEMENT month (#PCDATA)>
<!ELEMENT year (#PCDATA)>
Create DTD
DTD
(Document Type
Declaration)
from lxml import etree
parser = etree.XMLParser(dtd_validation=True)
tree = etree.parse("MovieAll_SPN.xml", parser)
ใช้ Python ตรวจสอบ XML โดยใช้ DTD
DTD
(Document Type
Declaration)
XML file ที่เพิ่ม DTD ตรวจสอบ
<movie>
<name>The Lobster</name>
<types>
<type>Comedy</type>
<type>Drama</type>
<type>Romance</type>
</types>
<stars>
<name_actor>Colin Farrell</name_actor>
</stars>
<director>Yorgos Lanthimos</director>
<date>
<day>15</day>
<month>Nov</month>
<year>2015</year>
</date>
</movie>
</film>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE film SYSTEM "movie_dtd.dtd">
<film>
<movie>
<name>Always</name>
<types>
<type>Drama</type>
<type>Romance</type>
</types>
<stars>
<name_actor>So Ji-
seob</name_actor>
<name_actor>Han Hyo-
joo</name_actor>
</stars>
<director>Song Il-Gon</director>
<date>
<day>2</day>
<month>Feb</month>
<year>2012</year>
</date>
</movie>
DTD
(Document Type
Declaration)
ถ้าลองแกไฟล์ให้ไม่มี <name_actor> ผลลัพธ์จะขึ้น error
Well-Formed
XML Document
• ลักษณะWell Formed XML เป็ นอย่างไร
1. XML ต้องมี root element เช่น <book>...</book>
2. XML element ต้องมี tag ปิดเสมอ เช่น <title>...</title>
3. XML tag เป็น case sensitive ( <Letter> ไม่เหมือนกับ <letter> )
4. XML ต้องสร้างให้เหมาะสม เช่น การแบ่งกลุ่มของข้อมูล การจัดการ Attribute อันนี้ต้องอาศัย
วิธีคิด
5. XML attribute value ต้องใส่ อัญญประกาศ (Double quotes: " ") เช่น
<book location="GatewayMall">Whiteout</book>
Well-Formed
XML Document
• สรุป Well-formXML
1. XML ที่มี Syntax ถูกต้องจะเรียกว่า Well-formedแต่ก็ไม่ได้รับประกันว่าข้อมูลที่กาลังอธิบาย
มี “โครงสร้าง” หรือ “ประเภท” ของข้อมูลว่าถูกต้องตามที่ผู้สร้างหรือ ผู้ที่จะนาไปใช้ต้องการ
2. ส่วน XML ที่มีโครงสร้างและข้อมูลแต่ละ Element ถูกต้องตาม Schema กาหนดจะเรียกว่า
Validated
Well-Formed
XML Document
• HTML เป็ น Well-form ไหม ?
เอกสาร HTML ไม่เป็นเอกสารในรูปแบบ well-formed เนื่องจากคาสั่ง หรือ tag ในภาษา
HTML มีหลาย tag ที่มีเฉพาะ tag เปิด โดยที่ไม่จาเป็นต้องใช้tag ปิดเลย ทาให้เอกสารที่สร้าง
ด้วย tag HTML จึงไม่ถือเป็นเอกสาร well-formed
Valid XML
Document
• ข้อกาหนด
คือ ส่วนที่เพิ่มเติมของข้อบังคับในข้อกาหนดรายละเอียด (XML Specification) ที่ต้องใช้ในการ
สร้างเอกสาร เพราะว่าความถูกต้องสมบูรณ์เป็นหลักทางเลือก (Option) สาหรับ XML การฝ่าฝืน
ข้อบังคับจะทาให้เกิดข้อผิดพลาด (Error) ที่จะตรงข้ามกับ (Fatal Error) เมื่อตัวประมวลผล Error
จะรายงานปัญหา และพยายามแก้ไขด้วยตัวเอง ข้อบังคับของความถูกต้องสมบูรณ์ จะ
ประกอบด้วยข้อบังคับที่ระบุเกี่ยวกับการสร้าง Document Type Declaration(DTD) และการสร้าง
เอกสารที่ต้องทาตามข้อกาหนดใน DTD
• ข้อบังคับของความถูกต้องสมบูรณ์ (Validity Constraints)
1. จะต้องเข้าเป็น Well-formedXML Document ก่อน
2. มีส่วน Prolog ของเอกสารจะต้องประกอบด้วย Document Type Declaration ที่ถูกต้อง
และข้อมูล ภายใน DTD จะเป็นตัวกาหนดโครงสร้างของเอกสารดังกล่าว
3. มีส่วนต่าง ๆ ของเอกสารจะต้องถูกต้องตามโครงสร้างที่กาหนดใน DTD
Valid XML
Document
• ประโยชน์ของการสร้างเอกสารที่ถูกต้องสมบูรณ์
1. สามารถเพิ่ม Element และ Attribute ได้ตามต้องการ
2. ส่วนประกอบของ DTD นั้นจะอธิบายโครงสร้าง้ึ่งจะอนุญาตให้ตัวประมวลผล XML (XML
Processor) ้ึ่งเป็นส่วนหนึ่งของ Program Browser ตรวจสอบว่าเอกสารนั้นตรงตามโครงสร้าง
หรือไม่
3. ส่วนอื่นๆของ DTD จะจัดเตรียมแผนมาตรฐานให้แก่ตัวประมวลผล เช่น ในการตรวจสอบ
ความถูกต้อง ถ้าส่วนใด ๆ ของเอกสารไม่ตรงตามข้อกาหนดรายละเอียด (Specification) ของ
DTD ตัวประมวลผลจะแสดงข้อผิดพลาด (Error Massage) ้ึ่งจะสามารถนาไปแก้ไข และ
ปฏิบัติให้ถูกต้องได้
Reference
• Valid XML Document
https://th.wikipedia.org/wiki/xml
code.function.in.th/xml/xml-parser
• Question Last Week: About the same tag
http://www.goragod.com/knowledge/XML
Members
Group1
นาย อภิวัฒธ์วงศ์โท๊ะ รหัสนักศึกษา 52-1116-530-2
นางสาว พัลลภา เขมรังสฤษฏ์รหัสนักศึกษา 56-
นางสาว อัญธิกา หนองบัว รหัสนักศึกษา 56-010126-
นาย ธีรวัฒน์ ผ่องสกุล รหัสนักศึกษา 56-010126-3015-
นาย ธนดล เตชะวัชรีกุล รหัสนักศึกษา 56-010126-
นาย ภูมมิฑล ไชยเชิดเกียรติ รหัสนักศึกษา 56-010116-
To try and create DTD and XML Schema

More Related Content

Similar to To try and create DTD and XML Schema

รายงาน
รายงานรายงาน
รายงานkongdang
 
รายงาน
รายงานรายงาน
รายงานpim1122
 
รายงาน
รายงานรายงาน
รายงานpim1122
 
รายงาน เรื่อง css
รายงาน เรื่อง cssรายงาน เรื่อง css
รายงาน เรื่อง cssnongnan
 
รายงาน
รายงานรายงาน
รายงานnoopim
 
รายงาน
รายงานรายงาน
รายงานkongdang
 
บทที่4
บทที่4บทที่4
บทที่4Palm Unnop
 
CSS คืออะไร?
CSS คืออะไร?CSS คืออะไร?
CSS คืออะไร?Somsak Phusririt
 
บทที่ 8 จัดข้อมูลให้เป็นสัดส่วนด้วยตาราง
บทที่ 8 จัดข้อมูลให้เป็นสัดส่วนด้วยตารางบทที่ 8 จัดข้อมูลให้เป็นสัดส่วนด้วยตาราง
บทที่ 8 จัดข้อมูลให้เป็นสัดส่วนด้วยตารางNattipong Siangyen
 
เขียนโปรแกรมด้วยไพธอน
เขียนโปรแกรมด้วยไพธอนเขียนโปรแกรมด้วยไพธอน
เขียนโปรแกรมด้วยไพธอนNuchy Suchanuch
 

Similar to To try and create DTD and XML Schema (14)

รายงาน
รายงานรายงาน
รายงาน
 
รายงาน
รายงานรายงาน
รายงาน
 
รายงาน
รายงานรายงาน
รายงาน
 
รายงาน เรื่อง css
รายงาน เรื่อง cssรายงาน เรื่อง css
รายงาน เรื่อง css
 
รายงาน
รายงานรายงาน
รายงาน
 
รายงาน
รายงานรายงาน
รายงาน
 
บทที่4
บทที่4บทที่4
บทที่4
 
CSS คืออะไร?
CSS คืออะไร?CSS คืออะไร?
CSS คืออะไร?
 
HTML
HTMLHTML
HTML
 
บทที่ 8 จัดข้อมูลให้เป็นสัดส่วนด้วยตาราง
บทที่ 8 จัดข้อมูลให้เป็นสัดส่วนด้วยตารางบทที่ 8 จัดข้อมูลให้เป็นสัดส่วนด้วยตาราง
บทที่ 8 จัดข้อมูลให้เป็นสัดส่วนด้วยตาราง
 
How to manage e-Media
How to manage e-MediaHow to manage e-Media
How to manage e-Media
 
DataSet
DataSetDataSet
DataSet
 
e-Office with digital document
e-Office with digital documente-Office with digital document
e-Office with digital document
 
เขียนโปรแกรมด้วยไพธอน
เขียนโปรแกรมด้วยไพธอนเขียนโปรแกรมด้วยไพธอน
เขียนโปรแกรมด้วยไพธอน
 

More from Aey Unthika

Assignmet 2 selectedtopic Topic in Computer Engineer
Assignmet 2 selectedtopic Topic in Computer EngineerAssignmet 2 selectedtopic Topic in Computer Engineer
Assignmet 2 selectedtopic Topic in Computer EngineerAey Unthika
 
Xml parser week2
Xml parser week2Xml parser week2
Xml parser week2Aey Unthika
 
Try PostgreSQL on linux
Try PostgreSQL on linuxTry PostgreSQL on linux
Try PostgreSQL on linuxAey Unthika
 
Example Database normal form
Example Database normal formExample Database normal form
Example Database normal formAey Unthika
 
Assignment 2 of Database (Database Security)
Assignment 2 of Database (Database Security)Assignment 2 of Database (Database Security)
Assignment 2 of Database (Database Security)Aey Unthika
 
Assignment 1 of Database (MySQL & Sqlite3)
Assignment 1 of Database (MySQL & Sqlite3) Assignment 1 of Database (MySQL & Sqlite3)
Assignment 1 of Database (MySQL & Sqlite3) Aey Unthika
 

More from Aey Unthika (6)

Assignmet 2 selectedtopic Topic in Computer Engineer
Assignmet 2 selectedtopic Topic in Computer EngineerAssignmet 2 selectedtopic Topic in Computer Engineer
Assignmet 2 selectedtopic Topic in Computer Engineer
 
Xml parser week2
Xml parser week2Xml parser week2
Xml parser week2
 
Try PostgreSQL on linux
Try PostgreSQL on linuxTry PostgreSQL on linux
Try PostgreSQL on linux
 
Example Database normal form
Example Database normal formExample Database normal form
Example Database normal form
 
Assignment 2 of Database (Database Security)
Assignment 2 of Database (Database Security)Assignment 2 of Database (Database Security)
Assignment 2 of Database (Database Security)
 
Assignment 1 of Database (MySQL & Sqlite3)
Assignment 1 of Database (MySQL & Sqlite3) Assignment 1 of Database (MySQL & Sqlite3)
Assignment 1 of Database (MySQL & Sqlite3)
 

To try and create DTD and XML Schema

  • 1. “หนึ่งหน่วยกลุ่ม” (Group 1) Selected Topics in Computer Engineering II DTD & XML Schema To try and create
  • 2. Question Last Week: About the same tag เนื่องจาก XML ไม่มีการกาหนดชื่อของ element ที่ตายตัว จึงอาจเกิดปัญหาในการตั้งชื่อ้้ากัน แต่วัตถุประสงค์และองค์ประกอบไม่ตรงกัน ยกตัวอย่างเช่น <table> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table> เอกสารจัดเก็บข้อมูลแบบตาราง
  • 3. Question Last Week: About the same tag <table> <name>African Coffee Table</name> <width>80</width> <length>120</length> </table> เอกสารจัดเก็บรายละเอียดข้อมูลเฟอรฺ์นิเจอร์ เห็นว่าทั้ง 2 ส่วนจะมี root element เป็น table เหมือนกัน แต่ table แรก และ table หลังมีข้อมูลที่ ไม่เหมือนกัน วิธีการแก้ปัญหาดังกล่าวทาได้โดยเพิ่ม Prefix เข้าไปในชื่อ ดังนี้
  • 4. Question Last Week: About the same tag <h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> <f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table>
  • 5. Question Last Week: About the same tag สาหรับเอกสาร XML จะมี attribute เพิ่มเติมอีกส่วนหนึ่งเพื่อเป็นการประกาศ namespace สาหรับ อ้างอิงภายหลัง ดังนี้ <table xmlns="http://www.w3.org/TR/html5/ "> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table> <table xmlns="http://www.w3schools.com/furniture "> <name>African Coffee Table</name> <width>80</width> <length>120</length> </table>
  • 6. Question Last Week: About the same tag ตัวอย่างการอ้างอิงโดยใช้ namespace <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform "> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr> <th align="left">Title</th> <th align="left">Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> การใช้XSL style sheet สาหรับแปลงเอกสาร XML ให้อยู่ในรูปแบบที่กาหนด จากตัวอย่าง tag ที่ ขึ้นต้นด้วย xsl จะเป็น tag ที่ใช้namespace ในการ อ้างอิงรูปแบบ้ึ่งประกาศไว้ที่ http://www.w3.org/1999/XSL/Transform
  • 7. XML Schema XML Schema ใช้สาหรับการให้รายละเอียดโครงสร้างของเอกสาร XML โดยมีชื่อเรียกอีกอย่า ว่า XML Schema Definition (.XSD) โดยเป้าหมายของการทา XML Schema คือการกาหนด Block ของ XML ที่อ่านแล้วรู้เรื่อง เข้าใจง่ายและนาไปใช้ได้อย่างถูกต้องโดยจะกาหนดสิ่งต่อไปนี้ : • elements และ attributesที่ สามารถไปอยู่บนเอกสาร (XML document)ได้ • เลขที่และอันดับของ child elements • data types สาหรับ elements และ attributes • ค่าเริ่มต้น และ ค่าคงที่ ของ elements และ attributes
  • 8. XML Schema • ตัวอย่าง XML ธรรมดา <?xml version="1.0" encoding="UTF-8"?> <shiporder orderid="889923" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="shiporder.xsd"> <orderperson>John Smith</orderperson> <shipto> <name>Ola Nordmann</name> <address>Langgt 23</address> <city>4000 Stavanger</city> <country>Norway</country> </shipto> <item> <title>Empire Burlesque</title> <note>Special Edition</note> <quantity>1</quantity> <price>10.90</price> </item> <item> <title>Hide your heart</title> <quantity>1</quantity> <price>9.90</price> </item> </shiporder>
  • 9. XML Schema • เทียบกับ XML Schema <?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="shiporder"> <xs:complexType> <xs:sequence> <xs:element name="orderperson" type="xs:string"/> <xs:element name="shipto"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="address" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="country" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="item" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string"/> <xs:element name="note" type="xs:string" minOccurs="0"/> <xs:element name="quantity" type="xs:positiveInteger"/> <xs:element name="price" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="orderid" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:schema>
  • 10. XML Schema • Simplified form <?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- definition of simple elements --> <xs:element name="orderperson" type="xs:string"/> <xs:element name="name" type="xs:string"/> <xs:element name="address" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="country" type="xs:string"/> <xs:element name="title" type="xs:string"/> <xs:element name="note" type="xs:string"/> <xs:element name="quantity" type="xs:positiveInteger"/> <xs:element name="price" type="xs:decimal"/> <!-- definition of attributes --> <xs:attribute name="orderid" type="xs:string"/> <!-- definition of complex elements --> <xs:element name="shipto"> <xs:complexType> <xs:sequence> <xs:element ref="name"/> <xs:element ref="address"/> <xs:element ref="city"/> <xs:element ref="country"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="item"> <xs:complexType> <xs:sequence> <xs:element ref="title"/> <xs:element ref="note" minOccurs="0"/> <xs:element ref="quantity"/> <xs:element ref="price"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="shiporder"> <xs:complexType> <xs:sequence> <xs:element ref="orderperson"/> <xs:element ref="shipto"/> <xs:element ref="item" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute ref="orderid" use="required"/> </xs:complexType> </xs:element> </xs:schema>
  • 11. DTD (Document Type Declaration) DTD การนิยามความหมาย การกาหนดโครงสร้างและข้อมูลของกฎเกณฑ์ของ เอกสาร ที่จัดเก็บโดยเอกสาร XML ใช้เป็นตัวกาหนดว่า Element หนึ่งๆ นั้นมีส่วนประกอบ อะไรบ้าง แล้วสามารถใช้ DTD สาหรับตรวจสอบความถูกต้องของเอกสาร XML ว่าสอดคล้อง กับข้อตกลงที่กาหนดไว้เป็นไวยากรณ์ในไฟล์DTD หรือไม่ ถ้าไม่ก็จะฟ้องแสดงข้อผิดพลาด ออกมา โครงสร้างของ DTD <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]>
  • 12. DTD (Document Type Declaration) • ใช้<!ELEMENTnote (to,from,heading,body)>ในการกาหนดค่าต่างๆของ ELEMENT ใน (to,from,heading,body) เป็นการบอกว่ามี ELEMENT ใดที่อยู่ใน ELEMENTnote หากมีสัญลักษณ์ + ต้องมีค่าอย่างน้อยหนึ่งค่าแต่อาจมีได้มากกว่านั้น * อาจมีค่าได้N ครั้ง หรืออาจไม่มีค่าเลยก็ได้ ? มีค่าได้เพียงค่าเดียวหรือไม่มีค่าเลย • ส่วน (#PCDATA)เป็นตัวกาหนดให้ภายใน element มีข้อความอยู่ หรือไม่มีข้อความอยู่ หากมี Attributeจะ ใช้ <!ATTLISTelementNameattributeNameCDATA> ้ึ่งสามารถกาหนดรายละเอียดได้ตัวอย่างเช่น CDATA:ค่าข้อมูลของ attributeต้องเป็นตัวอักษร ENTITY,ENTITIES:ชื่อของเอนติตี้ที่ประกาศในDTD ID: ข้อมูล้ึ่งมีค่าไม่้้า (unique) • การประกาศแบบภายใน (Internal) <!DOCTYPEroot [ ข้อมูล ]> • การประกาศแบบภายนอก (External) <!DOCTYPEroot SYSTEM "ชื่อไฟล์.dtd">
  • 13. DTD (Document Type Declaration) <!ELEMENT film (movie+)> <!ELEMENT movie (name,types,stars,director,date)> <!ELEMENT name (#PCDATA)> <!ELEMENT types (type+)> <!ELEMENT type (#PCDATA)> <!ELEMENT stars (name_actor+)> <!ELEMENT name_actor (#PCDATA)> <!ELEMENT director (#PCDATA)> <!ELEMENT date (day,month,year)> <!ELEMENT day (#PCDATA)> <!ELEMENT month (#PCDATA)> <!ELEMENT year (#PCDATA)> Create DTD
  • 14. DTD (Document Type Declaration) from lxml import etree parser = etree.XMLParser(dtd_validation=True) tree = etree.parse("MovieAll_SPN.xml", parser) ใช้ Python ตรวจสอบ XML โดยใช้ DTD
  • 15. DTD (Document Type Declaration) XML file ที่เพิ่ม DTD ตรวจสอบ <movie> <name>The Lobster</name> <types> <type>Comedy</type> <type>Drama</type> <type>Romance</type> </types> <stars> <name_actor>Colin Farrell</name_actor> </stars> <director>Yorgos Lanthimos</director> <date> <day>15</day> <month>Nov</month> <year>2015</year> </date> </movie> </film> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE film SYSTEM "movie_dtd.dtd"> <film> <movie> <name>Always</name> <types> <type>Drama</type> <type>Romance</type> </types> <stars> <name_actor>So Ji- seob</name_actor> <name_actor>Han Hyo- joo</name_actor> </stars> <director>Song Il-Gon</director> <date> <day>2</day> <month>Feb</month> <year>2012</year> </date> </movie>
  • 17. Well-Formed XML Document • ลักษณะWell Formed XML เป็ นอย่างไร 1. XML ต้องมี root element เช่น <book>...</book> 2. XML element ต้องมี tag ปิดเสมอ เช่น <title>...</title> 3. XML tag เป็น case sensitive ( <Letter> ไม่เหมือนกับ <letter> ) 4. XML ต้องสร้างให้เหมาะสม เช่น การแบ่งกลุ่มของข้อมูล การจัดการ Attribute อันนี้ต้องอาศัย วิธีคิด 5. XML attribute value ต้องใส่ อัญญประกาศ (Double quotes: " ") เช่น <book location="GatewayMall">Whiteout</book>
  • 18. Well-Formed XML Document • สรุป Well-formXML 1. XML ที่มี Syntax ถูกต้องจะเรียกว่า Well-formedแต่ก็ไม่ได้รับประกันว่าข้อมูลที่กาลังอธิบาย มี “โครงสร้าง” หรือ “ประเภท” ของข้อมูลว่าถูกต้องตามที่ผู้สร้างหรือ ผู้ที่จะนาไปใช้ต้องการ 2. ส่วน XML ที่มีโครงสร้างและข้อมูลแต่ละ Element ถูกต้องตาม Schema กาหนดจะเรียกว่า Validated
  • 19. Well-Formed XML Document • HTML เป็ น Well-form ไหม ? เอกสาร HTML ไม่เป็นเอกสารในรูปแบบ well-formed เนื่องจากคาสั่ง หรือ tag ในภาษา HTML มีหลาย tag ที่มีเฉพาะ tag เปิด โดยที่ไม่จาเป็นต้องใช้tag ปิดเลย ทาให้เอกสารที่สร้าง ด้วย tag HTML จึงไม่ถือเป็นเอกสาร well-formed
  • 20. Valid XML Document • ข้อกาหนด คือ ส่วนที่เพิ่มเติมของข้อบังคับในข้อกาหนดรายละเอียด (XML Specification) ที่ต้องใช้ในการ สร้างเอกสาร เพราะว่าความถูกต้องสมบูรณ์เป็นหลักทางเลือก (Option) สาหรับ XML การฝ่าฝืน ข้อบังคับจะทาให้เกิดข้อผิดพลาด (Error) ที่จะตรงข้ามกับ (Fatal Error) เมื่อตัวประมวลผล Error จะรายงานปัญหา และพยายามแก้ไขด้วยตัวเอง ข้อบังคับของความถูกต้องสมบูรณ์ จะ ประกอบด้วยข้อบังคับที่ระบุเกี่ยวกับการสร้าง Document Type Declaration(DTD) และการสร้าง เอกสารที่ต้องทาตามข้อกาหนดใน DTD • ข้อบังคับของความถูกต้องสมบูรณ์ (Validity Constraints) 1. จะต้องเข้าเป็น Well-formedXML Document ก่อน 2. มีส่วน Prolog ของเอกสารจะต้องประกอบด้วย Document Type Declaration ที่ถูกต้อง และข้อมูล ภายใน DTD จะเป็นตัวกาหนดโครงสร้างของเอกสารดังกล่าว 3. มีส่วนต่าง ๆ ของเอกสารจะต้องถูกต้องตามโครงสร้างที่กาหนดใน DTD
  • 21. Valid XML Document • ประโยชน์ของการสร้างเอกสารที่ถูกต้องสมบูรณ์ 1. สามารถเพิ่ม Element และ Attribute ได้ตามต้องการ 2. ส่วนประกอบของ DTD นั้นจะอธิบายโครงสร้าง้ึ่งจะอนุญาตให้ตัวประมวลผล XML (XML Processor) ้ึ่งเป็นส่วนหนึ่งของ Program Browser ตรวจสอบว่าเอกสารนั้นตรงตามโครงสร้าง หรือไม่ 3. ส่วนอื่นๆของ DTD จะจัดเตรียมแผนมาตรฐานให้แก่ตัวประมวลผล เช่น ในการตรวจสอบ ความถูกต้อง ถ้าส่วนใด ๆ ของเอกสารไม่ตรงตามข้อกาหนดรายละเอียด (Specification) ของ DTD ตัวประมวลผลจะแสดงข้อผิดพลาด (Error Massage) ้ึ่งจะสามารถนาไปแก้ไข และ ปฏิบัติให้ถูกต้องได้
  • 22. Reference • Valid XML Document https://th.wikipedia.org/wiki/xml code.function.in.th/xml/xml-parser • Question Last Week: About the same tag http://www.goragod.com/knowledge/XML
  • 23. Members Group1 นาย อภิวัฒธ์วงศ์โท๊ะ รหัสนักศึกษา 52-1116-530-2 นางสาว พัลลภา เขมรังสฤษฏ์รหัสนักศึกษา 56- นางสาว อัญธิกา หนองบัว รหัสนักศึกษา 56-010126- นาย ธีรวัฒน์ ผ่องสกุล รหัสนักศึกษา 56-010126-3015- นาย ธนดล เตชะวัชรีกุล รหัสนักศึกษา 56-010126- นาย ภูมมิฑล ไชยเชิดเกียรติ รหัสนักศึกษา 56-010116-