XML.com

XML.com
  Home | Resources | FAQs |
    
Essentials >Schema:: 1
  Resource Centers
XML Schema คืออะไร
การสร้าง Simple Data Type
 
DownLoad MSWord








XML Schema

บ่อยครั้งที่มีเอกสารซึ่งประกอบด้วยเนื้อหาที่มีชนิดต่างกัน และต้องการตรวจสอบ Data Type เหล่านี้ได้ แต่ DTD ไม่ได้ถูกออกแบบมาเพื่อตรวจสอบ Data Type เหล่านี้หรือการตรวจสอบของเขตของค่า(Value) DTD ยังไม่เข้าใจ Namespace อีกด้วย
Schema สร้างขึ้นมาเพื่อการแก้ปัญหาเหล่านี้ Schema ต่างจาก DTD ตรงที่มีรูปประโยค (Syntax) เป็นของตัวเอง ส่วน XML Schema นั้นถูกเขียนขึ้นใน XML นอกจากการจัดสร้างข้อมูลที่ DTD นำเสนอแล้ว Schema ยังช่วยกำหนด Data Type ใช้ Namespace และกำหนดช่วงค่าของแอตทริบิวต์และเอเลเมนต์ เนื้อหาในเรื่องนี้จะได้ศึกษาเกี่ยวกับ XML Schema และวิธีการใช้ในเอกสาร XML เรามาดูที่ Data Type ของ XML Schema และประเภทของ Data Type เหล่านี้ จากนั้นให้ดูวิธีการสร้างตัวอย่างและ Data Type ที่ซับซ้อน สุดท้ายเราจะตรวจสอบ Namespace ที่นำมาใช้ใน XML Schema

Data Type ของ Schema แบบธรรมดา
โดยส่วนใหญ่เอกสาร XML แบ่งออกได้เป็น 2 ชนิด คือ Document-Oriented และ Data-Oriented เอกสาร XML ที่เป็น Document-Oriented ประกอบด้วยส่วนของข้อความที่ถูกนำมารวมกับข้อมูลในฟิลด์ ในขณะที่เอกสาร XML ที่เป็น Data -Oriented ประกอบด้วยข้อมูลในฟิลด์เท่านั้น
ตัวอย่างเอกสารที่เป็น Document-Oriented คือ Message เช่นที่แสดงข้างล่างนี้

<message priority="hight" date="2000-01-11">
<from>Jake Sturm</from>
<to>Gwen Sturm</to>
<subject>DNA Course</subject>
<body>
The new DNA course that we are offering is now complete. It will provide a complete overview discussion of designing and building DNA systems, including DNS, DNA, COM, and COM+. The course is also listed on the Web site, at http://ies.gti.net.
</body>
</message>

Message นี้มีเนื้อหาส่วนที่เป็นข้อความที่ใหญ่มาก แต่ยังคงมีแอตทริบิวต์ไว้ด้วยคือ date และ priority ซึ่ง date Attribute มี Data Type เป็น Date (วันที่) และ priiority Attribute มี Data Type เป็น enumerated ซึ่งมีประโยชน์มากในการตรวจสอบแอทริบิวต์เหล่านี้ว่ามีรูปบบที่ถูกต้องสำหรับ Data Type ทั้งสองหรือไม่ โดย Schema ยอมให้คุณทำสิ่งเหล่านี้ได้

เอกสารที่เป็น Data-Oriented มีลักษณะดังนี้

<bill>
<OrderDate>2001-02-11</OrderDate>
<ShipDate>2001-02-12</ShipDate>
<BillingAddress>
<name>John Doe</name>
<street>123 Main St.</street>
<city>Anytown</city>
<state>NY</state>
<zip>12345-0000</zip>
</BillingAddress>
<Voice>555-1234</Voice>
<fax>555-5678</fax>
</bill>

