Showing posts with label XML. Show all posts
Showing posts with label XML. Show all posts

Wednesday, August 27, 2008

XML Schemas
(XML သဒၵါ (၀ါ) XML အဓိပၸါယ္ သတ္မွတ္မွဳ) - အပိုင္း ( ၅ )

အပိုင္း ( ၁ ) ၊
( ၂ ) ၊ (၄) ႏွင့္ ( ၅) ကို အရင္ဖတ္ၾကည့္ေစခ်င္ပါသည္။



Content model ေတြဖန္တီးဖို ့အတြက္ <simpleType> element ကိုအသံုးၿပဳပါတယ္။ ဒါေပမယ့္ အဲဒီ content model ေတြဟာ simple content ၿဖစ္ေနဆဲပါပဲ။ simple content ဆိုတာ data ပဲပါၿပီး child elements ဒါမွမဟုတ္ mixed contents ေတြ မပါတဲ့ ဟာပါ။ simple content ၿဖစ္ေနဆဲေပမယ့္ <simpleType> က ၿပဳလြယ္ၿပင္လြယ္၊ ေၿပာင္းလဲလြယ္တဲ့ အဆင့္တစ္ခုကို ၿဖစ္ေစပါတယ္။ (a level of flexibility) လက္ရိွ ရိွေနတဲ့ ေဒတာ အမ်ိဳးအစား ေတြမွာ ကန္ ့သတ္ခ်က္ေတြ ၿပဳလုပ္ႏိုင္တာမ်ိဳးေပါ့။

ဘာေၾကာင့္ အဲဒီ ကန္ ့သတ္ခ်က္ေတြက အသံုး၀င္ရတာလဲလို ့ ေမးခဲ့ရင္ ဒါေလးကို ေတြးၾကည့္ၾကမယ္။ ကၽြန္ေတာ္တို ့ပစၥည္း တစ္ခုအတြက္ ကုန္စရင္း (inventory) ကို element တစ္ခုေၾကညာၾကမယ္။ ဒီေတာ့ <inventory> ဆိုတဲ့ element ေလးကို ကၽြန္ေတာ္တုိ ့ ဖန္တီးမယ္ေပါ့။ ဒါေပမယ့္ ကၽြန္ေတာ္တို ့ ၾကိဳသိေနတယ္။ ဒီ ပစၥည္း ဟာ အခု ၂၀၀ ထက္ပိုၿပီး သိုေလွာင္ရံုထဲမွာမရိွႏိုင္ဘူးဆိုပါစို ့။ လံုး၀မရိွတာက်ေတာ့ ၿဖစ္ႏိုင္တယ္။ ဒီလို ကန္ ့သတ္ခ်က္ေလးေတြ ပါလာၿပီဆိုရင္၊ ေနာက္ၿပီး ဒီလုိ ဟာေလးေတြက မၾကာခဏ သံုးရေတာ့မယ္၊ ထပ္ခါထပ္ခါသံုးရေတာ့မယ္ဆိုရင္ ကၽြန္ေတာ္တို ့ဟာ <simpleType> ကို သံုးၿပီး XML သဒၵါ (Schema) ကုိေၾကညာသင့္ၿပီေပါ့။ ေအာက္မွာၾကည့္မယ္။

<xs:element name="inventory">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="200"/>
</xs:restriction>
</xs:simpleType>
</xs:element>


အဲဒီ ေၾကညာခ်က္ေလးက <inventory> လို ့ေခၚတဲ့ element တစ္ခုကို ၿဖစ္ေစတယ္။ သူမွာ တန္ဖိုး (value) က 0 ကေန ၂၀၀ အထိအၿမင့္ဆံုးပါႏိုင္ပါတယ္။
(တခု သတိၿပဳပါ။ ကၽြန္ေတာ္တို ့သံုးတဲ့ ေဒတာအမ်ိဳးအစားဟာ XML မွာ ရိွၿပီးသား ေဒတာအမ်ိုးအစား ဆိုတာပါပဲ။ interger အမ်ိဳးအစားေပါ့။ ဒါကို ကၽြန္ေတာ္တို ့က restriction ဆိုတာနဲ ့ကန္ ့သတ္ရံုပဲ ကန္ ့ သတ္လိုက္တာပါ။)

ဒီလိုေၾကညာခဲ့တဲ့ အတြက္ တကယ္လို ့ XML Document ဖိုင္ထဲမွာ ဒီလို တက္(tag) ကေလးေတြပါလာရင္ အိုေကၿပီး
<inventory>190</inventory>
<inventory>0</inventory>
<inventory>49</inventory>


ဒီလိုေလးေတြေတာ့ ပါလို ့မရဘူးေပါ့။
<inventory>201</inventory>
<inventory>250</inventory>


