Friday, April 29, 2016

XML DTD

DTD ဆိုတာ Document Tags Definition ကိုအတိုကောက်ခေါ်ဆိုခြင်းဖြစ်ပါတယ်။ XML document ထဲမှာ ဘယ် elements တွေပါရမယ်ဆိုတာကို သတ်မှတ်ပေးတာဘဲဖြစ်ပါတယ်။ တနည်းပြောရရင် XML Document တစ်ခုကို rule သတ်မှတ်ပေးတာဘဲဖြစ်ပါတယ်။ (XML document တစ်ခု valid ဖြစ်၊မဖြစ် DTD ကိုအသုံးချပြီးတော့ ဆုံးဖြတ်နိုင်ပါတယ်။)


DTD Example
<! DOCTYPE Person [
<! ELEMENT Person (Name+) >
<! ELEMENT Name (CDATA) >
]>
view raw DTD_Example.xml hosted with ❤ by GitHub

[ ] tag ထဲမှာ အသုံးပြုမယ့် elements တွေမှန်သမျှကို ကြေညာထားပေး ရပါတယ်။ ကြေညာထားတဲ့ Element Tag တွေကို attributes တွေသတ်မှတ်ပေးတာ၊ content values တွေကို သတ်မှတ်ပေးတာ စသည်တို့ကို special character တွေကိုအသုံးပြုပြီးတော့ ကြေညာပေးနိုင်ပါတယ်။ (Limitation ပေးနိုင်ပါတယ်)      အရင်ဆုံး တွေ့ရတဲ့ Person ဆိုတာကတော့ Root element ဘဲဖြစ်ပါတယ်။ Person tag ထဲမှာ ထည့်လို့ရတာကတော့ Name tag တစ်ခုတည်းဘဲဖြစ်ပါတယ်။ <Name></Name> ။ Name tag မဟုတ်သောအခြားသော tag တွေကိုထည့်သွင်းလို့ရမှာမဟုတ်ပါဘူး။ ဘာလို့လည်းဆိုရင် DTD ထဲမှာ ကြေညာထားတာက Person tag ထဲမှာ Name tag ထဲရှိရမယ်ဆိုတာကြောင့်ပါ။ (Rule သတ်မှတ်ပေးထားတာပေါ့)  Name နောက်မှာပါတဲ့ + sign က တော့ အနည်းဆုံး တစ်ကြိမ်ပါရမယ် ကိုဆိုလိုပါတယ်(One or More) ။ Person tag ထဲမှာ ဘာ tag  မှမပါဘဲ တော့ မဖြစ်ရဘူး ၊ Name tag တစ်ခုတော့ အနည်းဆုံးပါနေရပါမယ်။

Valid XML Document
<? Xml version="1.0" encoding="UTF-8"?>
<Person>
<Name></Name>
</Person>
Invalid XML Document
<? Xml version="1.0" encoding="UTF-8"?>
<Person>
</Person>


Name (CDATA) ဆိုတာက တော့ Name tag ထဲမှာပါဝင်ရမယ့် data type အမျိုးအစားကို သတ်မှတ်   ပေးခြင်းဖြစ်ပါတယ်။ Data Type နှစ်မျိုးရှိပါတယ်။ တစ်ခုက CDATA နှင့် ကျန်တစ်ခုကတော့ PCDATA တို့ဘဲဖြစ်ပါတယ်။ CDATA ကတော့ ကြိုက်တဲ့ character data ဖြစ်လို့ရတယ်။ ဒါပေမဲ့ nested element tag တွေကိုတော့ လက်မခံဘူးပေါ့။ ဥပမာမှာဆိုရင် Name tag ထဲမှာအခြားသော element tag ထပ်ထည့်လိုရမှာမဟုတ်ပါဘူး။

CDATA Example
<? Xml version="1.0" encoding="UTF-8"?>
<Person>
<Name>Mg Mg</Name>
</Person>


DTD မှာ attribute value ကိုသတ်မှတ်ပေးခြင်ရင်တော့
            
<! ATTLIST Element_name  Attribute_name  attribute_type  default_value >

ပုံစံကြေညာပေးရပါတယ်။ ဥပမာမှာ Gender ကို Attribute တစ်ခုအနေနှင့်ထည့်ပြပါမည်။

XML Document with Attribute
<! DOCTYPE Person [
<! ELEMENT Person (Name+) >
<! ELEMENT Name (CDATA) >
<! ATTLIST Name Gender (Male | Female) "Male">
]>
view raw attribute.xml hosted with ❤ by GitHub

Name tag မှာ Gender attribute ကိုထည့်သွင်းခြင်းဖြစ်ပါတယ်။ ( ) ထဲမှာကတော့ attribute value တွေကိုကြေညာပေးထားပါတယ်။ Gender Attribute က Male value ဒါမှမဟုတ်၊ Female value ဘဲရှိမယ် ဆိုတာကို သတ်မှတ်ပေးထားတာပါ။ "" ထဲမှာကတော့ default value ဘဲဖြစ်ပါတယ်။


XML Document with Internal DTD

<! DOCTYPE Person [
<! ELEMENT Person (Name+) >
<! ELEMENT Name (CDATA) >
<! ATTLIST Name Gender (Male | Female) "Male">
]>
<? Xml version="1.0" encoding="UTF-8"?>
<Person>
<Name Gender="Male">Mg Mg</Name>
</Person>

XML Document with External DTD

   DTD ကို *.dtd  ပုံစံဖြင့် save ပြီး XML Document ကနေ Link ချိတ်အသုံးပြုနိုင်ပါတယ်။

<? Xml version="1.0" encoding="UTF-8"?>
<! DOCTYPE Person SYSTEM "Person.dtd"
<Person>
<Name Gender="Male">Mg Mg</Name>
</Person>
အခုဆိုရင် DTD ကို အနည်းအငယ် သိရှိသွားမည်ဖြစ်ပါတယ်။ DTD ကိုသုံးတဲ့အခါမှာ အားသာချက်၊ အားနည်းချက်တွေရှိပါတယ်။ အားသာချက်ကတော့ XML Document ကို valid စစ်ပေးနိုင်ခြင်း၊ အားနည်းချက်ကတော့ XML Parser ကို second syntax ဖြစ်ပေါ်စေခြင်းတို့ဘဲဖြစ်ပါတယ်။ ပြီးတော့ namespace   ကိုလည်း support မပေးပါဘူး။