เอกสารทั้งหมดนี้ประกอบด้วยฟิลด์ข้อมูลที่ต้องใช้ในการตรวจสอบ การตรวจสอบฟิลด์ข้อมูลที่เป็นสิ่งที่จำเป็นสำหรับเอกสาร XML รูปแบบนี้ เรามาดูตัวอย่าง Schema สำหรับเอกสารที่เป็น Data-Oriented ในหัวข้อ "Schema สำหรับเอกสาร XML ที่เป็น Data-Oriented" ต่อไปในบทนี้
ในจุดนี้เราจะดูเฉพาะเอกสาร XML ที่เป็น Document-Oriedted ซึ่งประกอบด้วย Data-Type ชนิดเดียวเท่านั้น (รูปแบสตริง) เพราะว่า DTD ทำงานได้ดีกับเอกสาร XML ที่เป็น Document-Oriented ซึ่งบรรจุเฉพาะ Data Type แบบสตริงเท่านั้น เนื่องจาก Schema ยอมให้คุณตรวจสอบข้อมูลของ Data Typ eในตอนนี้ให้คุณดูชนิดข้อมูลที่ถูกในข้อกำหนดของ Schema
คำว่า Data Type ในมาตรฐาน Schema ที่สอง ซึ่งคุณสามารถพบได้ที่ http://www.w3.org/TR/xmlschema-2/ โดย Data Type แทนที่ชนิดของข้อมูลเช่น Sring, Integer และอื่นๆ เป็นต้น มาตรฐานของ Schema ที่สองจะกำหนด Simple Data Type ในรายละเอียด ซึ่งเป็นสิ่งที่เรากล่าวถึงในบทนี้

องค์ประกอบด้านประเภทข้อมูลของ Schema
ใน Schema นั้น Data Type มีส่วนประกอบ 3 ส่วนคือ Value Space, Lexical Space และ Facet ซึ่ง Value Space คือช่วงค่าของ Data Type ที่ยอมรับได้ Lexical Space เป็นชุดของ Literal ที่ถูกต้องซึ่งแทนวิธีการที่ Data Type สามารถแสดงผลได้ เช่น 100 และ 1.0E2 เป็น Literal สองแบบที่แตกต่างกัน แต่ทั้งคู่แสดงค่า Floating Point เหมือนกัน Facet คือลักษณะพิเศษของประเภทข้อมูล ซึ่ง Data Type อาจประกอบด้วย Facet จำนวนมาก โดยแต่ละตัวจะกำหนดหนึ่งลักษณะพิเศษตั้งแต่หนึ่งหรือมากกว่า Facet กำหนดวิธีที่ Data Type หนึ่งแตกต่างจาก Data Type อื่น ๆ Facet จะระบุ Value Space ของ Data Type
มี Facet อยู่สองชนิดคือ Fundamental และ Constraining ซึ่ง Fundamental Facet ทำหน้าที่กำหนด Data Type ส่วน Constraining Facet จะวางข้อกำหนดของ Data Type ตัวอย่างของ Fundamental Facet คือกฎที่กำหนดลำดับของเอเลเมนต์ คือค่าสูงสุดหรือต่ำสุดที่ยอมให้เป็ฯไปได้ กำหนดลักษณะดั้งเดิมของ Data Type ว่าจำกัดหรือไม่จำกัด และกำหนดว่าอินสแตนซ์ (Instance) ของ Data Type นั้นต้องเป็นเช่นนั้นหรือไปได้สุดพิกัด และกำหนดว่า Data Type (จำนวนอักขระสำหรับข้อมูลสตริงหรือจำนวนบิตของ Data Type แบบไบนารี) ความยาวต่ำสุดและความยาวสูงสุด, Enumeration และ Pattern
เราสามารถจัดหมวดหมู่ของชนิดข้อมูลได้หลายมิติดังนี้ อันดับแรก Data Type สามารถเป็น Atomic หรือ Aggregate สำหรับ Data Type แบบ Atomic ไม่สามารถแบ่งเป็นส่วนๆ ได้ค่า Integer หรือ Date ที่ถูกนำมาใช้แทนค่าสตริงที่มีอักขระเดียวคือ Data Type แบบ Atomic ถ้า Date ถูกนำเสนอเป็นค่า Day, Month และ Year แล้ว Data Type Date จึงเป็น Data Type แบบ Aggregate
Data Type ยังสามารถจำแนกได้เป็น Primitive หรือ Generated ซึ่ง Primitive Data Type ไม่ได้รับการสืบทอดมาจาก Data Type อื่นๆ แต่เป็นนิยามที่ถูกกำหนดขั้น Generated Data Type ถูกสร้างมาจาก Data Type ที่มีอยู่แล้ว ซึ่งเรียกว่า Basetypes ซึ่งสามารถเป็น Primitive หรือ Generated Data Type ก็ได้ Generated Type ซึ่งจะถูกอธิบายในหัวข้อต่อไปของยทนี้สามารถเป็น Data Type แบบ Simple หรือ Complex ก็ได้เช่นกัน