<simpleType> element ကို ေၾကညာတဲ့ အခါေတြမွာ restriction ရယ္၊ list ရယ္၊ union ရယ္ပဲ ပါလို ့ ရပါတယ္။

ထပ္သိထားရမွာက <simpleType> element မွာ id နဲ ့ name ဆိုတဲ့ စြမ္းရည္ၿပစကားလံုး (attributes) ေလးေတြပါလို ့ရတယ္။ ဒီလို simple type တစ္ခုကို name သတ္မွတ္ေပးလို ့ရတဲ့ အတြက္ အက်ိဳးေက်းဇူးကေတာ့ ကၽြန္ေတာ္တို ့ဟာ အၿခား element ေတြေၾကညာတဲ့ အခါမွာ အဲဒီ type ကို အဲဒီ name ကိုအသံုးၿပဳ ၿပီး ၿပန္ေခၚသံုးလို ့ ရၿခင္းပါပဲ။ ထပ္ခါထပ္ခါ အသံုးၿပဳႏိုင္ၿခင္း ( reusable) ၿဖစ္တာေပါ့။

<xs:simpleType name="currency">
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="2"/>
</xs:restriction>
</xs:simpleType>

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


အေပၚက နမူနာမွာ ကၽြန္ေတာ္တို ့ဟာ price လို ့ေခၚတဲ့ element တခုရိွတယ္။ အဲဒီ price ဟာ decimal အမ်ိဳးအစားၿဖစ္ၿပီး ေတာ့ ဒသမဂဏန္း ၂ လံုးပဲ ပါလို ့ရမယ္။

ဒီေတာ့ ကၽြန္ေတာ္တို ့ဟာ decimal ကို base ေဒတာအမ်ိဳးအစားအေနနဲ ့ယူလိုက္ၿပီး သူ ရဲ ့ဒသမဂဏန္းကို xs:fractionDigits တက္(tag)က တန္းဖိုး 2 ဆိုၿပီး ေၿပာင္းလိုက္တယ္။ တကယ္ decimal ေဒတာအမ်ိဳးအစားဟာ ဒသမ ၂ လံုးပဲ ပါတာမဟုတ္ဘူး။ ဒါေၾကာင့္ ကၽြန္ေတာ္တုိ ့က ဒီလို ေၿပာင္းၿပီးေတာ့ မွ ကၽြန္ေတာ္တို ့ေၿပာင္းထားတဲ့ အမ်ိုးအစား (type) ကို currency လို ့ simpleType ရဲ ့ name မွာ ေၾကညာလိုက္တယ္။ ဒသမဂဏန္း ၂ လံုးနဲ ့ဟာကို currency လို ့ နာမည္ေပးလိုက္တယ္ေပါ့ဗ်ာ။

ၿပီးေတာ့ XML Document ထဲမွာ အဲဒီ နာမည္ကို ယူၿပီး ဒီလို သံုးလိုက္လို ့ရပါၿပီ။

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


တကယ္လို ့ အၿခား element တခု ၊ ဥပမာ- totalAmount ဆိုတဲ့ element ကလည္း price လိုပဲ ဒသမဂဏန္း ၂ လံုးဆိုရင္-

<xs:element name=”totalAmount” type="currency"/>


paymentAmount ကလည္း ဒသမ ၂ လံုးပဲ ဆိုပါစို ့။

<xs:element name=”paymentAmount” type="currency"/>


ဆိုၿပီး သံုးလိုရပါတယ္။ ေတြ ့လား။ currency ဆိုတဲ့ ေဒတာအမ်ိဳးအစားကို ပဲ ေခၚသံုးထားတယ္။ တခါတည္း simpletype အေနနဲ ့ ေၾကညာၿပီး ထပ္ေၾကညာစရာမလို ေတာ့ဘူး။ မဟုတ္ရင္ element အသစ္တစ္ခု ဖန္တီးတိုင္း ဒသမ ၂ လံုးဆိုတာကို ေၾကညာေနရမွာ။ အခု မလိုေတာ့ဘူး။ currency ဆိုတဲ့ name ကို ေခၚသံုးရံုပဲ။ ဒါကို ထပ္ခါထပ္ခါ အသံုးၿပဳႏိုင္ၿခင္း ( reusable) ၿဖစ္တယ္လို ့ေခၚတယ္။ ဘယ္ element ကမဆို သူတို ့ရဲ ့ ေဒတာအမ်ိုးအစား (data type ) အတြက္ သင့္ေလွ်ာ္တယ္ဆိုရင္ တၿခား XML ရဲ ့ ရိွၿပီးသားေဒတာ (build in datatype – eg: Int, Decimal , etc..) ေတြလိုပဲ ေခၚသံုးႏိုင္တယ္။

