XML.com

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








การสร้าง Simple Data Type
Simple Data Type สามารถสร้างใหม่ได้โดยการใช้ simple Type Element การประกาศ DTD เป็นสิ่งจำเป็นสำหรับ simpleType Element ที่แสดงด้านล่างนี้ (สำหรับการประกาศที่สมบูรณ์สามารถดูได้ที่ข้อกำหนดลักษณะเฉพาะของ Schema ที่ http://www.w3.org/IR/xmlschema-2/)

<!ENTITY % ordeed ' (minInclusive | minExclusive) | (maxInclusive | maxExclusive) | precision | scale '>
<!ENTITY % unordered 'pattern | enumeration | length | maxlength | minlength | encoding | period '>
<!ENTITY % facet '%ordered; | %unordered;'>
<!ELEMENT simpleType ((annotation)?, (%facet;)*)>
<!ATTLIST simpleType
name NMTOKEN #IMPLIED
base CDATA #REQUIRED
final CDATA ''
abstract (true | false) 'false'
derivedBy (list | restriction | reproduction) 'retriction'>
<!ELEMENT annotation (documentation)>

<!ENTITY % facetAttr 'value CDATA #REQUIRED'>
<!ENTITY % facetMdel '(annotation)?'>
<!ELEMENT maxExclusive %facetModel;>
<!ATTLIST maxExclusive %facetAttr;>
<!ELEMENT mminExclusive %facetModel;>
<!ATTLIST minExclusive %facetAttr;>

<!ELEMENT maxInclusid %facetModel;>
<!ATTLIST maxInclusive %facetAttr;>
<!ELEMENT minInclusive %facetModel;>
<!ATTLIST minInclusive %facetAttr;>

<!ELEMENT precision %facetModel;>
<!ATTLIST precision %facetAttr;>
<!ELEMENT scale %facetModel;>
<!ATTLIST scale %facetAttr;>

<!ELEMENT length %facetModel;>
<!ATTLIST length %facetAttr;>
<!ELEMENT minlength %faceModel;>
<!ATTLIST minlength %facetAttr;>
<!ELEMENT maxlength %facetModel;>
<!ATTLIST maxlength %facetAttr;>

<!-This one can be repeated. -->
<!ELEMENT enumeration %facetmodel;>

<!ATTLIST enumeration %facetAttr;>
<!ELEMENT pattern %facetModel;>
<!ATTLIST patern %facetAttr;>
<!ELEMENT encoding %facetModel;>
<!ATTLIST encoding %facetAttr;>
<!ELEMENT period %facetModel>
<!ATTLIST period %facetAttr;>
<!ELEMENT documentation ANY>
<!ATTLIST documentation source CDATA #IMPLIED>
<!ELEMENT documentation ANY>
<!ATTLIST documentation
source CDATA #IMPLIED
xml:lang CDATA #IMPLIED>

 

ดังที่เห็นแล้วว่า simpleType Element ซึ่งเป็นตัวแทนของ Simple Data Type สามารถเป็น Ordered หรือ Unordered Data Type แบบ Ordered สามารถอยู่ในการเรียงลำดับตามต้องการในกรณีของการเรียงบำดับค่า Integer บวก คุณสามารถเริ่มต้นที่ค่าที่ 0 และต่อไปจนถึงค่าจำนวนเต็มสุงสุด Unordered Data Type ไม่มีการจัดลำดับใดๆ แต่มีการรวม Data Type เข้าไว้ด้วยเฃ่น Boolean ซึ่งไม่สามารถวางในแบการเรียงลำดับใดๆ แต่มีการรวม Data Type เข้าไว้ด้วย เช่น Boolean ซึ่งไม่สามารถวางในแบบการเรียงบำดับได้ การใช้ DTD ที่กล่าวถึงก่อนหน้านี้ทำให้คุณสามารถกำหนด Simple Data Type ของตัวเอง โดยที่ Simple Data Type เหล่านี้สามารถนำมาใช้ใน Schema ของคุณเพื่อกำหนดได้ด้วยการใช้ Unordered Element
สำหรับ Data Type ประกอบด้วย Boolean และ binary Data Type ซึ่ง Numeric Data Type ทั้งหมดเป็น Ordered สตริงเป็น Ordered แต่เมี่อกำหนด String Data Type เองก็สามารถ กำหนดได้ด้วยการใช้ Unordered Element
สำหรับ Data Type แต่ละตัวเราสามารถใช้ Child Element เพื่อกำหนด simpleType Element ซึ่ง Child Element แต่ละตัวบรรจะแอตทริบิวต์ร่วมกับค่าของ Child Element และคอมเมนต์ที่เป็นทางเลือก Child Element กำหนด Facet สำหรับ Data Type ที่สร้างขึ้น
ในตอนนี้ให้ดูที่วิธีการสร้าง Simple Data Type โดยการใช้ Ordered และ Unordered Facet

การใช้ Ordered Facet
สังเกตดูจากโค้ดที่ผ่านมา Ordered Facet ประกอบด้วย Facet ดังต่อไปนี้คือ maxExclusive, minExclusive, MaxInclude, minInclude, precision และ scale ค่าของ maxExclusive คือค่าที่น้อยที่สุดของ Data Type ซึ่งอยู่ภายนอกค่าสูงสุด (Upper Bound) ในพื้นที่ค่า (Space) ของ Data Type ค่า minExclusive คือค่าที่มากที่สุดของ Data Type ซึ่งอยู่ภายนอกค่าที่ต่ำที่สุด (Lower Bound) ของช่อง่างระหว่างค่า (Space) สำหรับ Data Type ดังนั้นถ้าคุณต้องการมี Inter Data Type ในช่วงระหว่าง 100 ถึง 1000 ค่าของ minExcluseive จะมีค่าเท่ากับ 99 และค่าของ maxExcusive คือ 1001 การประกาศ Simple Data Type ทำได้ดังต่อไปนี้

<simpleType name="limitedInteger" base="interger">
<minExcluseive="99"/>
<maxExclusive="1001"/>
</simpleType>

minInclusie และ maxInclusive Facet ทำงานเหมือนกัน minExclusive และ maxExclusive นอกจากค่าของ minInclusive คือค่าต่ำสุดของระยะห่างระหว่างค่าของ Data Type และ maxInclusive คือค่าสูงสุดของระยะห่างระหว่างค่าของ Data Type โดย Simple Data Type สามารถเขียนใหม่ได้ดังนี้

<simpleType name="limitedInteger" base="integer">
<minInclusive="1010"/>
<maxInclusive="100"/>
</simpleType>

Precision คือจำนวนของตัวเลขที่ถูกใช้เพื่อแสดงจำนวนส่วน Scale แทนจำนวนของเลขหลักต่างๆ ที่ปรากฏด้านขวามือของตำแหน่งจุดทศนิยมซึ่งจะต้องน้อยกว่า Precision เสมอ เช่น Data Type ที่ไม่ได้มีขนาดใหญ่มากนัก แต่ประกอบด้วยค่า 1,000,000 และมีเลขทศนิยมสองหลัก (1,000,000.00) จะมี Precision เท่ากับ 9 (ยกเว้นเครื่องหมายจุลภาพและจุดทศนิยม) และ Scale เท่ากับ 2 การประกาศสามารถทำได้ดังนี้

<simpleType name="TotalSales" base="integer">
<minInclusive="0"/>
<maxInclusive="1000000"/>
<precision="9"/>
<scale="2"/>
</simpleType>

ถ้าไม่ได้ประกาศ maxInclusive Facet จำนวนค่าตัวเลขสูงสุดที่สามารถมีได้คือ 9,999,999 เป็นค่าที่ถูกต้อง ถ้ามีค่าน้อยกว่า 1,000,000 การประกาศต่อไปนี้ก็พอเพียง

<simpleType name="TotalSales" base="integer">
<precision="8"/>
<scale="2"/>
</simpleType>

 

ในตอนนี้ได้ศึกษาวิธีการใช้ Ordered Facet เพื่อสร้าง Simple Data Type ให้ดูวิธีการใช้ Unordered Facet เพื่อสร้าง Simple Data Type
การใช้ Unordered Facet
ในโค้ดที่ผ่านมาจะเห็นได้ว่า Unordered Facet สร้างจาก Facet ต่อไปนี้ คือ period, length, maxLength, minLength, pattern, enumeration และ encoding

สำหรับ Time Data Type สามารถใช้ period Facet เพื่อกำหนดอัตราการเกิดขึ้นอีกของ Data Type โดยที่ period Facet ใช้ใน TimeDuration Data Type เช่น ถ้าต้องการสร้า Special Holiday Data Type ซึ่งเป็นวันหยุดของประเทศสหรัฐอเมริกา สามารถใช้การประกาศต่อไปนี้

<simpleType name="holidays" base="date">
<annotation>
<documentation>Some U.S. holidays</documentation>
</annotation>
<enumeration value="-01-01">
<annotation>
<documentation>New Year's Day</documentation>
</annotation>
</enumeration>
<enumeration value="-07-04">
<annotation>
<documentation>Fourth of July</documentation>
</annotation>
</enumeration>
<enumeration value="-12-25">
<annotation>
<documentation>Chistmas</documentation>
</annotation>
</enumeration>
</simpleType>

 

เมื่อใช้ length Facet แล้ว Data Type ต้องมีความยาวที่คงที่แน่นอน ในการใช้ length สามารถสร้างสตริงที่มีความยาวแน่นอน maxLength Facet แสดงความยาวสุงสุดที่ Data Type สามารถมีได้ minLength Facet แสดงความยาวน้อยที่สุดที่ Data Type สามารถมีได้ การใช้ minLength และ maxLength สามารถกำหนดสตริงให้มีความยาวที่เปลี่ยนแปลงได้ซึ่งเป็นค่าความยาวที่น้อยที่สุดโดยใช้ minLength และค่าความยาวมากที่สุดโดยใช้ maxLength
Pattern Facet เป็นข้อจำกัดหนึ่งของพื้นที่ค่า (Space Value) ของ Data Type ซึ่งมาจากการจำกัดพื้นที่ของคำ (ค่าที่ถูกต้อง) Enumeration Facet จำกัดพื้นที่ค่าไปยังชุดของค่า (Value) Encoding Facet ถูกนำมาใช้สำหรับค่าประเภทไบนารีซึ่งสามารถเข้ารหัสเป็นเลขฐานสิบหก หรือ Base64 นอกจากจะมี Facet แล้ว Simple Date Type ยังประกอบด้วยแอตทริบิวต์ที่สามารถใช้เพื่อกำหนด Data Type ในตอนนี้ให้ไปดูที่แอตทริบิวต์เหล่านี้

แอตทริบิวต์สำหรับ Simple Data Type
ให้สังเกตโค้ดข้างล่างนี้ simpleType Element ประกอบด้วยแอตทริบิวต์ต่อไปนี้คือ name, base, abstract, final และ derivedBy ซึ่ง name Attribute สามารถเป็นแอตทริบิวต์ได้ทั้งชนิด Built-In หรือ User-Defined ส่วน base Attribute เป็นแอตทริบิวต์ประเภทพื้นฐานที่ใช้เพื่อระบุแอตทริบิวต์ชนิดใหม่
derivedBy Attrivute สามารถกำหนดให้แก่ list, restriction หรือ reproduction ค่า list จะยอมให้สร้าง Data Type ที่ประกอบด้วยรายการของ Item ที่แยกโดยการเว้นวรรค เฃ่น สามารถ
ใช้การประกาศต่อไปนี้เพื่อสร้าง Data Type List
<simpleType name='StringList' base='string' derivedBy='list'>
Data Type นี้สามาถใช้ในเอกสาร XML เพื่อสร้างแอตทริบิวต์ประเภท List ใหม่เช่นที่แสดงนี้

<myListElement xsi:type='StringList'>
This is not list item 1.
This is not list item 2.
This is not list item 3.
</myListElement>

 

ด้วยการใช้ xsi สามารถลบคำสั่งการประกาศที่เป็นค่าดีฟอลต์ของ myListElement และสร้าง StringList Data Type เนื่องจาก StringList Data Type ประกอบด้วยรายการสตริงซึ่งสามารถใช้เป็นเนื้อหาสำหรับ myListElement


สรุป
Schema ทำให้เราสามาถเชื่อมความสัมพันธ์ระหว่าง Data Type กับแอตทริบิวตต์เพื่อสร้าง Data Type ของเราเอง และกำหนดโครงสร้างเอกสารของเราโดยใช้ Well-Formed XML จะพบว่า Schema ถูกใช้เพื่อกำหนดเอเลเมนต์ที่มีความสัมพันธ์กับชื่อและประเภท (Type) ประเภทสามารถเป็ฯได้ทั้ง Data Type หรือแอตทริบิวต์หรือเอเลเมนต์ตั้งแต่ 1 ตัวหรือมากกว่า เอเลเมนต์สามารถจัดกลุ่มรวมอยู่ใน group Element และแอตทริบิวต์สามารถจัดกลุ่มรวมเข้าไว้ด้วยกันใน attributeGroup Element ดังนี้ group และ attributeGroup Element สามารถนำมาใช้ในขอบเขตระดับ Local (Local Scope) หรือขอบเขตระดับเอกสาร (Document Scope)
Schema ได้จัดสร้างประโยชน์ต่างๆ มากมายที่มีความสามารถเหนือกว่า DTD เช่น Schema สามารถใช้ Namespace อีกทั้งยังใช้ประโยชน์ในขอบเขตที่กว้างขวางของ Data Type และถูกเขียนในรูปบบ XML ซึ่งดูเหมือนว่า Schema จะค่อยๆ เข้ามาแทนที่ DTD ในไม่กี่ปีนี้

 




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