XMLရဲ့ Tagများသည် အချက်အလက်တွေရဲ့အဓိပ္ပါယ်များနှင့်၊ ထူးခြားချက်များကိုဖော်ပြပေးနိူင်ပါသည်။ ယခင်အခန်းများတွင် ဖော်ပြပြီးခဲ့သလို XMLသည်အချက်အလက်များကို ဖော်ပြရန်အတွက် Tagများကို လွတ်လပ်စွာ အသုံးပြုနိူင်ပေ၏။ ထို့အတွက် HTMLကဲ့သို့ ပိုင်ဆိုင်တဲ့Tagတွေအသီးသီးကို မည်သို့ဖော်ပြမည် ဆိုသည်ကို ကြိုတင်သတ်မှတ်ထားခြင်းမရှိပေ။သို့ရာတွင် XMLအချက်အလက်များကို ပြင်ဆင်ပြီးလှပစွာ ပုံဖော်လိုကြမည် မဟုတ်ပေလော။ XMLရဲ့ အချက်အလက်များကို ဘယ်လိုစည်းမျဉ်းဖြင့် ပုံစံဖော်မည်ဆိုသည့် လုပ်ဆောင်ချက်သည် လိုအပ်လာပေသည်။ ထိုတာဝန်များကို ထမ်းဆောင်ပေးနေသည်မှာ XSL ဖြစ်ပေသည်။ XSLဆိုသည်မှာ Extensible Style sheet Languageရဲ့အတိုကောက်အခေါ်အဝေါ် ဖြစ်ပြီး၊ XMLစာပိုဒ်များ၏ Styleကိုသတ်မှတ်ပေးနိူင်သော ပညာရပ်တစ်ခု ဖြစ်၏။
XSLသည် XMLရဲ့တည်ဆောက်ပုံကို ပြောင်းလည်းပေးသော XSLT (XSL Transformations)၊ XMLစာပိုဒ် များ၏ အစိတ်အပိုင်းအတိအကျကို ရှာဖွေနိူင်သော XPath (XML Path Language) နှင့်၊ အမြင်ပိုင်း ဆိုင်ရာ Styleကိုဖော်ပြပေးနိူင်သော XSLFO (XSL Formatting Objects) အစရှိသည့် နည်းပညာရပ်များဖြင့် ဖွဲ့စည်း ထားပါသည်။ XSL၏XSLFOသည် HTML၏CSSကဲ့သို့ နေရာတွင်တည်ရှိပေသည်။ ဤတတိယခြေလှမ်းတွင် XSLTကိုအသုံးပြု၍၊ XMLအချက်အလက်များကို Web Browser များတွင် ဖော်ပြနည်း များကို တင်ပြသွားမည် ဖြစ်သည်။ သို့ရာတွင် XSLFOမှာ CSSဖြင့်အစားထိုးအသုံးပြုနိူင်သဖြင့် ဤအခန်းတွင် အကျဉ်းချံုး ဖော်ပြသွားမည် ဖြစ်သည်။
XSLရဲ့အခြေခံသဘောတရား
XSLသည် XMLစာပိုဒ်များကို XSLအသုံးပြုတဲ့Fileအပေါ်မှုတည်ပြီး XSL processorက တည်ဆောက်ပုံကို ပြောင်းလည်းပေးခြင်းအားဖြင့် အခြားသောဖွဲ့စည်းပုံအချက်အလက်များ အဖြစ်ပြောင်းလည်းပေးနိူင်ပါသည်။ ဥပမာ အားဖြင့် XMLစာပိုဒ်အား HTMLသုံးXSLကိုအသုံးပြုပါက HTMLအချက်အလက်အဖြစ် ပြောင်းလည်းပေးနိူင်သလို၊ PDFသုံးXSLကိုအသုံးပြုပါက PDFအချက်အလက်များအဖြစ် ပြောင်းလည်းပေးနိူင်ပါသည်။
XSL Processorသည်အတော်များများသော Internet Exploreတွင် ပါရှိပါသဖြင့်၊ ဤအခန်းတွင်ဖော်ပြသော နမှုနာများကို Internet Exploreကိုအသုံးပြု၍ လက်တွေ့လေ့လာသွားမည်ဖြစ်သည်။
XPath
XPath သည်XSLမှ XMLစာပိုဒ်အတွင်းမှ အချက်အလက်များ၏ နေရာအတိအကျကို ဆက်သွယ်ရာတွင် အသုံးပြုရာတွင် အသုံးပြုသောစနစ်တစ်ခုဖြစ်၏။ XPathမပါဝင်ပဲ XSLကိုအသုံးပြုနိူင်မည် မဟုတ်ပေ။XPath သည်လည်း XMLကဲ့သို့ပင် သစ်ပင်ဖွဲ့စည်းပုံဖြင့် တည်ဆောက်ထားပါသည်။ XMLနှင့် ကွာခြားသည်မှာ Elementအဆင့်မဟုတ်ပဲ၊ Nodeအဆင့်ဖြင့် သစ်ပင်ဖွဲ့စည်းပုံကို ဖွဲ့စည်းထားခြင်းဖြစ်သည်။
Diagram 3.2.1
Nodeအမျိုးအစားများ
Xpathတွင်XML၏ Element, Attributeနှင့်တန်ဖိုးများကို သီးခြားNodeတွေအဖြစ် သတ်မှတ် ထားပေသည်။ Nodeအမျိုးအစားများကို အောက်ပါအတိုင်း၄မျိုးခွဲခြား ထားပါသည်။
Root Node
XMLစာပိုဒ်များတွင် မရှိမဖြစ်လိုအပ်သော တစ်ခုတည်းသော Nodeဖြစ်ပြီး၊ သစ်ပင်ဖွဲ့စည်းပုံ ၏ပင်မနေရာတွင်တည်ရှိသော Nodeဖြစ်ပါသည်။ အမြဲတမ်း / ဟုဖော်ပြလေ့ရှိပြီး၊ Node တွေအားလုံး၏ ပင်မြစ်ဖြစ်ပေသည်။ Root Node၏အောက်တွင် အမြဲတမ်းRoot Element တစ်ခုတည်ရှိပေမယ့် ထိုElementနှင့် Root Nodeတို့သည် သီးခြားNodeများဖြစ်ကြ ပါသည်။
Element Node
XMLစာပိုဒ်များ၏ Elementအမည်တွင် နေရာကျပေလိမ့်မည်။ အထက်ပါဥပမာတွင် company, employee, name, branchအစရှိသည့် Nodeများသည် Element Nodeများ ဖြစ်ကြပါသည်။
Attribute Node
XMLစာပိုဒ်များ၏ Attributeများ၏နေရာတွင် တည်ရှိပေသည်။ အထက်ပါဥပမာတွင် Age သည် Attribute Nodeဖြစ်၏။
Text Node
XMLစာပိုဒ်များ၏ Text Valueများသည် Text Nodeများဖြစ်ကြ၏။
Nodeတစ်ခု၏တည်နေရာ
Xpathတွင်Nodeတစ်ခုရဲ့ အချက်အလက်ကိုဆက်သွယ်အသုံးပြုနိူင်ရန် ထိုNodeရဲ့ တည်နေရာ ကို ဖော်ပြပေးဖို့လိုအပ်ပါသည်။ Nodeတစ်ခု၏နေရာကိုဖော်ပြရာတွင် Nodeတစ်ခုနှင့် တစ်ခု အကြား / ကိုကြားခံ၍ ဖော်ပြရပါမည်။ ထိုသို့ဖော်ပြချက်ကို နေရာဖော်ပြချက်(Location Path) ဟု ခေါ်ပါသည်။ Nodeတစ်ခု၏ တည်နေရာကိုဖော်ပြပုံမှာ ၂မျိုးခွဲခြားနိူင်ပါသည်။ XMLစာပိုဒ် တစ်ခုလုံး၏ နေရာအတိအကျကိုဖော်ပြပေးသော အတိအကျနေရာ(Absolute Location Path )နှင့်၊ လက်ရှိNodeမှ၊ ရောက်ရှိလိုသောNodeကိုညွှန်ပြသော နှိုင်းယှဉ်နေရာ (Relative Location Path)ဟူ၍ရှိပေသည်။
အတိအကျနေရာ (Absolute Location Path)
Root Nodeနေရာမှ ဆက်သွယ်လိုသောNodeအထိလမ်းကြောင်းကို အတိအကျနေရာဟု ခေါ်ပါသည်။ Diagram 3.2.1တွင် name Node၏အတိအကျနေရာ ဖော်ပြချက်မှာအောက်ပါ အတိုင်းဖြစ်သည်။
/company/employee/name
နှိုင်းယှဉ်နေရာ (Relative Location Path)
Nodeတစ်ခုမှ အခြားသောNodeတစ်ခု၏ နေရာကိုနှိုင်းယှဉ်၍ ဖော်ပြရာတွင်အသုံးပြု ပါသည်။ Node၏အပေါ်တွင်ရှိသောNodeကို Parent Node ဟုခေါ်ပြီး၊ အောက်တွင်ရှိသော Nodeကို Child Node ဟု ခေါ်ပါသည်။သား၏သားNode များသည် Grand Child Node များဖြစ်ကြပါသည်။ ဤကဲ့သို့အခေါ်အဝေါ်များကို XPath Axesဟုခေါ်ပါသည်။
အမည် | အသုံးပြုပုံများ |
ancestor | ကိုယ့်၏အထက်မှNodeများ |
ancestor-or-self | ကိုယ်နှင့်ကိုယ့်၏အထက်မှNodeများ |
attribute | ကိုယ်ပိုင်ဆိုင်သောAttribute Nodeများအားလုံး |
child | ကိုယ်၏သားအဆင့်ရှိChild Nodeများအားလုံး |
descendant | ကိုယ်၏အောက်မှNodeများ |
descendant-or-self | ကိုယ်နှင့်ကိုယ်၏အောက်မှNodeများ |
following | ကိုယ်၏အနောက်မှရှိသောNodeများအားလုံး |
following-sibling | ကိုယ်၏အနောက်မှမိဘတူညီသောညီအကိုNodeများအားလုံး |
parent | ကိုယ်၏အထက်တွင်ရှိသောမိဘNode |
preceding | ကိုယ်၏အရှေ့မှ Nodeများအားလုံး |
Preceding-sibling | ကိုယ့်ရှေ့မှမိဘတူညီသောညီအကိုNodeများအားလုံး |
self | ကိုယ်ကိုတိုင် |
တဖန်XPathတွင် အတိုကောက်စာလုံးများကိုလည်း အသုံးပြုနိူင်ပေသည်။ အသုံးပြုနိူင် သော အတိုကောက်စာလုံးများမှာ အောက်ပါအတိုင်းဖြစ်ပါသည်။
အတိုကောက် | သက်မှတ်နိူင်သော Node များ |
Node name | |
/ | root |
// | descendant-or-self |
. | self |
.. | parent |
@ | Attribute |
Diagram3.2.1၏ ဥပမာကိုကြည့်ပါ။ လက်ရှိNodeသည် companyဖြစ်မည်ဆိုလျှင် Name Nodeကိုဖော်ပြရာတွင် အောက်ပါအတိုင်းရေးသားနိူင်ပါသည်။
employee/name
သို့မဟုတ်
//name
အမည်တူNodeများ
အကယ်၍လက်ရှိNode၏အောက်တွင် အမည်တူNodeများတည်ရှိပါက အောက်ပါအတိုင်း ဖော်ပြရပါမည်။
Node ၏အမည် [နံပါတ်]
Diagram3.2.1၏ company nodeတွင် child nodeနှစ်ခုရှိပါသည်။ ဥပမာအားဖြင့် မင်းလွင် အမည်ရှိသော Node သည် employee [1] ဖြစ်၍၊ စည်သူဟုအမည် nodeကိုပိုင်ဆိုင်သော node သည် employee [2]ဖြစ်သည်။
အခြားသော ပရိုဂရမ်ဘာသာရပ်များကဲ့သို့ 0မှအစမပြုသည်မှာ သတိထားစရာအချက် တစ်ခုဖြစ်သည်။
XSLT (XSL Transformation)
XMLစာပိုဒ်တစ်ခု၏ အချက်အလက်များကို ဘယ်လိုပုံစံဖြင့်ဖော်ပြပါမည်ဆိုတဲ့ အချက်အလက်များကို ရေးသားထားခြင်းကို Style Sheet ဟုခေါ်ပါသည်။ ထိုStyle Sheet၏ File Typeသည် .xslဟုရေးသားဖို့လိုအပ် ပါသည်။ သို့ရာတွင် Style Sheetကိုယ်တိုင်လည်း XMLရေးသားပုံအတိုင်း ရေးသားထားခြင်းဖြစ်ပါသည်။ ဦးစွာလက်တွေ့ရေးသားကြီးပြီး ဘယ်လိုရေးသားရသည်ကို ရှင်းလင်းသွားပါမည်။
book.xml
<?xml version="1.0" encoding=”UTF-8” ?> <?xml-stylesheet href="book.xsl" type="text/xsl"?> <book-list> <book> <name>Head First Java</name> <price>$ 25.00</price> </book> <book> <name>Effective Java</name> <price>$ 42.09</price> </book> <book> <name>Head First Design Patterns</name> <price>$ 29.00</price> </book> </book-list>
အထက်ပါ book.xmlတွင်အသုံးပြုသော Style Sheetသည်အောက်ပါ book.xslဖြစ်၏။
book.xsl
<?xml version=”1.0” encoding=”UTF-8” ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:template match="/"> <html> <body> <table border="1"> <tr><th>Book Name</th><th>Book Price</th></tr> <xsl:apply-templates select="booklist/book" /> </table> </body></html> </xsl:template> <xsl:template match="book"> <tr> <td><xsl:value-of select="name" /></td> <td align="right"><xsl:value-of select="price" /></td> </tr> </xsl:template> </xsl:stylesheet>
အထက်ပါ book.xmlကို Internet Exploreဖြင့် ဖွင့်ကြည့်မည်ဆိုလျှင် အောက်ပါအတိုင်းတွေ့မြင်ရပေမည်။
XSLT (XSL Transformation)
XMLစာပိုဒ်တစ်ခု၏ အချက်အလက်များကို ဘယ်လိုပုံစံဖြင့်ဖော်ပြပါမည်ဆိုတဲ့ အချက်အလက်များကို ရေးသားထားခြင်းကို Style Sheet ဟုခေါ်ပါသည်။ ထိုStyle Sheet၏ File Typeသည် .xslဟုရေးသားဖို့လိုအပ် ပါသည်။ သို့ရာတွင် Style Sheetကိုယ်တိုင်လည်း XMLရေးသားပုံအတိုင်း ရေးသားထားခြင်းဖြစ်ပါသည်။ ဦးစွာလက်တွေ့ရေးသားကြီးပြီး ဘယ်လိုရေးသားရသည်ကို ရှင်းလင်းသွားပါမည်။
book.xml
<?xml version="1.0" encoding=”UTF-8” ?> <?xml-stylesheet href="book.xsl" type="text/xsl"?><book-list><book><name>Head First Java</name><price>$ 25.00</price></book><book><name>Effective Java</name><price>$ 42.09</price></book><book><name>Head First Design Patterns</name><price>$ 29.00</price></book></book-list>
အထက်ပါ book.xmlတွင်အသုံးပြုသော Style Sheetသည်အောက်ပါ book.xslဖြစ်၏။
book.xsl
<?xml version=”1.0” encoding=”UTF-8” ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" ><xsl:template match="/"> <html> <body> <table border="1"> <tr> <th>Book Name</th> <th>Book Price</th> </tr> <xsl:apply-templates select="booklist/book" /> </table> </body> </html> </xsl:template> <xsl:template match="book"> <tr> <td><xsl:value-of select="name" /></td> <td align="right"> <xsl:value-of select="price" /> </td></tr> </xsl:template></xsl:stylesheet>
အထက်ပါ book.xmlကို Internet Exploreဖြင့် ဖွင့်ကြည့်မည်ဆိုလျှင် အောက်ပါအတိုင်းတွေ့မြင်ရပေမည်။
Style Sheet ကိုထည့်သွင်းအသုံးချခြင်းအောက်ပါအတိုင်းတွေ့မြင်ရပေမည်။
အထက်ပါ book.xml၏ ဒုတိယမြောက်စာကြောင်းသည် XMLစာပိုဒ်အတွင်းတွင် XSLကိုအသုံးပြုပါမည် ဟုသတ်မှတ်ချက်ပေးနေခြင်းဖြစ်ပါသည်။ ထိုစာကြောင်းကိုရေးသားခြင်းအားဖြင့် XMLစာပိုဒ်တွင် အသုံးပြုမည့် Style Sheet ကိုသတ်မှတ်ပြီး ဖြစ်စေပါသည်။ ရေးသားပုံမှာအောက်ပါအတိုင်းဖြစ်ပါသည်။
Style Sheet အတွင်းမှရေးသားချက်များ
တဖန် Style Sheet ဖြစ်တဲ့ book.xslကိုလေ့လာကြည့်ကြပါဆို့။ xslသည်လည်း XMLစာပိုဒ်တစ်မျိုးဖြစ်သည့် အတွက် ပဋ္ဌမစာကြောင်းသည် XML Declaration ဖြစ်ပါသည်။ ဒုတိယစာကြောင်းမှစ၍ XML Instance ဖြစ်ပြီး stylesheet Tagဖြင့် အစပြုထားပေသည်။
Namespace Uri အဖြစ် http://www.w3.org/1999/XSL/Transform ကိုအသုံးပြုပြီး၊ prefix အဖြစ် xslကို အသုံးပြုထားပါသည်။ ထိုစာကြောင်းသည် XSLTကိုရေသားရာတွင် မရေးမဖြစ်ရေးသားရမည်ဖြစ်၏။ တနည်း ဆိုသော် Stylesheet Element သည် XSLT၏ Root Elementအဖြစ် မရှိမဖြစ်လိုအပ်ပါသည်။ ထိုမှတဆင့် ရေးသားလိုသော Style ကို Child Elements များအတွင်း ရေးသားရမည်ဖြစ်သည်။
1. Template Rule
စာကြောင်း နံပါတ်၃မှ ၁၇အထိသည် Template စည်းမျဉ်း များဖြစ်ကြ၏။ Template စည်းမျဉ်း ဆိုသည်မှာ XML၏အပိုင်းတစ်ခုကို ဘယ်လိုပုံစံပြောင်းရမည်ဟု သက်မှတ်ထားသော စည်းကမ်းများ ဖြစ်ကြ၏။ စာကြောင်းနံပါတ်၃သည် root nodeရဲ့ဖော်ပြပုံပုံစံကို သတ်မှတ်နေ၏။ တဖန်စကြောင်း ၁၂မှစ၍ book node၏ ဖော်ပြပုံဖြစ်၏။ Template Rule Tag၏ရေးသားပုံမှာ အောက်ပါအတိုင်းဖြစ်၏။
book.xsl၏ စာကြောင်းနံပါတ်၈ကို ကြည့်ပါ။ ထိုစာကြောင်းတွင် booklist/book Elementအတွက် Template Ruleကို အသုံးပြုနေပါသည်။
ဤစာကြောင်းသည် Root Node ၏ Templateစည်းမျဉ်း အတွင်းရေးသားထားပါသဖြင့် Root Nodeကို Context Nodeအဖြစ်အသုံးပြုပြီး အသုံးပြုမည့် Nodeများ ကို ရည်ညွှန်း၍ဖော်ပြရပါသည်။
<xsl:apply-templates select="booklist/book">
Book Elementl၏ Templateစည်းမျဉ်းများသည် စာကြောင်း၁၂မှ ၁၇အထိရေးသားထားပြီး XSLTက HTMLအဖြစ် ပုံစံပြောင်းလိုက်သောအခါ အောက်ပါအတိုင်းပြောင်းလည်းသွားမည် ဖြစ်သည်။
<xsl:template match="/"> <html> <body> <table border="1"> <tr><th>Book Name</th><th>Book Price</th></tr> <!-- ဤနေရာမှ Book Node၏ Template စည်းမျဉ်းတွင်သတ်မှတ်ထားသည့်အတိုင်းဖြစ်၏ --> <tr> <td><xsl:value-of select="booklist/book/name" /></td> <td><xsl:value-of select="booklist/book/price" /></td> </tr> </table> </body></html> </xsl:template>
book.xml ၏ Book Nodeများအား အထက်ပါစည်းမျဉ်းအတိုင်း ပုံစံပြောင်းပေးမည် ဖြစ်သည်။ book.xml၏ စာအုပ်၃အုပ်လုံးသည် အထက်ပါစည်းမျဉ်းအတိုင်းပုံစံပြောင်း နေသည်ကို ကြည့်ရှုနိုင်ပါသည်။
3. Text Nodeများကိုအသုံးပြုခြင်း
book.xsl၏ စာကြောင်း၁၄နှင့် ၁၅ကိုကြည့်ပါ။ value-of Tag ကိုအသုံးပြုပြီး XMLစာပိုဒ်၏ Text Node များကို ပုံစံပြောင်းပေးနေပါသည်။ XMLစာပိုဒ်အတွင်းမှ select attribute တွင်သတ်မှတ်ထားသော Text Nodeအမည်ရှိသော Node များ၏တန်ဖိုးများအား ဤTagအတွင်းတွင် သက်မှတ်ထားသော စည်းမျဉ်းအတိုင်း ပုံစံပြောင်းပေးရမည်ဖြစ်၏။
4. xsl: Prefix မဟုတ်သော Tag များ
Template စည်းမျဉ်းအတွင်း xslနှင့်အစမပြုသော အစိတ်အပိုင်းများသည် ပုံစံပြောင်းရန်မလိုအပ်သော အစိတ်အပိုင်းများဖြစ်ပြီး၊ ရေးသားထားသည့်အတိုင်း ပုံစံပြောင်းပြီးသောစာပိုဒ်အတွင်းတွင် ပါဝင်ဖော်ပြ သွားမည်ဖြစ်သည်။
XPath Functions
XPathတွင် xmlအချက်အလက်များကို လိုအပ်သလို တွက်ချက်အသုံးပြုနိူင်ရန် Functionများစွာ ရှိကြပါသည်။ အောက်ပါနမှုနာဖြင့် XPath Functionများ၏အသုံးပြုပုံကို ဖော်ပြသွားပါမည်။
book.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="book.xsl" type="text/xsl"?> <booklist> <book> <name>Head First Java</name> <price>25.00</price> </book> <book> <name>Effective Java</name> <price>42.09</price> </book> <book> <name>Head First Design Patterns</name> <price>29.12</price> </book> <book> <name>SQL Hacks</name> <price>18.36</price> </book> <book> <name>EJB 3.1</name> <price>31.00</price> </book> <book> <name>Seasor 2 Notes</name> <price>19.28</price> </book> <book> <name>Java Remote Interface</name> <price>29.03</price> </book> </booklist>
Count Function
book.xsl၏ စာကြောင်းနံပါတ်၉ကိုကြည့်ပါ။ select attributeတွင် count(booklist/book) ဟုရေးသား ထားပါသည်။ ထိုစာကြောင်းတွင် count function ကိုအသုံးပြုပြီး၊ booklistထဲမှစာအုပ်များကို ရေတွက် နေပါသည်။
Sum Function
book.xsl၏ စာကြောင်းနံပါတ်၂၀ကိုကြည့်ပါ။ select attributeတွင် sum(booklist/book/price) ဟုရေးသား ထားပါသည်။ sum function ကိုသုံးပြီး စာအုပ်စျေးနှုန်း စုပေါင်းစျေးနှုန်းကို တွက်ယူ နေပါသည်။