(သတိၿပဳရန္- type=”currency” ဆိုတာ XML Build-in DataType( XML မွာ အလိုအေလွ်ာက္ပါၿပီးသား ေဒတာအမ်ိုးအစား) မဟုတ္ဘူး။ ကၽြန္ေတာ္တို ့ အေပၚမွာ <simpleType> ဆိုၿပီးေက်ညာခဲ့လို ့သံုးလို ရတာ။ သူဟာ ေဒတာ အမ်ိဳးအစားတစ္ခုလို ့ၿဖစ္သြားပါတယ္။ အဲဒါကို အဓိကေၿပာခ်င္တာပါပဲ။)

ဒါဟာ XML သဒၵါ (schema) ရဲ ့ အလြန္ေကာင္းတဲ့ အားသာခ်က္တစ္ခုပါပဲ။

<simpletype> မွာ ကၽြန္ေတာ္တို ့ <list> <restriction> < union> ေတြကိုသံုးလို ့ ရတယ္လို ့ ေၿပာခဲ့ပါတယ္။
အေပၚမွာ <restriction> ကို သံုးၿပသြားခဲ့ပါတယ္။ အခု <list> ကိုသံုးၿပီး ဘယ္လို ့ အားသားခ်က္ေတြရိွလဲ၊ ဘယ္လိုကိစၥေတြကို လုပ္လို ့ရလဲ ဆိုတာၾကည့္ရေအာင္။

List

List က တန္ဖိုးတစ္ခုတည္းထက္ တန္ဖိုးအမ်ားၾကီးကိုလက္ခံႏိုင္တဲ့ ကိုယ္ပိုင္ ေဒတာ အမ်ိဳးအစားတစ္ခုကို ဖန္တီးတာကို ေၾကညာခ်င္တဲ့အခါမွာ သံုးလို ့ရပါတယ္။ ဥပမာ - ကၽြန္ေတာ္တို ့က color ဆိုတဲ့ element ေလးတစ္ခုကို တည္ေဆာက္မယ္ဆိုပါစို ့။ အဲဒီ ေလးဟာ မွာ အနီ (red) ၊ အ၀ါ (yellow) ၊ အၿပာ (blue) ၊ အစိမ္း (green) စသည္ၿဖင့္ ပါမယ္ေပါ့။ အဲဒီအခါ ကၽြန္ေတာ္တို ့က XML သဒၵါ (XML schema) မွာ ဒီလုိေၾကညာေပးလို ့ရတာေပါ့။

<xs:element name=”color” type=”xs:string”></xs:element>


ဒါေပမယ့္ ဒီလိုေၾကညာရင္ ကၽြန္ေတာ္တို ့ရဲ ့ <color> မွာ တန္ဖိုး (value) တစ္ခုပဲပါလို ့ရမယ္။ ဒီလိုမ်ိဳး -
<color>red</color>  (ဒါက အနီ)
<color>green</color> (ဒါက အ၀ါ အဲလို တစ္ခုမွာ တန္ဖိုး တခုပဲပါလို ့ရမယ္)


တကယ္လို ့ ကၽြန္ေတာ္တို ့က <color> မွာ တန္ဖိုးေတြ တစ္ခုထက္မက ပါေစခ်င္တယ္ဆိုပါစို ့။<list> ကို သံုးၿပီးလုပ္လို ့ ရၿပီေပါ့။

<xs:element name=”color”>
<xs:simpleType>
<xs:list itemType=”xs:string”>
<xs:restriction>
<xs:minLength value=”1”/>
<xs:maxLength value=”5”/>
</xs:restriction>
</xs:list>
</xs:simpleType>
</xs:element>


