Xml schema
This presentation is the property of its rightful owner.
Sponsored Links
1 / 82

XML Schema PowerPoint PPT Presentation


  • 113 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Xml schema

XML Schema


Xml schema

เนื้อหา

  • XML Schema เบื้องต้น

  • Data Types

    • Built-in

    • Named

    • Anonymous

  • Simple Element และ Attribute

  • Complex Element


Xml schema1

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


Xml schema

DTDs?

  • ไม่จัดเป็น XML syntax

  • ไม่มีการกำหนด data type

  • ไม่สนับสนุน namespaces

  • ไม่สามารถรองรับการขยายขอบเขต (extensibility) ได้ในอนาคต

    • ไม่สามารถใช้ mixed content ได้

    • ไม่สามารถกำหนดจำนวน และลำดับของ child elements ได้

    • element names ใน DTD จัดเป็น global name


Solution

Solution

  • เขียนนิยามภาษา เป็น XML

  • อนุญาตให้มีการควบคุมการจัดการ contents ของเอกสาร

  • เอกสาร XML จัดเป็น

    • complex data type

  • นิยามภาษา XML จัดเป็น

    • complex data type specification


Xml schema2

XML Schema

  • ถูกเสนอโดย Microsoft แต่ปัจจุบันเป็น W3C recommendation ตั้งแต่ May 2001

  • เป็นเอกสารที่แยกออกจากเอกสาร XML เสมอ

    • ไม่มี internal option

  • เขียนด้วย XML


Data types

สนับสนุนการจัดการ Data Types

  • จุดเด่นของ XML Schemas คือ การสนับสนุนการจัดการ data type

  • การสนับสนุนการจัดการ data type ทำให้:

    • ง่ายต่อการอธิบายเนื้อหา (content) ของเอกสารที่อนุญาตให้มีได้

    • ง่ายต่อการ validate ความถูกต้องของข้อมูล

    • ง่ายต่อการจัดการข้อมูล ร่วมกับฐานข้อมูล

    • ง่ายต่อการกำหนด data facets (ข้อจำกัดของข้อมูล - restrictions on data)

    • ง่ายต่อการกำหนด patterns ของข้อมูล (data formats)

    • ง่ายต่อการ convert ข้อมูลระหว่าง data types ที่แตกต่างกัน


Xml schema

ใช้ไวยากรณ์ของ XML

  • จุดเด่นอีกข้อหนิ่งของ XML Schema คือเขียนด้วย XML

  • การเขียน XML Schemas ด้วย XML ทำให้ :

    • ไม่ต้องเรียนภาษาอื่นเพิ่มเติม

    • ใช้ XML editor สำหรับ edit แฟ้ม Schema ได้

    • ใช้ XML parser สำหรับ parse แฟ้ม Schema ได้

    • จัดการ Schema ด้วย XML DOM ได้

    • สามารถเปลี่ยนรูป (transform) Schema ด้วย XSLT ได้


Extensible

รองรับการขยายขอบเขต (extensible)

  • XML Schemas รองรับการขยายขอบเขตได้ในอนาคต (extensible) ได้เช่นเดียวกับ XML เนื่องจากเขียนด้วย XML

  • หากนิยามของ Schema รองรับการขยายขอบเขตได้ ทำให้:

    • สามารถนำ Schema ไปใช้ใน Schemas อื่นๆ ได้

    • สร้าง data types ขิ้นใช้งาน โดย derived มาจาก standard types

    • อ้างอิง schema ได้หลาย schema จากเอกสารเดิม


Example 1 dtd

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

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

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 xml1

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

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

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

Built-in data types

  • เป็นส่วนหนิ่งของ schema language

  • Base types/Primitive types

    • 19 types พื้นฐาน

    • Ex: string, decimal

  • Derived types

    • มากกว่า 25 types ที่เรียกใช้ base types

    • Ex: ID, positiveInteger


Built in data types1

Built-in data types


Primitive date and time types

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

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

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

User-derived data types

  • complex data types อาจสร้างได้โดยไม่จำเป็นต้องอาศัย data type เดิมที่มีอยู่แล้ว

  • simple data types ใหม่ ต้อง derived จาก simple data types เดิมที่มีอยู่


