820 likes | 1.12k Views
XML Schema. เนื้อหา. XML Schema เบื้องต้น Data Types Built-in Named Anonymous Simple Element และ Attribute Complex Element. XML Schema. XML schema อธิบายโครงสร้างของเอกสาร XML กำหนด building block ของเอกสาร XML ( เช่นเดียวกับ DTD)
E N D
เนื้อหา • XML Schema เบื้องต้น • Data Types • Built-in • Named • Anonymous • Simple Element และ Attribute • Complex Element
XML Schema • XML schema อธิบายโครงสร้างของเอกสาร XML • กำหนด building block ของเอกสาร XML (เช่นเดียวกับ DTD) • XML Schema language :XML Schema Definition (XSD) • XML Schema: กำหนด • elements และ attributes ที่จะปรากฏในเอกสาร • ว่า elements ใดเป็น child elements • ลำดับ และจำนวนของ child elements • ว่า element ใด empty หรือสามารถมี text ได้ • data types สำหรับ elements และ attributes • default value และ fixed values สำหรับ elements และ attributes
DTDs? • ไม่จัดเป็น XML syntax • ไม่มีการกำหนด data type • ไม่สนับสนุน namespaces • ไม่สามารถรองรับการขยายขอบเขต (extensibility) ได้ในอนาคต • ไม่สามารถใช้ mixed content ได้ • ไม่สามารถกำหนดจำนวน และลำดับของ child elements ได้ • element names ใน DTD จัดเป็น global name • …
Solution • เขียนนิยามภาษา เป็น XML • อนุญาตให้มีการควบคุมการจัดการ contents ของเอกสาร • เอกสาร XML จัดเป็น • complex data type • นิยามภาษา XML จัดเป็น • complex data type specification
XML Schema • ถูกเสนอโดย Microsoft แต่ปัจจุบันเป็น W3C recommendation ตั้งแต่ May 2001 • เป็นเอกสารที่แยกออกจากเอกสาร XML เสมอ • ไม่มี internal option • เขียนด้วย XML
สนับสนุนการจัดการ Data Types • จุดเด่นของ XML Schemas คือ การสนับสนุนการจัดการ data type • การสนับสนุนการจัดการ data type ทำให้: • ง่ายต่อการอธิบายเนื้อหา (content) ของเอกสารที่อนุญาตให้มีได้ • ง่ายต่อการ validate ความถูกต้องของข้อมูล • ง่ายต่อการจัดการข้อมูล ร่วมกับฐานข้อมูล • ง่ายต่อการกำหนด data facets (ข้อจำกัดของข้อมูล - restrictions on data) • ง่ายต่อการกำหนด patterns ของข้อมูล (data formats) • ง่ายต่อการ convert ข้อมูลระหว่าง data types ที่แตกต่างกัน
ใช้ไวยากรณ์ของ XML • จุดเด่นอีกข้อหนิ่งของ XML Schema คือเขียนด้วย XML • การเขียน XML Schemas ด้วย XML ทำให้ : • ไม่ต้องเรียนภาษาอื่นเพิ่มเติม • ใช้ XML editor สำหรับ edit แฟ้ม Schema ได้ • ใช้ XML parser สำหรับ parse แฟ้ม Schema ได้ • จัดการ Schema ด้วย XML DOM ได้ • สามารถเปลี่ยนรูป (transform) Schema ด้วย XSLT ได้
รองรับการขยายขอบเขต (extensible) • XML Schemas รองรับการขยายขอบเขตได้ในอนาคต (extensible) ได้เช่นเดียวกับ XML เนื่องจากเขียนด้วย XML • หากนิยามของ Schema รองรับการขยายขอบเขตได้ ทำให้: • สามารถนำ Schema ไปใช้ใน Schemas อื่นๆ ได้ • สร้าง data types ขิ้นใช้งาน โดย derived มาจาก standard types • อ้างอิง schema ได้หลาย schema จากเอกสารเดิม
Example 1, DTD <!ELEMENT note (to, from, heading, body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> • note.dtd
Example 1, XML <?xml version="1.0"?> <!DOCTYPE note SYSTEM "http://www.w3schools.com/dtd/note.dtd"> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> • note.xml
Example 1, Schema <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified"> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> • note.xsd
Example 1, XML <?xml version="1.0"?> <note xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com note.xsd"> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> • note.xml
Schemas and namespaces • schema • ใช้ elements จาก application ใดๆ • the XML Schema language • ในการกำหนด element ของ application อื่นๆ • ใช้ Namespaces กับ elements • ไม่ใช่ values • Namespace ของ element นำไปใช้ได้กับ attributes • สามารถมีหลาย attributes ที่ namespaces แตกต่างกัน • <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
data type • โครงสร้างลำดับชั้นของ type • Simple Data Type • string • boolean, e.g., true • anyUri, e.g., http://www.w3schools.com/home.html • duration, e.g., P1Y2M3DT10H5M49.3S • gYear, e.g., 1972 • float, e.g., 123E99 • decimal, e.g., 123456.789 • ... • Complex Data Types
Built-in data types • เป็นส่วนหนิ่งของ schema language • Base types/Primitive types • 19 types พื้นฐาน • Ex: string, decimal • Derived types • มากกว่า 25 types ที่เรียกใช้ base types • Ex: ID, positiveInteger
Primitive date and time types • date, เช่น 1994-04-27 • time, เช่น 16:50:00+01:00 หรือ 15:50:00Z หากเป็น Co-ordinated Universal Time (UTC) • dateTime, เช่น 1918-11-11T11:00:00.000+01:00 • duration, เช่น P2Y1M3DT20H30M31.4159S • วันที่แบบปฏิทิน"Gregorian" (1582 โดย Pope Gregory XIII): • gYear, เช่น 2001 • gYearMonth, เช่น 2001-01 • gMonthDay, เช่น --12-25 (hyphen สำหรับปีที่หายไป) • gMonth, เช่น --12-- (hyphens สำหรับปี และวันที่หายไป) • gDay, เช่น ---25 (มี 3 hyphens เท่านั้น)
Built-in derived string types string • normalizedString (newline, tab, carriage-return ถูกแปลงเป็น spaces) • token (spaces ที่ติดกันถูกจัดเป็น space เดียว; spaces ก่อนหน้า และตามหลังจะถูกนำออกไป) • language, เช่น en • NMTOKEN, เช่น XYZ • name, เช่น my:name • NCNAME ("non-colonized" name), เช่น myName • ID • IDREF • ENTITY
Built-in derived numeric types • derived จาก decimal • Integer (decimal ทีไม่มี fractional), เช่น -123456 • nonPositiveInteger, เช่น 0, -1 • negativeInteger, เช่น -1 • nonNegativeInteger, เช่น 0, 1 • positiveInteger, เช่น 1 • ... • ...
User-derived data types • complex data types อาจสร้างได้โดยไม่จำเป็นต้องอาศัย data type เดิมที่มีอยู่แล้ว • simple data types ใหม่ ต้อง derived จาก simple data types เดิมที่มีอยู่
User-derived simple data types derivation อาจเป็น • extension • list : list ของ values ของ data type เดิมที่มีอยู่ • union: อนุญาตให้กำหนด values จาก data types ตั้งแต่ 2 หรือมากกว่า • restriction : จำกัดค่าที่อนุญาตให้ใช้ • maximum value (เช่น 100) • minimum value (เช่น 50) • length (เช่น ความยาวของ string หรือ list) • จำนวน digits • enumeration (list ของ values) • pattern • ข้อจำกัด (constraints) เรียกว่าเป็น facets
Simple element • simple element • XML element ที่สามารถมีได้เฉพาะ text เท่านั้น ไม่สามารถมี elements หรือ attributes อื่นๆ ได้ • แต่ text สามารถเป็นได้หลาย types ที่แตกต่างกัน เช่นสามารถเป็น types ใดๆ ที่อยู่ใน XML Schema definition (boolean, string, date, etc.), หรือ เป็น custom type ที่ประกาศขิ้นใช้งานเอง • สามารถเพิ่มข้อจำกัด (facets) ให้กับ data type เพื่อที่จะจำกัดค่าของข้อมูล (content) และ สามารถกำหนดให้ข้อมูล มีรูปแบบตรงกับ pattern ที่กำหนดไว้ล่วงหน้า
Simple element • ไวยากรณ์ของ simple element <xs:element name="xxx" type="yyy"/> • ตัวอย่าง เอกสาร XML <lastname>Refsnes</lastname> <age>34</age> <dateborn>1968-03-27</dateborn> • ตัวอย่าง Schema <xs:element name="lastname" type="xs:string"/> <xs:element name="age" type="xs:integer"/> <xs:element name="dateborn" type="xs:date"/>
Simple data type • การเปลี่ยนชื่อของ data type เดิมที่มีอยู่ <xs:element name="assigned-grade" type="xs:string"> • หรือ ข้อจำกัด (restriction) ของ type เดิมที่มีอยู่ • เช่น strings ที่เริ่มต้นด้วย "D"
Restriction • มักนำไปใช้ประโยชน์ได้มาก • อนุญาตให้ทำการออกแบบเพื่อระบุให้ชัดเจนได้ว่า values ใดบ้างที่ legal • prices จะต้องเป็น non-negative • SSN จะต้องกำหนดตามรูปแบบที่ชัดเจน แน่นอน • in-stock จะต้องเป็น yes หรือ no • และอื่นๆ
Restriction • จำกัด base type • ขี้นกับ "facets" • facets ที่แตกต่างกันมีไว้สำหรับ data type ที่แตกต่างกัน
Restriction on Values • ตัวอย่างการกำหนด element ชื่อ "age" พร้อมกับข้อจำกัด (restriction) โดยค่าของ age อยู่ระหว่าง 0 และ 100 <xs:element name="age"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="100"/> </xs:restriction> </xs:simpleType> </xs:element>
Restriction on Values • ตัวอย่างการกำหนด element Type ชื่อ “drinkingAge" พร้อมกับข้อจำกัด (restriction) ให้มีค่าเท่ากับ 21 <xs:simpleType name="drinkingAge"> <xs:restriction base="xs:positiveInteger"> <xs:minInclusive value="21"/> </xs:restriction> </xs:simpleType>
Restriction on a set of Values • อีกรูปแบบของการกำหนด element ชื่อ "car": <xs:element name="car" type="carType"/> <xs:simpleType name="carType"> <xs:restriction base="xs:string"> <xs:enumeration value="Audi"/> <xs:enumeration value="Golf"/> <xs:enumeration value="BMW"/> </xs:restriction> </xs:simpleType>
Restriction on a set of Values • ใช้ enumeration เพื่อจำกัดค่าของ XML element เป็น set ของค่าที่เป็นไปได้ • ตัวอย่างการกำหนด element ชื่อ "car": <xs:element name="car"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Audi"/> <xs:enumeration value="Golf"/> <xs:enumeration value="BMW"/> </xs:restriction> </xs:simpleType> </xs:element>
Example: enumeration • ตัวอย่างการกำหนด element type ชื่อ “grade": <xs:element name=“result" type=“grade"/> <xs:simpleType name="grade"> <xs:restriction base="xs:string"> <xs:enumeration value="A"/> <xs:enumeration value="B"/> <xs:enumeration value="C"/> <xs:enumeration value="D"/> <xs:enumeration value="F"/> <xs:enumeration value="I"/> </xs:restriction> </xs:simpleType>
Restriction on a series of Values • ใช้ pattern เพื่อจำกัดเนื้อหาของ XML element สำหรับกำหนด series ของ ตัวเลข หรือ ตัวอักษรที่สามารถใช้งานได้ • Regular expressions • derived มาจาก perl • ตัวอย่างการกำหนด element ชื่อ "letter": <xs:element name="letter"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a-z]"/> </xs:restriction> </xs:simpleType> </xs:element>
Restriction on a series of Values • ใช้ pattern เพื่อจำกัดเนื้อหาของ XML element สำหรับกำหนด series ของ ตัวเลข หรือ ตัวอักษรที่สามารถใช้งานได้ • ตัวอย่างการกำหนด element ชื่อ "letter": <xs:element name="letter"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[a-z]"/> </xs:restriction> </xs:simpleType> </xs:element> • ค่าที่เป็นไปได้ คือ ตัวอักษร LOWERCASE ตัวใดตัวหนี่ง มีค่าตั้งแต่ a ถีง z
Restriction on a series of Values • ค่าที่เป็นไปได้ คือ ตัวอักษร UPPERCASE สามตัว มีค่าตั้งแต่ A ถีง Z <xs:pattern value="[A-Z][A-Z][A-Z]"/> • ค่าที่เป็นไปได้ คือ ตัวอักษร LOWERCASE หรือ UPPERCASE สามตัว มีค่าตั้งแต่ A ถีง Z หรือ a ถีง z <xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/> • ค่าที่เป็นไปได้ คือ ตัวอักษรตัวใดตัวหนี่งจาก x, y, z เท่านั้น <xs:pattern value="[xyz]"/> • ค่าที่เป็นไปได้ คือ ตัวเลขจำนวน 5 ตัว มีค่าอยู่ระหว่าง 0-9 เท่านั้น <xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
Restriction on a series of Values • * : Zero or more occurences <xs:pattern value="([a-z])*"/> • + : One or More occurences <xs:pattern value="([a-z][A-Z])+"/> • | :male or female <xs:pattern value="male|female"/> • ตัวอักษร 8 ตัวเรียงกัน โดยที่ตัวอักษรเหล่านั้นจะต้องเป็น lowercase หรือ uppercase จาก a ถีง z, หรือ ตัวเลขตั้งแต่ 0 ถีง 9 (อาจใช้กับ password) <xs:pattern value="[a-zA-Z0-9]{8}"/>
Restriction on Whitespaces • กำหนดข้อจำกัดของ whiteSpace เป็น "preserve“ หมายความว่า XML processor จะไม่จัดการใดๆ กับ white space characters <xs:element name="address"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:whiteSpace value="preserve"/> </xs:restriction> </xs:simpleType> </xs:element>
Restriction on Whitespaces • กำหนดข้อจำกัดของ whiteSpace เป็น "replace“ หมายความว่า XML processor จะแทนที่ white space characters ทุกตัว (line feeds, tabs, spaces, และ carriage returns) ด้วย spaces <xs:whiteSpace value="replace"/> • กำหนดข้อจำกัดของ whiteSpace เป็น "collapse“ หมายความว่า XML processor จะนำ white space characters ทุกตัวออก (line feeds, tabs, spaces, carriage returns จะถูกแทนที่ด้วย spaces รวมทั้ง spaces ที่นำและตามมาจะถูกเอาออกด้วย ทำให้ multiple spaces กลายเป็น single space) <xs:whiteSpace value="collapse"/>
Restriction on Length • ใช้ length กำหนดความยาวของ element • ใช้ maxLength และ minLength เพื่อจำกัดความยาวของค่า ในแต่ละ element <xs:element name="password"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="8"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="password"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="5"/> <xs:maxLength value="8"/> </xs:restriction> </xs:simpleType> </xs:element>
User-defined types • สามารถใช้ complexType กำหนดให้เป็น user-defined type • มักเรียกว่า "standalone" • Simple types สามารถ derived ได้จาก built-in types
Deriving types • DTDs ไม่อนุญาต types restrictions • นอกจาก enumeration, CDATA, token • สำหรับ attributes • PCDATA • สำหรับ content • Schemas มี built-in types • สามารถสร้างขื้นใช้งานใหม่ได้
User-derived simple data types derivation อาจเป็น • extension • list : sequence ของ values ของ data type เดิมที่มีอยู่ • union: กำหนด values จาก data types ตั้งแต่ 2 หรือมากกว่า • restriction : จำกัดค่าที่อนุญาตให้ใช้ • maximum value (เช่น 100) • minimum value (เช่น 50) • length (เช่น ความยาวของ string หรือ list) • จำนวน digits • enumeration (list ของ values) • pattern ข้อจำกัดด้านบน เรียกว่าเป็น facets
Derivation operations • list • sequence ของ values ของ data type เดิมที่มีอยู่ • union • รวม 2 types เข้าด้วยกัน : กำหนด values จาก data types ตั้งแต่ 2 หรือมากกว่า • ได้ทั้ง 2 แบบ • restriction • สร้างข้อจำกัดให้กับค่าที่เป็น legal values
List <xs:element name="partList"> <xs:simpleType> <xs:list itemType="partNo" /> </xs:simpleType> </xs:element> <partList>PN334-04 PN223-89 PQ1112-03</partList> • จะต้องแยกจากกันด้วย spaces • อาจดีกว่าหากใช้ในโครงสร้าง document • partList -> partNo*
Union • อนุญาตให้ใช้ data ได้ ทั้งสองแบบ • ตัวอย่าง <xs:simpleType name="partNumberField"> <xs:union memberTypes="partNumberType noPartNum" /> </xs:simpleType> • Database • ค่าอาจเป็น null
Inheritance • ข้อจำกัดของ facet สามารถ inherited ได้ • type derivations ใหม่ จะต้องคำนึงถึงของเดิม • สามารถเพิ่มเติมใหม่ได้ • แต่ derivations ใหม่สามารถเปลี่ยนแปลง facets อื่นๆ ได้ • ตัวอย่างเช่น • monetary type : fractionDigits facet = 2 • loan amount type : • monetary type + • maxValue = 100000 • car loan amount : • loan amount type + • maxValue = 30000
Fixed Facets • อาจป้องกัน users จากการเปลี่ยนแปลง facet ได้ • fixed="true" ในการประกาศ facet • เหมือนกับ "final" keyword ใน Java • Example <simpleType name="atLeastOneHundred"> <restriction base="integer"> <minInclusive value="100" fixed="true"> </restriction> </simpleType> • minInclusive ไม่สามารถเปลี่ยนแปลงได้เมื่อถูก inherited • ไม่สามารถกำหนดค่าที่น้อยกว่าได้ • "fixed" attribute หมายถิง ไม่สามารถเปลี่ยนแปลงย้อนกลับได้
Complex element • complex element สามารถมี elements อื่นๆ และ/หรือ attributes ได้ • มี complex elements 4 ประเภท: • empty elements • elements ที่มี elements อื่นๆ • elements ที่มีเฉพาะ text • elements ที่มีทั้ง elements อื่นๆ และ text • Note: แต่ละ elements เหล่านี้ อาจมี attributes ได้เช่นกัน
ตัวอย่างของ Complex element • "product", เป็น empty element : <product pid="1345"/> • "employee", มีเฉพาะ elements อื่นๆ : <employee> <firstname>John</firstname> <lastname>Smith</lastname> </employee> • "food", มีเฉพาะ text เท่านั้น : <food type="dessert">Ice cream</food> • "description", มีทั้ง elements และ text: <description> It happened on <date lang="norwegian">03.03.99</date>… </description>