ဒီ XML Schema မွာ <simpleType> ထဲမွာ <list> ကိုထည့္ၿပီး ေၾကညာထားပါတယ္။ အဲဒီ <list> မွာ itemType ဆိုတဲ့ စြမ္းရည္ၿပ စကားလံုး (attribute) တစ္ခုလည္းသံုးထားတယ္။ သူက ဘာကိုေၿပာတာလည္းဆိုေတာ့ ဒီ list ထဲမွာ ပါမဲ့ ေဒတာအမ်ိဳးအစားကို ေၿပာၿပတယ္။ ဒီမွာဆို xs:string ၊ (စာအစဥ္အတန္း) ေဒတာအမ်ိဳးအစားေပါ့။ ဟုတ္တယ္ေလ။ ပါမဲ့ တန္ဖိုးက Red, Blue, Green စသည္ဆိုေတာ့ string အမ်ိဳးအစား ေဒတာေပါ့။ ၿပီးေတာ့ ကၽြန္ေတာ္တုိ ့ အေပၚက သံုးဖူးတဲ့ <restriction> ကို ၿပန္သံုးတယ္။ ဒီေနရာမွာေတာ့ ကၽြန္ေတာ္တို ့က <minLength> နဲ ့ <maxLength> တက္(ဂ္) ေလးကို သံုးထားတယ္။ အဲဒီ တက္(ဂ္)ေလး ၂ ခုက ဘာကိုေၿပာလည္းဆိုေတာ့ <color> element ထဲမွာ ပါမဲ့ တန္းဖိုး အေရအတြက္။ အခု <list> ကိုသံုးလိုက္ေတာ့ <color> ထဲမွာ တန္ဖိုးက တစ္ခုတည္းမဟုတ္ေတာ့ဘူးေလ။ တခုထက္မက ပိုၿပီးပါလာနိုင္ၿပီ မဟုတ္လား။ ဒီေတာ့ ကၽြန္ေတာ္တို ့က min နဲ ့ max ကိုသံုးၿပီး အႏွိမ့္ဆံုး ဘယ္ႏွစ္ခု၊ အၿမင့္ဆံုး ဘယ္ႏွခု ပါခြင့္ရိွႏိုင္သလဲဆိုတာကို သတ္မွတ္ေပးလိုက္တယ္။ ဒီမွာဆို အႏွိမ့္ဆံုး ၁ ခု၊ အၿမင့္ဆံုး ၅ ခုပါခြင့္ ရိွတယ္ေပါ့။

သတိ။ <minLength> နဲ ့ <maxLenght>တို ့က string (စာအစဥ္အတန္း) တစ္ခုလံုးရဲ ့ အရွည္ကို ေၿပာတာမဟုတ္ပါ။ <list> ရဲ ့ အရွည္ (list ထဲမွာ ဘယ္ႏွခုပါလည္းဆိုတာ) ကိုေၿပာတာပါ။

ဒီေတာ့ ၾကည့္ၾကမယ္။

<color>Red Blue Green</color> ဒါဆို အားလံုးအိုေကေပါ့။ Red, Blue, Green ဆိုမွ List က ၃ ခုပဲရိွေသးတာပဲ။ ဟုတ္။

<color>Red Blue Green Black Orange Purple Brown</color> ဒီလိုေတာ့ မရဘူးေပါ့။ ဘာလို ့ လည္းဆိုေတာ့ အၿမင့္ ဆံုး ရိွရမယ့္ အရွည္ ထက္ ပိုမ်ားေနတယ္ေလ။ အၿမင့္ဆံုးအရွည္က ၅ ၊ အခုက ၇ ခု၇ိွေနတယ္။

<color></color> ဒီလိုလည္းမရဘူး။ အနည္းဆံုး တန္းဖိုး ၁ ခုပါရမယ္လို ့သတ္မွတ္ထားခဲ့တယ္။ မွတ္မိတယ္ထင္ပါတယ္။

<list> က ကၽြန္ေတာ္တို ့ element ထဲမွာ တန္ဖိုးတစ္ခုထက္ပိုၿပီး ထည့္ေပးခ်င္တဲ့ အခါ၊ အဲလို element ကို schema (သဒၵါ) မွာ ေၾကညာရတဲ့ အခါမ်ိဳး အသံုးက်ပါတယ္။

ဆက္ရန္။

ထပ္ေရးေနပါတယ္ဗ်ာ..။ :D

အာေကလာ (akela)

Aug 27, 2008 12.02 pm

Tuesday, December 4, 2007

XML Schemas
(XML သဒၵါ (၀ါ) XML အဓိပၸါယ္ သတ္မွတ္မွဳ) - အပိုင္း ( 3 )

အပိုင္း ( ၁ ) ႏွင့္ ( ၂ ) ကို အရင္ဖတ္ၾကည့္ေစခ်င္ပါသည္။

id
ဒီ id စြမ္းရည္ၿပစကားလံုး (attribute) ေလးက ကၽြန္ေတာ္တို ့ကို ဘာလုပ္ခြင့္ ၿပဳလဲဆိုေတာ့၊ element တစ္ခုအတြက္ ID (Identity) ကို ေၾကညာခြင့္ၿပဳပါတယ္။ ဒီ id ရဲ ့ တန္ဖိုး (value) ဟာ element ရဲ ့ Unique Key (ထပ္တူမရိွေသာ တန္ဖိုး) အၿဖစ္ လုပ္ေဆာင္ေပးပါတယ္။

maxOccurs
ဒီ maxOccurs က XML Document ထဲမွာ Element တစ္ခုဟာ ဘယ္ႏွစ္ၾကိမ္ ပါ၀င္ခြင့္ ရိွတယ္ဆိုတာကို သတ္မွတ္ေပးပါတယ္။ ဥမပါ schemas မွာ ဒီလို ေၾကညာထားမယ္ဆိုပါစို ့-