User 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

    • 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 element1

    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

    Simple data type

    • การเปลี่ยนชื่อของ data type เดิมที่มีอยู่

      <xs:element name="assigned-grade"

      type="xs:string">

    • หรือ ข้อจำกัด (restriction) ของ type เดิมที่มีอยู่

      • เช่น strings ที่เริ่มต้นด้วย "D"


    Restriction

    Restriction

    • มักนำไปใช้ประโยชน์ได้มาก

    • อนุญาตให้ทำการออกแบบเพื่อระบุให้ชัดเจนได้ว่า values ใดบ้างที่ legal

      • prices จะต้องเป็น non-negative

      • SSN จะต้องกำหนดตามรูปแบบที่ชัดเจน แน่นอน

      • in-stock จะต้องเป็น yes หรือ no

      • และอื่นๆ


    Restriction1

    Restriction

    • จำกัด base type

      • ขี้นกับ "facets"

    • facets ที่แตกต่างกันมีไว้สำหรับ data type ที่แตกต่างกัน


    Facets

    Facets


    Restriction on values

    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 values1

    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

    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 values1

    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

    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

    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 values1

    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 values2

    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 values3

    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

    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 whitespaces1

    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

    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

    User-defined types

    • สามารถใช้ complexType กำหนดให้เป็น user-defined type

      • มักเรียกว่า "standalone"

    • Simple types สามารถ derived ได้จาก built-in types


    Deriving types

    Deriving types

    • DTDs ไม่อนุญาต types restrictions

      • นอกจาก enumeration, CDATA, token

        • สำหรับ attributes

      • PCDATA

        • สำหรับ content

    • Schemas มี built-in types

      • สามารถสร้างขื้นใช้งานใหม่ได้


    User derived simple data types1

    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

    Derivation operations

    • list

      • sequence ของ values ของ data type เดิมที่มีอยู่

    • union

      • รวม 2 types เข้าด้วยกัน : กำหนด values จาก data types ตั้งแต่ 2 หรือมากกว่า

        • ได้ทั้ง 2 แบบ

    • restriction

      • สร้างข้อจำกัดให้กับค่าที่เป็น legal values


    Xml schema

    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

    Union

    • อนุญาตให้ใช้ data ได้ ทั้งสองแบบ

    • ตัวอย่าง

      <xs:simpleType name="partNumberField">

      <xs:union memberTypes="partNumberType noPartNum" />

      </xs:simpleType>

    • Database

      • ค่าอาจเป็น null


    Inheritance

    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

    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

    • complex element สามารถมี elements อื่นๆ และ/หรือ attributes ได้

    • มี complex elements 4 ประเภท:

      • empty elements

      • elements ที่มี elements อื่นๆ

      • elements ที่มีเฉพาะ text

      • elements ที่มีทั้ง elements อื่นๆ และ text

    • Note: แต่ละ elements เหล่านี้ อาจมี attributes ได้เช่นกัน


    Complex element1

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


    Complex element2

    Complex element

    <xs:element name=“name”>

    <xs:complexType>

    compositor

    element declarations

    attribute declarations

    </xs:complexType>

    </xs:element>


    Inidcators

    Inidcators

    • Order indicators:

      • Choice

      • Sequence

      • All

    • Occurrence indicators:

      • maxOccurs

      • minOccurs

    • Group indicators:

      • Group name

      • attributeGroup name


    Compositor

    Compositor

    • sequence

    • choice

    • all


    Sequence compositor

    Sequence compositor

    • เหมือนกับ "," ใน DTD

    • DTD

      <!ELEMENT foo (bar, baz)>

    • Schema

      <xs:element name="foo">

      <xs:complexType>

      <xs:sequence>

      <xs:element ref="bar" />

      <xs:element ref="baz" />

      </xs:sequence>

      </xs:complexType>

      </xs:element>


    Elements sequences

    Elements ใน sequences

    • สามารถกำหนด optional / จำนวนครั้งของ element

    • ?

      <xs:element ref="bar" minOccurs="0" type="xs:string">

    • *

      <xs:element ref="bar" minOccurs="0" maxOccurs="unbounded" />

    • +

      <xs:element ref="bar" minOccurs="1" maxOccurs="unbounded" />

    • หรือ…

      <xs:element ref="bar" minOccurs="2" maxOccurs="4" />


    Choice compositor

    Choice compositor

    • เหมือนกับ "|" ใน DTD

    • DTD

      <!ELEMENT foo (bar | baz)>

    • Schema

      <xs:element name="foo">

      <xs:complexType>

      <xs:choice>

      <xs:element ref="bar" />

      <xs:element ref="baz" />

      </xs:choice>

      </xs:complexType>

      </xs:element>


    All compositor

    All compositor

    • เปรียบเทียบไม่ได้กับ simple DTD แบบใดๆ

    • DTD

      <!ELEMENT foo ( (bar, baz?) | (baz, bar?) >

    • Schema

      <xs:element name="foo">

      <xs:complexType>

      <xs:all>

      <xs:element ref="bar" />

      <xs:element ref="baz" />

      </xs:all>

      </xs:complexType>

      </xs:element>


    Nesting

    Nesting

    • สามารถนำ Compositors มาใช้ร่วมกันได้

    • DTD

      <!ELEMENT foo ( (bar, baz) | (thud, grunt) )>

    • Schema

      <xs:element name="foo">

      <xs:complexType>

      <xs:sequence>

      <xs:choice>

      <xs:element ref="bar" />

      <xs:element ref="baz" />

      </xs:choice>

      <xs:choice>

      <xs:element ref="thud" />

      <xs:element ref="grunt" />

      </xs:choice>

      </xs:sequence>

      </xs:complexType>

      </xs:element>


    Complex types elements

    Complex Types สำหรับ Elements

    • "employee"

      <employee><firstname>John</firstname>

      <lastname>Smith</lastname>

      </employee>

    • employee element สามารถประกาศโดยตรงโดยตั้งชื่อ element ดังตัวอย่างต่อไปนี้

      <xs:element name="employee">

      <xs:complexType>

      <xs:sequence>

      <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/>

      </xs:sequence>

      </xs:complexType>

      </xs:element>


    Complex types elements1

    Complex Types สำหรับ Elements

    • employee element สามารถมี type attribute ที่อ้างอิง ชื่อของ complex type

      <xs:element name="employee" type="personinfo"/>

      <xs:complexType name="personinfo">

      <xs:sequence>

      <xs:element name="firstname" type="xs:string"/>

      <xs:element name="lastname" type="xs:string"/>

      </xs:sequence>

      </xs:complexType>

    • และสามารถมีหลาย elementที่อ้างอิง ชื่อของ complex type

      <xs:element name="employee" type="personinfo"/>

      <xs:element name="student" type="personinfo"/>

      <xs:element name="member" type="personinfo"/>

      <xs:complexType name="personinfo">

      <xs:sequence>

      <xs:element name="firstname" type="xs:string"/>

      <xs:element name="lastname" type="xs:string"/>

      </xs:sequence>

      </xs:complexType>


    Employee complex element

    “employee” Complex element

    • ใช้ complex type เดิมที่มีอยู่ มาเพิ่มเติม elements ตัวอย่างเช่น

      <xs:element name="employee" type="fullpersoninfo"/>

      <xs:complexType name="personinfo">

      <xs:sequence>

      <xs:element name="firstname" type="xs:string"/>

      <xs:element name="lastname" type="xs:string"/>

      </xs:sequence>

      </xs:complexType>

      <xs:complexType name="fullpersoninfo">

      <xs:complexContent>

      <xs:extension base="personinfo">

      <xs:sequence>

      <xs:element name="address" type="xs:string"/>

      <xs:element name="city" type="xs:string"/>

      <xs:element name="country" type="xs:string"/>

      </xs:sequence>

      </xs:extension>

      </xs:complexContent>

      </xs:complexType>


    Complex types empty elements

    Complex Types สำหรับ Empty Elements

    • empty XML element:

      <product prodid="1345" />

    • การกำหนด type ที่ไม่มี content ต้องกำหนด type ที่อนุญาตให้เนื้อหา (content) มีเฉพาะ elements เท่านั้น แต่ไม่ประกาศ elements ใดๆ :

      <xs:element name="product">

      <xs:complexType>

      <xs:complexContent>

      <xs:restriction base="xs:integer">

      <xs:attribute name="prodid" type="xs:positiveInteger"/> </xs:restriction> </xs:complexContent>

      </xs:complexType>

      </xs:element>


    Complex types empty elements1

    Complex Types สำหรับ Empty Elements

    • จากตัวอย่าง product มีการกำหนด complexType ให้มี complexContent เช่น มีเนื้อหาเฉพาะ elements เท่านั้น

    • หรือ อาจประกาศ product element ให้สั้นลง เช่น :

      <xs:element name="product">

      <xs:complexType>

      <xs:attribute name="prodid" type="xs:positiveInteger"/>

      </xs:complexType>

      </xs:element>

    • หรือ อาจกำหนดชื่อให้กับ complexType และให้ "product" element มี type attribute ที่อ้างอิงชื่อของ complexType (อาจมีได้หลาย elements ที่อ้างอิงcomplex type เดียวกัน) :

      <xs:element name="product" type="prodtype"/>

      <xs:complexType name="prodtype">

      <xs:attribute name="prodid" type="xs:positiveInteger"/>

      </xs:complexType>


    Complex types mixed content

    Complex Types สำหรับ Mixed Content

    • XML element ชื่อ "letter" มีทั้ง elements และ text:

      <letter>

      Dear Mr.<name>John Smith</name>.

      Your order <orderid>1032</orderid>

      will be shipped on <shipdate>2001-07-13</shipdate>.

      </letter>

    • สังเกตว่า text ปรากฏอยู่ระหว่าง elements โดย "name", "orderid", และ "shipdate" เป็น Child element ของ "letter" ประกาศ Schema ได้ดังนี้

      <xs:element name="letter">

      <xs:complexType mixed="true">

      <xs:sequence>

      <xs:element name="name" type="xs:string"/>

      <xs:element name="orderid" type="xs:positiveInteger"/>

      <xs:element name="shipdate" type="xs:date"/>

      </xs:sequence>

      </xs:complexType>

      </xs:element>


    Complex types mixed content1

    Complex Types สำหรับ Mixed Content

    • หรือ อาจกำหนดชื่อให้กับ complexType และให้ “letter" element มี type attribute ที่อ้างอิงชื่อของ complexType (อาจมีได้หลาย elements ที่อ้างอิงcomplex type เดียวกัน)

      <xs:element name="letter" type="lettertype"/>

      <xs:complexType name="lettertype" mixed="true">

      <xs:sequence>

      <xs:element name="name" type="xs:string"/>

      <xs:element name="orderid" type="xs:positiveInteger"/>

      <xs:element name="shipdate" type="xs:date"/>

      </xs:sequence>

      </xs:complexType>


    Mixed content

    Mixed content

    • XML Schema ไม่สามารถควบคุมตำแหน่งของ text ที่ปรากฏได้

    • ตัวอย่าง เอกสาร #1 :

      <letter>

      Dear Mr.<name>John Smith</name>.

      Your order <orderid>1032</orderid>

      will be shipped on <shipdate>2001-07-13</shipdate>.

      </letter>

    • ตัวอย่าง เอกสาร #2 :

      <letter>

      Dear Mr.<name>John Smith</name>.

      On <shipdate>2001-07-13</shipdate>, Your order <orderid>1032</orderid> will be shipped.

      </letter>


    Attributes

    Attributes

    • element ที่มี attributes จะถูกนิยามเป็น complex type

      • Simple elements ไม่มี attributes

      • หาก element มี attributes จะจัดเป็น complex type

      • แต่สำหรับ attribute นั้นจะถูกประกาศเป็น simple type เสมอ

    • DTD attribute types

      • CDATA, enumeration, token

    • Schema

      • สามารถเป็น basic type หรือ derived types ก็ได้

      • สามารถเป็น user-defined types ได้อีกด้วย


    Attributes1

    การประกาศใช้งาน Attributes

    • การประกาศใช้งาน

      <xs:attribute name="xxx" type="yyy"/>

      • xxx เป็นชื่อของ attribute

      • yyy เป็น data type ของ attribute

    • ตัวอย่าง XML element ที่มี attribute

      <lastname lang="EN">Smith</lastname>

    • ตัวอย่างการนิยาม simple attribute ของ element ด้านบน:

      <xs:attribute name="lang" type="xs:string"/>


    Attribute

    การประกาศ Attribute

    • ส่วนหนิ่งของ complex type

      • follows compositor

      • (one exception)

    • การประกาศ

      <xs:attribute name="foo" type="xs:positiveInteger" />

    • หาก attribute เป็น complex type?

      • ??


    Example

    Example

    <!ELEMENT student (#PCDATA)>

    <!ATTLIST student

    id CDATA #REQUIRED>

    <xs:element name="student">

    <xs:complexType>

    <xs:simpleContent>

    <xs:extension base="xs:string">

    <xs:attribute name="id"

    type="xs:string" use="required"/>

    </xs:extension>

    </xs:simpleContent>

    </xs:complexType>

    </xs:element>


    Local naming

    Local naming

    • หากต้องการนำ element name มาใช้ใหม่

      • ในตำแหน่งของโครงสร้างที่แตกต่างกัน

    • ตัวอย่างเช่น

      • <!ELEMENT url-catalog (link*)>

      • <!ELEMENT link (link, description?)>

        • ไม่จัดเป็น DTD ที่รูปแบบถูกต้อง

      • schema?


    Example 2 xml

    Example 2, XML

    <?xml version="1.0" encoding="ISO-8859-1"?>

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


    Example 2 1 st shiporder xsd

    Example 2, 1st shiporder.xsd

    <?xml version="1.0" encoding="ISO-8859-1" ?>

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


    Xml schema

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


    Example 2 2 nd shiporder xsd

    Example 2, 2nd “shiporder.xsd”

    <?xml version="1.0" encoding="ISO-8859-1" ?>

    <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="address"/>

    <xs:element ref="city"/>


    Xml schema

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


    Example 2 3 rd shiporder xsd

    Example 2, 3rd “shiporder.xsd”

    <?xml version="1.0" encoding="ISO-8859-1" ?>

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:simpleType name="stringtype">

    <xs:restriction base="xs:string"/>

    </xs:simpleType>

    <xs:simpleType name="inttype">

    <xs:restriction base="xs:positiveInteger"/>

    </xs:simpleType>

    <xs:simpleType name="dectype">

    <xs:restriction base="xs:decimal"/>

    </xs:simpleType>

    <xs:simpleType name="orderidtype">

    <xs:restriction base="xs:string">

    <xs:pattern value="[0-9]{6}"/>

    </xs:restriction>

    </xs:simpleType>

    <xs:complexType name="shiptotype">

    <xs:sequence>

    <xs:element name="name" type="stringtype"/>

    <xs:element name="address" type="stringtype"/>

    <xs:element name="city" type="stringtype"/>

    <xs:element name="country" type="stringtype"/>

    </xs:sequence>

    </xs:complexType>


    Xml schema

    <xs:complexType name="itemtype">

    <xs:sequence>

    <xs:element name="title" type="stringtype"/>

    <xs:element name="note" type="stringtype" minOccurs="0"/>

    <xs:element name="quantity" type="inttype"/>

    <xs:element name="price" type="dectype"/>

    </xs:sequence>

    </xs:complexType>

    <xs:complexType name="shipordertype">

    <xs:sequence>

    <xs:element name="orderperson" type="stringtype"/>

    <xs:element name="shipto" type="shiptotype"/>

    <xs:element name="item" maxOccurs="unbounded„

    type="itemtype"/>

    </xs:sequence>

    <xs:attribute name="orderid" type="orderidtype" use="required"/>

    </xs:complexType>

    <xs:element name="shiporder" type="shipordertype"/>

    </xs:schema>


    Exercise xml

    Exercise, XML

    <grades assignment="Homework 1">

    <grade>

    <student id="1234-12345">Jane Doe</student>

    <assigned-grade>A</assigned-grade>

    </grade>

    <grade>

    <student id="5432-54321">John Doe</student>

    <assigned-grade>B</assigned-grade>

    </grade>

    </grades>


    Exercise dtd

    Exercise, DTD

    <!ELEMENT grades (grade*)>

    <!ATTLIST grades

    assignment CDATA #IMPLIED>

    <!ELEMENT grade (student, assigned-grade)>

    <!ELEMENT student (#PCDATA)>

    <!ATTLIST student

    id CDATA #REQUIRED>

    <!ELEMENT assigned-grade (#PCDATA)>


    Exercise data types

    Exercise, Data types

    • grades

      • กลุ่มของ items ชนิด grade

      • Student มีได้มากที่สุด 40 items

    • grade

      • โครงสร้างที่มี student และ grade ที่มีการกำหนดค่า

    • student

      • โครงสร้างที่มี id และ text

      • อาจจำกัดค่า student id

    • assigned-grade จัดเป็น text

      • อาจจำกัดค่าเป็น A-D,F,I


    Xml schema

    สรุป

    • จุดเด่นของ XML Schema

    • การเขียน XML Schema


  • Login