1 / 82

XML Schema

XML Schema. เนื้อหา. XML Schema เบื้องต้น Data Types Built-in Named Anonymous Simple Element และ Attribute Complex Element. XML Schema. XML schema อธิบายโครงสร้างของเอกสาร XML กำหนด building block ของเอกสาร XML ( เช่นเดียวกับ DTD)

niabi
Download Presentation

XML Schema

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. XML Schema

  2. เนื้อหา • XML Schema เบื้องต้น • Data Types • Built-in • Named • Anonymous • Simple Element และ Attribute • Complex Element

  3. 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

  4. DTDs? • ไม่จัดเป็น XML syntax • ไม่มีการกำหนด data type • ไม่สนับสนุน namespaces • ไม่สามารถรองรับการขยายขอบเขต (extensibility) ได้ในอนาคต • ไม่สามารถใช้ mixed content ได้ • ไม่สามารถกำหนดจำนวน และลำดับของ child elements ได้ • element names ใน DTD จัดเป็น global name • …

  5. Solution • เขียนนิยามภาษา เป็น XML • อนุญาตให้มีการควบคุมการจัดการ contents ของเอกสาร • เอกสาร XML จัดเป็น • complex data type • นิยามภาษา XML จัดเป็น • complex data type specification

  6. XML Schema • ถูกเสนอโดย Microsoft แต่ปัจจุบันเป็น W3C recommendation ตั้งแต่ May 2001 • เป็นเอกสารที่แยกออกจากเอกสาร XML เสมอ • ไม่มี internal option • เขียนด้วย XML

  7. สนับสนุนการจัดการ Data Types • จุดเด่นของ XML Schemas คือ การสนับสนุนการจัดการ data type • การสนับสนุนการจัดการ data type ทำให้: • ง่ายต่อการอธิบายเนื้อหา (content) ของเอกสารที่อนุญาตให้มีได้ • ง่ายต่อการ validate ความถูกต้องของข้อมูล • ง่ายต่อการจัดการข้อมูล ร่วมกับฐานข้อมูล • ง่ายต่อการกำหนด data facets (ข้อจำกัดของข้อมูล - restrictions on data) • ง่ายต่อการกำหนด patterns ของข้อมูล (data formats) • ง่ายต่อการ convert ข้อมูลระหว่าง data types ที่แตกต่างกัน

  8. ใช้ไวยากรณ์ของ XML • จุดเด่นอีกข้อหนิ่งของ XML Schema คือเขียนด้วย XML • การเขียน XML Schemas ด้วย XML ทำให้ : • ไม่ต้องเรียนภาษาอื่นเพิ่มเติม • ใช้ XML editor สำหรับ edit แฟ้ม Schema ได้ • ใช้ XML parser สำหรับ parse แฟ้ม Schema ได้ • จัดการ Schema ด้วย XML DOM ได้ • สามารถเปลี่ยนรูป (transform) Schema ด้วย XSLT ได้

  9. รองรับการขยายขอบเขต (extensible) • XML Schemas รองรับการขยายขอบเขตได้ในอนาคต (extensible) ได้เช่นเดียวกับ XML เนื่องจากเขียนด้วย XML • หากนิยามของ Schema รองรับการขยายขอบเขตได้ ทำให้: • สามารถนำ Schema ไปใช้ใน Schemas อื่นๆ ได้ • สร้าง data types ขิ้นใช้งาน โดย derived มาจาก standard types • อ้างอิง schema ได้หลาย schema จากเอกสารเดิม

  10. Example 1, DTD <!ELEMENT note (to, from, heading, body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> • note.dtd

  11. 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

  12. 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

  13. 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

  14. 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">

  15. 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

  16. Built-in data types • เป็นส่วนหนิ่งของ schema language • Base types/Primitive types • 19 types พื้นฐาน • Ex: string, decimal • Derived types • มากกว่า 25 types ที่เรียกใช้ base types • Ex: ID, positiveInteger

  17. Built-in data types

  18. 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 เท่านั้น)

  19. 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

  20. Built-in derived numeric types • derived จาก decimal • Integer (decimal ทีไม่มี fractional), เช่น -123456 • nonPositiveInteger, เช่น 0, -1 • negativeInteger, เช่น -1 • nonNegativeInteger, เช่น 0, 1 • positiveInteger, เช่น 1 • ... • ...

  21. User-derived data types • complex data types อาจสร้างได้โดยไม่จำเป็นต้องอาศัย data type เดิมที่มีอยู่แล้ว • simple data types ใหม่ ต้อง derived จาก simple data types เดิมที่มีอยู่

  22. 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

  23. 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 ที่กำหนดไว้ล่วงหน้า

  24. 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"/>

  25. Simple data type • การเปลี่ยนชื่อของ data type เดิมที่มีอยู่ <xs:element name="assigned-grade" type="xs:string"> • หรือ ข้อจำกัด (restriction) ของ type เดิมที่มีอยู่ • เช่น strings ที่เริ่มต้นด้วย "D"

  26. Restriction • มักนำไปใช้ประโยชน์ได้มาก • อนุญาตให้ทำการออกแบบเพื่อระบุให้ชัดเจนได้ว่า values ใดบ้างที่ legal • prices จะต้องเป็น non-negative • SSN จะต้องกำหนดตามรูปแบบที่ชัดเจน แน่นอน • in-stock จะต้องเป็น yes หรือ no • และอื่นๆ

  27. Restriction • จำกัด base type • ขี้นกับ "facets" • facets ที่แตกต่างกันมีไว้สำหรับ data type ที่แตกต่างกัน

  28. Facets

  29. 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>

  30. 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>

  31. 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>

  32. 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>

  33. 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>

  34. 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>

  35. 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

  36. 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]"/>

  37. 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}"/>

  38. 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>

  39. 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"/>

  40. 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>

  41. User-defined types • สามารถใช้ complexType กำหนดให้เป็น user-defined type • มักเรียกว่า "standalone" • Simple types สามารถ derived ได้จาก built-in types

  42. Deriving types • DTDs ไม่อนุญาต types restrictions • นอกจาก enumeration, CDATA, token • สำหรับ attributes • PCDATA • สำหรับ content • Schemas มี built-in types • สามารถสร้างขื้นใช้งานใหม่ได้

  43. 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

  44. Derivation operations • list • sequence ของ values ของ data type เดิมที่มีอยู่ • union • รวม 2 types เข้าด้วยกัน : กำหนด values จาก data types ตั้งแต่ 2 หรือมากกว่า • ได้ทั้ง 2 แบบ • restriction • สร้างข้อจำกัดให้กับค่าที่เป็น legal values

  45. 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*

  46. Union • อนุญาตให้ใช้ data ได้ ทั้งสองแบบ • ตัวอย่าง <xs:simpleType name="partNumberField"> <xs:union memberTypes="partNumberType noPartNum" /> </xs:simpleType> • Database • ค่าอาจเป็น null

  47. 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

  48. 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 หมายถิง ไม่สามารถเปลี่ยนแปลงย้อนกลับได้

  49. Complex element • complex element สามารถมี elements อื่นๆ และ/หรือ attributes ได้ • มี complex elements 4 ประเภท: • empty elements • elements ที่มี elements อื่นๆ • elements ที่มีเฉพาะ text • elements ที่มีทั้ง elements อื่นๆ และ text • Note: แต่ละ elements เหล่านี้ อาจมี attributes ได้เช่นกัน

  50. ตัวอย่างของ 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>

More Related