<element name="part" maxOccurs="3"/>


ဒါဆို XML Document ထဲမွာ part element ေလးဟာ အမ်ားဆံုး 3 ၾကိမ္ ပါလို ့ရပါတယ္။ (ေအာက္မွာၾကည့္ပါ)။

<car>
<part>wheel</part>
<part>body</part>
<part>roof</part>
</car>


မရိွသံုးတန္ဖိုး(default value) အေနနဲ ့ maxOccurs ရဲ ့တန္ဖိုးဟာ 1 ၿဖစ္ပါတယ္။ အႏွတ္ကိန္းမဟုတ္တဲ့ တန္ဖိုးမ်ားကို လက္ခံပါတယ္။ အဲလို ဂဏန္း (interger) ေတြမဟုတ္ပဲ "unbounded" လို ့ တန္ဖိုးသတ္မွတ္ခဲ့ ရင္ element တစ္ခုဟာ ၾကိဳက္သေလာက္ ပါႏိုင္တယ္လို ့အဓၶိပါယ္ရိွပါတယ္။

minOccurs

သူကေတာ့ maxOccurs နဲ ့ေၿပာင္းၿပန္ပါ။ XML Document ထဲမွာ element တစ္ခုဟာ အနည္းဆံုး ဘယ္ႏွယ္ ၾကိမ္ပါ၀င္ႏိုင္လဲဆိုတာကို သတ္မွတ္ေပးပါလိမ့္မယ္။ မရိွသံုးတန္ဖိုး (default value ) က 1 ပါ။

တကယ္လို ့ feature ဆုိတဲ့ element ေလးကို ေၾကညာခ်င္တယ္ဗ်ာ။ အ၀တ္အထည္ အတြက္ေပါ့။ အဲဒီမွာ အနည္းဆံုးအေနနဲ ့ feature ၂ ခု၊ အမ်ားဆံုးအေနနဲ ့ feature ၆ ခုကို ပဲ ရိွေစခ်င္တယ္ဆိုပါစို ့။ ဒါဆို-

<element name="feature" minOccurs="2" maxOccurs="6">


(ကၽြန္ေတာ္တို ့ Database နဲ ့တြဲသံုးတဲ့ အခါ၊ Database မွာ attribute(colum) ရဲ ့ value က allow null (တန္ဖိုး မထည့္လည္း ရတဲ့ column) ဆိုရင္၊ XML တြဲၿပီးအလုပ္လုပ္တဲ့ အခါ၊ minOccurs ကို 0 တန္ဖိုး ေပးလိုက္ ဒါဆုိ အဲဒီ element (tag) ကမပါလည္း ရသြားၿပီး။ ဟုတ္။)

nillable
ဒီဟာေလးကေတာ့ boolean တန္ဖိုး ၿဖစ္တဲ့ true နဲ ့ false တစ္ခုခုကို လက္ခံပါတယ္။ သူက ဘာကိုေၿပာသလဲ ဆိုေတာ့ element တစ္ခုဟာ ဘာမွမပါတာ(nillable)ကို လက္ခံလားမခံလားဆိုတာကိုပဲ။ လက္ခံတယ္ (true) ရင္ element တစ္ခုဟာ EMPTY element ၿဖစ္ႏိုင္ပါတယ္။

<part></part> (၀ါ) <part/> (empty element)


ref

သူကေတာ့ နည္းနည္း ရွဳပ္သလို ရိွတယ္။

ref စြမ္းရည္ၿပစကားလံုး (attribute) ေလးဟာ global ေၾကညာထားတဲ့ elemnt တစ္ခုကို ၿပန္ၿပီး ေတာ့ သံုးခ်င္တဲ့ အခါမွာ အသံုးၿပဳပါတယ္။ ဥမပါ ၾကည့္ရေအာင္ -

<xs:schema>
<xs:element name="full_name" type="xs:string"/>
<xs:element naem="supervisor">
<xs:complexType>
<xs:element ref="full_name"/>
</xs:complexType>
</xs:element>
<xs:element name="employee">
<xs:complexType>
<xs:element ref="full_name"/>
</xs:complexType>
</xs:element>
</xs:schema>