Primitive Data Type ประกอบด้วยค่าดังต่อไปนี้ คือ String, Boolean, Float, Decimal, Double, timeDuration, recurringDuration, Binary และ uri นอกจากนั้นยังมี Data Type แบบ timelnstant ที่ได้รับมาจาก Data Type แบบ recurringDuration ท่ามกลาง Data Type แบบ Primitive มีสองค่าที่ใช้กำหนดใน XML Schema คือ timeDuration และ recurringDuration สำหรับ Data Type แบบ timeInstant ยังสามารถกำหนดไปยัง XML โดยเฉพาะ
Data Type แบบ timeInstant แทนการรวมกันของค่า Date และ Time ซึ่งนำเสนอข้อมูลของเวลาแบบเจาะจง (ดังโค้ด) แบบแผนของการ Data Type นี้คือ

CCYY-MM-DDThh:mm:ss.sss
CC แทนศตวรรษ, YY คือปี, MM คือเดือน และ DD คือวัน ซึ่งจะถูกเติมเข้าไปข้างหน้าด้วยสัญลักษณ์แสดงหัวข้อเพิ่มเติมเพื่อแสดงถึงหมายเลขจำนวนลบ ถ้าเครื่องหมายนี้ถูกตัดออกำปจะนันนิษฐานเป็นเครื่องหมายบวกโดยปริยาย ตัวอักษร T คือตัวแยกระหว่าง Date และ Time ส่วน hh, mm และ ss.sss แทนค่าชั่วโมง นาที และวินาที การเพิ่มตัวเลขสามารถนำมาใช้เพื่อเพิ่มความแน่นอนของเศษวินาทีได้ถ้าต้องการ เพื่อจัดรูปแบบค่าปีที่มากกว่า 9999 เราสามารถเพิ่มค่าตัวเลขไปยังด้านซ้ายของการนำเสนอนี้
การนำเสนอ timeInstant สามารถทำได้โดยกำหนดค่า Z ตามหลังทันทีเพื่อแสดง Universal Time Coordinate (UTC) ข้อมูลเขตเวบา (Time Zone) จะแสดงค่าตามความแตกต่าางระหว่างเวลาท้องถิ่นและ UTC ที่คุณสามารถกำหนดได้ทันทีต่อจากเวลาที่ซึ่งประกอบด้วยเครื่องหมายบวกหรือลบ แล้วตามด้วย hh:mm
Data Type แบบ timeDudation แสดงบางช่วงของเวลารูปแบบสำหรับ timeDuration ได้ดังนี้
PyYmMdDThHmMsS
ค่า Y แทนจำนวนของปี, M คือจำนวนของเดือน, D คือจำนวนของวัน, T คือตัวแบ่งระหว่างวันที่กับเวลา, H คือจำนวนชั่วโมง, M คือจำนวนนาที และ S คือจำนวนวินาที ส่วนค่า P ที่เริ่มต้นบอกให้รู้ว่าประโยคนี้แทนรอบของเวลา จำนวนของวินาทีสามารถเป็นตัวเลขทศนิยมเพื่อความแม่นยำ และการนำหน้าด้วยเครื่องหมายลบจะอนุญาตให้แสดงช่วงเวลาที่เป็นลบ ถ้าไม่มีการกำหนดเครื่องหมายไว้จะสันนิษฐานว่าช่วงเวลาเป็นบวก
Data Type แบบ recurringDuration แทนช่วงเวลาที่เกิดซ้ำ แบบแผนสำหรับ recurringDuration คือการตัดด้านซ้ายของการนำเสนอ timeInstant เช่น ถ้าค่าศตวรรษ CC ถูกละจากการนำเสนอใน timeInstant ซึ่ง timeInstant เกิดขึ้นทุกๆ พันปีเช่นเดียวกันถ้าไม่มีการกำหนด CCYY คุณจะพบว่า timeInstant เกิดขึ้นทุกๆ ปี
ทุกๆ 2 ตัวอักขระของการนำเสอนที่ตัดทอนไปแสดงโดยเครื่องหมาย Hyphen อันเดียว เช่น เพื่อแสดงเวลา 1:20 PM ในวันที่ 31 เดือนพฤษภาคมของทุกๆ ปี ตามมาตรฐานเวลาฝั่งตะวันออก (Eastern Standard Time) ซึ่งจะช้ากว่าเวลา UTC 5 ชั่วโมง สามารถเขียนโค้ดได้ดังนี้
--05-31T13:20:00-05:00

การสร้าง Simple Data Type


 




 
Contact Us | Our Mission | Privacy Policy | Advertise With Us | Site Help
Copyright © 2002 Copy เค้ามาจาก www.xml.com จะได้ดูเหมือนๆกัน