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


Tuesday, August 21, 2007

Scope in JavaScript (part 4)
(JavaScript ????????? ????????? ????????) - ??????? ?

(??????? ? ? ? ????? ? ??? ????????????????????????)


.bind() ???????? ? ???


????????????? apply() ? call() ??? ? ?? ? ???????????????????????????? ?????????? .bind() ?????????? ????????? ????? ?????????? function ?? ? ??????(reference) ???? ???? (return) ????????????????????????????? ?????????????? ???????????? ??? ???????????????? ??????? ????????????? ?????????????????


<script type="text/javascript">
var _president = {
_answer: "I am the president"
};
var _secaretary = {
_answer: "I am the secaretary of president"
};

function aboutMe(greetingWord) {
return greetingWord + " " +this._answer;
}

Function.prototype.bind = function(obj) {
var method = this,
temp = function() {
return method.apply(obj, arguments);
};

return temp;
}
var whatTheysays;

whatTheysays = aboutMe.bind (_president, ["Hello My Country,"]); // "Hello My Country, I am the president"
alert(whatTheysays);

whatTheysays = aboutMe.bind (_secretary, ["Hello My Officer,"]); // "Hello My Officer, I am the secretary of president"
alert(whatTheysays);
</script>


???????????? ? bind() ??? Function object ?? ? prototype propety ??? ???????? ?????????????? ???? ???????????? ? ?????????? ? ?????? (method) ??????? ??? ?????????????????????? aboutMe.bind(_president) ????????? ?????? Javascript ? bind() ??????????? execution context ???????? ???????????? ???????? this ??? ???? aboutMe ??? ??????????????? ????? ??? prarmeter ??????? obj ??? _president ?????????????????? ??????????????? :D?

???? ????? ? ???????? method ??? ?????? ??????????? method ????? this ??? ???????? ???????? ???? this ? aboutMe() ??? ????? ???????? ?????????? function ??? ?????????????????? ???????????????????? method ??? scope chain ??????? ???? ???????????? ????????? this ??? ??????? ? ???????? ??????? function ???? ??? ????????? ????????? this ? ???? ????? ???????? (local context) ?????????????? aboutMe() ??????????????? ??????? function ?? ????????? ???????? ??????????????

??????????????????? ?? ????????? temp ? closure (????????????????????? ????????????????) ????? bind() ??? ??????? ? ???? (return ) ?????????? aboutMe ??? _president object ???????? ?????????????????? ?????? ????????? ????? execution context ??? ??????????? ? ??????? ???????????? ???????????????????

??? ???????????? ? event handler ????? ????????????? ??????????????????? :D ? ????? ???????? ????? event handler ??? ????? ????????????????


<script type="text/javascript">

var the_button;
function aboutMe(answer)
{
this._answer = answer;
this.tell = function() {
alert(this._answer);
}
}
Function.prototype.bind = function(obj) {
//alert(this + 'this in bind');
//alert(arguments[0].the_answer);
var method = this,
temp = function() {
return method.apply(obj, arguments);
};

return temp;
}

function addhandler()
{
var _president = new aboutMe(“I am the president.”),
var the_button = document.getElementById('thebutton');
the_button.onclick = _ president.tell();
//alert(this + ' this in addhandler');
the_button.onclick = _president.tell.bind(_president);
}
</script>

……
……

<BODY onload="javascript:addhandler();" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#800000" ALINK="#FF00FF" BACKGROUND="?">
<button ID="theButton">Click Me</button>
</BODY>
</HTML>


??? html ??? body ?? ? onload ??? addhandler() ??? ???? ?????????????????????????

????? ?????????????????????????.?

?????????????????? ????????


??????(akela)
Augest21, 2007 12:11 pm