ဒီ ဥပမာေလးမွာ full_name element ေလးတစ္ခုကိုေၾကညာထားပါတယ္။ ပီးေတာ့ ref attribute ကို သံုးၿပီး ေတာ့ supervisor နဲ ့ employee element တို ့မွာ ၿပန္ညြန္းထားပါတယ္။ ဒီေနရာမွာဘာ ကအေရးၾကီးလဲဆို full_name ကို global scope မွာ ေၾကညာရတာပါပဲ။ ref ကို သံုးခ်င္ရင္၊ အသံုးခံရမယ့္ element ဟာ global ၿဖစ္ေစ၊ သံုးမယ့္ element နဲ ့ level တစ္ခုတည္းမွာၿဖစ္ေစရိွရပါမယ္။ အေပၚဥပမာဆိုရင္၊ full_name elemnt ဟာ (အနီေရာင္) ၿပန္ၿပီး reference လုပ္မဲ့ ဟာႏွစ္ခု (အစိမ္းေရာင္) တို ့ရဲ ့ အၿပင္ global scope မွာရိွ ေနတယ္။ ဟုတ္။ ေနာက္သတိၿပဳရမွာတစ္ခ်က္က ref ကို global ေၾကညာမယ့္ element မွာ မသံုးဘူးဆိုတာပါပဲ။ (အေပၚဥပမာဆိုရင္၊ full_name မွာ ref မသံုးထားပါ)

ဒါေၾကာင့္ သေဘားတရားအရ ေအာက္ပါဥပမာမ်ိဳး ကို လုပ္လို ့မရပါဘူး။

<xs:element>
<xs:element name="full_name" type="xs:string"/>
<xs:element ref="full_name" type="xs:string"/>
<xs:schema>


သေဘာေပါက္တယ္ဟုတ္ :D ။

ေလာေလာဆယ္ေတာ့... .
ဆက္ရန္။ (အားေသးဘူးဗ်ာ)။

အာေကလာ(akela)
Dec 04 , 2007 9:23 pm

Wednesday, November 28, 2007

XML Schemas
(XML သဒၵါ (၀ါ) XML အဓိပၸါယ္ သတ္မွတ္မွဳ) - အပိုင္း ( ၂ )

အပိုင္း ( ၁ ) ကို အရင္ဖတ္ၾကည့္ေစခ်င္ပါသည္။

Valid <element>  Attribute


XML Schema မွာ element တစ္ခုကိုေၾကညာမယ္ဆိုရင္ <element> ဆိုတဲ့ tag ကို အသံုးၿပဳရပါတယ္။ ဒီ တက္(ဂ္)ေလးကဘယ္ element ရဲ ့ အစမွာဆိုပါပါတယ္။ ဒီ <element> tag ေလးမွာ attribute လို ့ေခၚတဲ့ ဒီတက္ေလးဟာ နာမည္ဘယ္လိုေခၚေၾကာင္း၊ ဘာေဒတာအမ်ိဳးအစားၿဖစ္ေၾကာင္း၊ စသည္ၿဖင့္ ေၿပာၿပ ေပးမယ့္ စြမ္းရည္ၿပစကားလံုး (attribute) ေလးေတြရိွပါတယ္။ (ေအာက္မွာၾကည့္ပါ)

    - default
- fixed
- id
- maxOccurs
- minOccurs
- name
- nillable
- ref
- substitutionGroup
- type


ဟုတ္ပီလား။ ကၽြန္ေတာ္တို ့ တစ္ခုခ်င္းစီကို ၾကည့္ၾကရေအာင္။ ဒါမွ element ကိုေၾကညာတဲ့အခါ ဘယ္လိုတည္ေဆာက္လို ့ ရတယ္ဆိုတဲ့ structure ကို သိသြားမယ္။

name
ဒီ name ဆိုတဲ့ စြမ္းရည္ၿပ စကားလံုး (attribute) ေလးက XML document ဖိုင္တစ္ခုထဲ မွာရိွတဲ့ element တစ္ခုရဲ ့ နာမည္ကို သတ္မွတ္ေပးပါတယ္။ ဥပမာ - XML Schema မွာ ဒီလို ေရးထားတယ္ဆိုပါဆို ့။

<xs:element name="address"/>


ဒါဘာကိုေၿပာတာလည္းဆိုရင္ ဒီ Schema ကို သံုးမယ့္ XML document ထဲမွာသံုးႏိုင္တဲ့ <address> ဆိုတဲ့ tag ကို ေၾကညာလိုက္တာပါပဲ။ ဒီလို name ကိုတန္ဖိုး သတ္မွတ္ေပးတဲ့ အခါ (ဒီေနရာမွာ address ေပါ့) letter နဲ ့စရပါမယ္။ XML ဆိုတဲ့ စလံုးနဲ ့ ဒါမွမဟုတ္ သူနဲ ့ေပါင္းစပ္ထားတဲ့ စာလံုးနဲ ့ စလို ့မရပါဘူး။ ":" ကို namespace အတြက္ အသံုးၿပဳပီး၊ "_" ကို ေတာ့ သံုးႏိုင္ပါတယ္။
ိုု
defualt
ဒါေလးက string အမ်ိဳးအစား တန္ဖိုးတစ္ခုကို ကၽြန္ေတာ္တို ့့element ရဲ ့ မရိွသံုးတန္ဖိုး (default value) အၿဖစ္ထည့္ေပးပါတယ္။ ဒါေၾကာင့္ တကယ္လို ့ copyright element တစ္ခုကို ဒီလိုေရးခဲ့မယ္ဆိုရင္ -

<element name="copyright" default="Copyright 2008"/>


ဒါဆိုရင္ <copyright> လို ့ေခၚတဲ့ element တစ္ခုကို ဖန္တီးပီးေတာ့ အဲဒီ element မွာဘာတန္ဖိုး (value) မွ မထည့္ခဲ့ရင္ မရိွသံုးတန္ဖိုး (default value) အေနနဲ ့ Copyright 2008 ကိုယူသြားမွာၿဖစ္ပါတယ္။ ဥပမာ -

<copyright></copyright>  


ဒီလိုၿဖစ္ေနခဲ့ရင္ တန္းဖိုးမရိွေတာ့
Copyright 2008 သူရဲ ့တန္ဖိုး(value) အေနနဲ ့ယူသြားမွာၿဖစ္တယ္။ဒါနဲ ့ အတူတူပါပဲ။


<copyright>Copyright 2008</copyright> 


တကယ္လို ့ တန္းဖိုးရိွခဲ့တယ္ဆိုရင္ေတာ့ အဲဒီတန္ဖိုးကိုပဲယူပါတယ္။ မရိွသံုးတန္ဖိုး (default value) ကို မသံုးပါဘူး။

XML document file ကို ေရးတဲ့ သူက အဲဒီ element ကို တန္ဖိုး ထည့္ေပးေပးမေပးေပး မစဥ္းစားဘူး။ element တစ္ခုက တန္ဖိုး(value) တစ္ခုရိွကိုရိွရမယ္။ အဲဒီလို အခ်ိန္မ်ိဳးမွာ ဒီ default ေလးဟာ အလြန္အသံုးက်ပါတယ္။

fixed
ဒီဟာကေတာ့ string အမ်ိဳးအစား တန္ဖိုးတစ္ခုကို element ရဲ ့ တန္ဖိုးအၿဖစ္သတ္မွတ္ေပးလိုက္ပါတယ္။ သေဘာက XML Schema ဖိုင္မွာ ဒီလို ေၾကညာခဲ့မယ္ဆိုရင္ -

<xs:element name="info" fixed="For Information No 001"/>


ဟုတ္ပီ။ ဒါဆိုရင္ XML Document ဖိုင္ထဲမွာ <info> ဆိုတဲ့ tag ရိွမယ္ေပါ့။ အဲဒီ tag ေလးဟာ
For Information No 001 ဆိုတဲ့ တန္ဖိုး(value) ပါကိုပါရမယ္။

<info>For Information No 001</info>


XML Document ဖိုင္ကို ေရးတဲ့ သူကို တန္ဖိုး(value) မေၿပာင္း ေစခ်င္ဘူးဆိုရင္
ဒီ fixed စြမ္းရည္ၿပစကားလံုး (attribute) ကို သံုးပါတယ္။ Schema မွာ ေၾကညာထားတဲ့ တန္ဖိုး (ဒီေနရာမွာ Information No 001) ကို သံုးကိုသံုးရပါတယ္။ XML Document ဖိုင္ကေန ေၿပာင္းလို ့မရပါဘူး။

ဆက္ရန္။

အာေကလာ(akela)
Nov 28 , 2007 1:00 am

Tuesday, October 23, 2007

XML Schemas
(XML သဒၵါ (၀ါ) XML အဓိပၸါယ္ သတ္မွတ္မွဳ) - အပိုင္း ( ၁ )

Document Type Definition (DTD) ဟာ တခ်ိဳ ့ စြမ္းေဆာင္ခ်က္ေတြကို ရယူေပးဖို ့အတြက္ အကန္ ့အသက္ရိွေပမယ့္ XML ရဲ ့သဒၵါ (Schema) ကို ေဖာ္ၿပဖို ့ အတြက္ တကယ္ကို ေကာင္မြန္တဲ့ နည္းလမ္းတစ္ခုပါပဲ။ DTD ဟာ အေမြဆက္ခံၿခင္း (inheritance)၊ နယ္နိမိတ္သတ္မွတ္္ၿခင္း (scoping) တုိ ့ကို ခြင့္မၿပဳပါ ဘူး။ ဒါအၿပင္ ေဒတာ အမ်ိဳးအစားသတ္မွတ္ၿခင္း (datatyping) ကိုလည္း DTD နဲ ့လုပ္လို ့မရပါ။ DTD က ခြင့္မၿပဳေပမယ့္ ဒီ ကိစၥေတြဟာ XML ဒီဇိုင္းအတြက္ အသံုး၀င္တဲ့ အရာေတြပါ။ ဒါေၾကာင္း XML Schema မွာေတာ့ ဒါေတြကို လုပ္ေဆာင္ႏိုင္ေအာင္ ထည့္သြင္း တည္ေဆာက္္ခဲ့ပါတယ္။

XML Schemas ဆိုတာ သူတို ့ကိုယ္ႏိွက္က well-formed XML ေတြပါပဲ။ ဒါဟာ XML Schemas ရဲ ့ အေတာ္ကို ၾကီးမားတဲ့ အားသာခ်က္တစ္ခုပါပဲ။
ရိုးရွင္းတဲ့ XML Schema တစ္ခုကို ၾကည့္ရေအာင္။

<?xml version=”1.0” encoding=”utf-8” ?>
<xs:schema xmlns:xs = “http://www.w3.org/201/XMLSchema”>
<xs:element name=”Occupation” type=”xs:string”/>
</xs:schema>


ဒါဟာ အလြန္ရိုးရွင္းတဲ့ schema တစ္ခုပါပဲ။ ဒီ schema က Occupation ဆိုတဲ့ element တစ္ခုကို သတ္မွတ္ေပးပါတယ္။ အဲဒီ element ရဲ ့ ေဒတာ အမ်ိဳးအစားက string ပါ။


<?xml version=”1.0” encoding=”utf-8” ?>


ပိုၿပီး အေသးစိတ္ၾကည့္ရေအာင္။ ဒါက XML ေၾကညာတာပါပဲ။ ဒီဟာေလးဟာ ဘယ္ XML ဖိုင္ တိုင္းရဲ ့ အစမွာမဆို ပါေလ့ရိွပါတယ္။ သူက အသံုးၿပဳမယ့္ application ကို XML ဖိုင္ၿဖစ္ေၾကာင္း 1.0 XML Recommendation ေပၚမွာ အေၿခၿပဳထားေၾကာင္း၊ UTF-8 character encoding ကို သံုးထားေၾကာင္း စသည္တိုကို သိေစပါတယ္။ (XML schema ဟာ XML ပဲဆိုတာကို မေမ့ပါနဲ ့ဦး။) ဒီလို တူတဲ့ အတြက္ parser တစ္ခုတည္းကို XML document ကိုေရာ schema အတြက္ကိုေရာ အသံုးၿပဳႏိုင္ပါတယ္။

ထပ္ၾကည့္မယ္ဆိုရင္ ဒီလို ေတြ ့ပါလိမ့္မယ္။

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


ဒီအေၾကာင္းေလးက xs (အနီေရာင္ႏွင့္ၿပထားသည္။) ဆိုတဲ့ Namespace ကို သတ္မွတ္ေပးပါတယ္။ ဒီမွာသံုးထားတဲ့ xs ဆိုတာ http://www.w3.org/2001/XMLSchema ရဲ ့ xs ပါတဲ့ ။

ဒါကလဲ အေရးၾကီးပါတယ္။ သူက ေနာက္ပိုင္းကၽြန္ေတာ္တို ေၿပာဆိုေဆြးရမယ့္ နယ္နိမိတ္သတ္မွတ္္ၿခင္း (scoping) နဲ ့ ဗားရွင္းသတ္မွတ္ၿခင္း (versioning) တိုကို ၿဖစ္ေစပါတယ္။

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


ဒါကေတာ့ ကၽြန္ေတာ္တို ့ရဲ ့ Schema ကုိသံုးၿပီး element တစ္ခုကို ေၾကညာလိုက္တာပါပဲ။
ဒီေနရာက xs:element ဆိုတာမွာ xs က အေပၚက ကၽြန္ေတာ္တို ့ေၾကညာခဲ့တဲ Namespace ကိုယူသံုးလိုက္တာပါ။ သူက programmer ဆိုတဲ့ element တစ္ခုကို ေၾကညာေၾကာင္း၊ အဲဒီ element ရဲ ့ ေဒတာအမ်ိဳးအစား က string ၿဖစ္ေၾကာင္းတို ့ကို ေၿပာၿပပါတယ္။ ဒီေနရာမွာ type ကေလးက XML Schema မွာ အေရးၾကီးတဲ့ attribute ေလးပါပဲ။ သူက ေဒတာအမ်ိဳးအစားသတ္မွတ္ၿခင္း (datatyping) ကို လုပ္ေပးတယ္ေလ။

ဆက္ရန္။

ရည္ညြန္း။ ။ Using XML by David Gulbransen, et al.

အာေကလာ(akela)
Oct 23 , 2007 7:51 pm