April 30, 2012

တတိယ ခြေလှမ်း XSL

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 သည် အသုံးပြုလိုသည့် ဖိုင်အမျိုးအစား အပေါ်မှုတည်၍ အမျိုးအစားများကို ခွဲခြားထားပါသည်။ PDF ဖိုင်များကို ရေးသားရာတွင် PDF သုံး XSL ကို အသုံးပြုရန် လိုအပ်ပြီး၊ HTML ဖိုင်များအား အသုံးပြုရာတွင် HTML သုံး XSL ကို အသုံးပြုရန် လိုအပ်ပါသည်။ XSL များတွင် XSL processor များကို အသုံးပြုခြင်း အားဖြင့် XML အချက်အလက်များကို အသုံးပြုလိုသည့် အမျိုးအစား၏ တည်ဆောက်ပုံအဖြစ် ပြောင်းလည်း ပေးနိုင်ပါသည်။ ဥပမာ အားဖြင့် XML စာပိုဒ်အား HTML သုံးXSLကိုအသုံးပြုပါက HTMLအချက်အလက်အဖြစ် ပြောင်းလည်း ပေးနိုင်သလို၊ PDF သုံးXSLကိုအသုံးပြုပါက PDF အချက်အလက်များအဖြစ် ပြောင်းလည်းပေးနိုင်ပါသည်။



XSL Processor သည် အတော်များများသော Internet Explore တွင် ပါရှိပါသဖြင့်၊ ဤအခန်းတွင် ဖော်ပြသော နမှုနာများကို 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ဖြစ်၏။
<?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 ကိုသတ်မှတ်ပြီး ဖြစ်စေပါသည်။ ရေးသားပုံမှာ အောက်ပါအတိုင်း ဖြစ်ပါသည်။
<?xml-stylesheet href="book.xsl" type="text/xsl" ?>

တဖန် 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 များအတွင်း ရေးသားရမည် ဖြစ်သည်။

Template Rule

စာကြောင်း နံပါတ်၃မှ ၁၇အထိသည် Template စည်းမျဉ်း များဖြစ်ကြ၏။ Template စည်းမျဉ်း ဆိုသည်မှာ XML၏အပိုင်းတစ်ခုကို ဘယ်လိုပုံစံပြောင်းရမည်ဟု သက်မှတ်ထားသော စည်းကမ်းများ ဖြစ်ကြ၏။ စာကြောင်းနံပါတ်၃သည် root node ရဲ့ဖော်ပြပုံပုံစံကို သတ်မှတ်နေ၏။ တဖန်စကြောင်း ၁၂မှစ၍ book node၏ ဖော်ပြပုံဖြစ်၏။ Template Rule Tag၏ရေးသားပုံမှာ အောက်ပါအတိုင်း ဖြစ်၏။
<xsl:template match="/"> <------ root node
…
<xsl:template match="book"> <------ single node
Template Tag၏ match attributeသည် လက်ရှိTemplateတွင်အသုံးပြုမည့် nodeကို Xpath ရေးသားပုံဖြင့် သတ်မှတ်ရပါမည်။ book.xslတွင် root node နှင့် book nodeအသီးသီးကို စာကြောင်း၃နှင့်၁၂တွင်သတ်မှတ်ထားပါသည်။

Template Rule ၏ အသုံးပြုပုံ

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 ၏ စာအုပ် ၃အုပ်လုံးသည် အထက်ပါစည်းမျဉ်းအတိုင်း ပုံစံပြောင်း နေသည်ကို ကြည့်ရှုနိုင် ပါသည်။

Text Node များ

book.xsl ၏ စာကြောင်း၁၄နှင့် ၁၅ကိုကြည့်ပါ။ value-of Tag ကိုအသုံးပြုပြီး XML စာပိုက်၏ Text Node များကို ပုံစံပြောင်းပေးနေပါသည်။ XML စာပိုဒ်အတွင်းမှ select attribute တွင်သတ်မှတ်ထားသော Text Nodeအမည်ရှိသော Node များ၏တန်ဖိုးများအား ဤ Tag အတွင်းတွင် သက်မှတ်ထားသော စည်းမျဉ်းအတိုင်း ပုံစံပြောင်းပေး မည်ဖြစ်၏။
<xsl:value-of select="name">


xsl: Prefix မဟုတ်သော Tag များ

Template စာသားအတွင်းရှိ xsl ဖြင့် အစပြုသော Tag များနှင့် အခြားသော Tag များကိုလည်း တွေ့ရှိနိုင်မည် ဖြစ်သည်၊ xsl နှင့်အစမပြုသော အစိတ်အပိုင်းများသည် ပုံစံပြောင်းရန် မလိုအပ်သော အစိတ်အပိုင်းများ ဖြစ်ပြီး၊ ရေးသားထားသည့် အတိုင်း စာပိုဒ်အတွင်းတွင် ဖော်ပြသွားမည် ဖြစ်သည်။


XPath

XPath သည် XSL မှ XML စာပိုဒ်အတွင်းမှ အချက်အလက်များ၏ နေရာအတိအကျကို ဖော်ပြရာတွင် အသုံးပြုသော စနစ်တစ်ခုဖြစ်၏။ XPath မပါဝင်ပဲ XSLကိုအသုံးပြုနိုင်မည် မဟုတ်ပေ။ XPath သည်လည်း XML ဘာသာရပ် ကဲ့သို့ပင် သစ်ပင်ဖွဲ့စည်းပုံ (Tree Structure) ကို အသုံးပြုထားပါသည်။ XMLနှင့် ကွာခြားသည်မှာ Element အဆင့်မဟုတ်ပဲ၊ Nodeအဆင့်ဖြင့် သစ်ပင်ဖွဲ့စည်းပုံကို ဖွဲ့စည်းထားခြင်း ဖြစ်သည်။



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 များဖြစ်ကြ၏။


XPath Node


Xpath တွင် Nodeတစ်ခုရဲ့ အချက်အလက်ကို ဖော်ပြရာတွင် ထို Node ရဲ့ တည်နေရာကို ဖော်ပြပေးဖို့လိုအပ်ပါသည်။ Node တစ်ခု၏နေရာကိုဖော်ပြရာတွင် Node တစ်ခုနှင့် တစ်ခုအကြား / ကိုကြားခံ၍ ဖော်ပြရပါမည်။ ထိုသို့ဖော်ပြချက်ကို နေရာဖော်ပြချက် (Location Path) ဟု ခေါ်ပါသည်။ Node တစ်ခု၏ တည်နေရာကိုဖော်ပြပုံမှာ ၂မျိုးခွဲခြားနိူင်ပါသည်။ XML စာပိုဒ် တစ်ခုလုံး၏ နေရာအတိအကျကိုဖော်ပြပေးသော အတိအကျနေရာ(Absolute Location Path )နှင့်၊ လက်ရှိ Node မှ၊ ရောက်ရှိလိုသော Node ကိုညွှန်ပြသော နှိုင်းယှဉ်နေရာ (Relative Location Path) ဟူ၍ ရှိပေသည်။


အတိအကျနေရာ (Absolute Location Path)

Root Nodeနေရာမှ ဖော်ပြလိုသော Nodeအထိ လမ်းကြောင်းကို အတိအကျ နေရာဟုခေါ်ပါသည်။ အထက်ဖော်ပြပါပုံတွင် 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 တွင် အတိုကောက် စာလုံးများကိုလည်း အသုံးပြု နိုင်ပေသည်။ အသုံးပြုနိုင်သော အတိုကောက် စာလုံးများမှာ အောက်ပါအတိုင်း ဖြစ်ပါသည်။

အမျိုးအစား ရှင်းလင်းချက်
/root
//descendant-or-self
.self
..parent
@Attribute


အမည်တူ Node များ

ဥပမာအားဖြင့် //name ဟု name ဟု အမည်ရသော node များကို ဖော်ပြသည့်အခါမျိုးတွင် နှစ်ခုထက်မက တည်ရှိပါက ခွဲခြားဖော်ပြရန် လိုအပ်ပါသည်။

Node ၏အမည် [နံပါတ်]

Diagram3.2.1၏ company node တွင် child nodeနှစ်ခုရှိပါသည်။ ဥပမာအားဖြင့် မင်းလွင် အမည်ရှိသော Node သည် employee [1] ဖြစ်၍၊ စည်သူဟုအမည် node ကိုပိုင်ဆိုင်သော node သည် employee [2] ဖြစ်သည်။ အခြားသော ပရိုဂရမ်မင်း ဘာသာရပ်များကဲ့သို့ 0 မှ အစမပြုသည်မှာ သတိထားစရာ အချက် တစ်ခုဖြစ်သည်။


XPath Functions

XPath တွင် xml အချက်အလက်များကို လိုအပ်သလို ပြုပြင်အသုံးပြုနိုင်ရန် Function များကို ပြင်ဆင်ထားပါသည်။ အောက်ပါ book.xml နမှုနာဖြင့် XPath Function များ၏အသုံးပြုပုံကို ဆက်လက်လေ့လာ သွားပါဦးမည်။
<?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>
အထက်ပါ book.xml ရှိ အချက်အလက်များအား အသုံးပြု၍ 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="/">
<h3>
Count of Books :
<xsl:value-of select="count(booklist/book)" /></h3>
<table border="1">
    <tr style="background-color:silver">
    <th>Book Name</th>
    <th>Book Price</th>
    </tr>
    <xsl:apply-templates select="booklist/book" />
    <tr style="background-color:silver">
    <td style="padding-left:10px"> Total price</td>
    <td style="text-align: right">
    <xsl:value-of select="sum(booklist/book/price)" />
    </td>
    </tr>
    </table>
    </xsl:template>
    <xsl:template match="book">
    <tr><td style="padding-left:10px;width:450px">
    <xsl:value-of select="name"></xsl:value-of></td>
    <td style="text-align: right">
    <xsl:value-of select="price"></xsl:value-of>
    </td></tr>
    </xsl:template>
</xsl:stylesheet>


Count Function


book.xsl၏ စာကြောင်းနံပါတ်၉ကိုကြည့်ပါ။ select attributeတွင် count(booklist/book) ဟုရေးသား ထားပါသည်။ ထိုစာကြောင်းတွင် count function ကိုအသုံးပြုပြီး၊ booklist ထဲမှ စာအုပ်များကို ရေတွက်နေပါသည်။


Sum Function


book.xsl ၏ စာကြောင်းနံပါတ်၂၀ကိုကြည့်ပါ။ select attribute တွင် sum(booklist/book/price) ဟုရေးသား ထားပါသည်။ sum function ကိုသုံးပြီး စာအုပ်ဈေးနှုန်းများ၏ စုပေါင်းဈေးနှုန်းကို တွက်ချက် ရယူပါသည်။

book.xml ကို web browserဖြင့် ဖွင့်ကြည့်သောအခါ အောက်ပါအတိုင်းတွေ့မြင်ရမည်ဖြစ်သည်။


အထက်ပါ count နှင့်sum အပြင် XPathတွင် အသုံးပြုရန် function များစွာရှိပါသည်။ အသုံးပြုသည့် အချက်အလက် များပေါ်တွင်မှုတည်ပြီး function များကို အဖွဲ့အစည်း ခွဲခြားထားပြီး၊ အသုံးများသော functions များမှာ အောက်ပါအတိုင်းဖြစ်၏။

အုပ်စုအမည် ဖန်ရှင်အမည် အသုံးပြုပုံ
Node Set Functions count (Node set) Node set၏ အရေအတွက်ကို သိလိုသည့်အခါမှာ အသုံးပြုရပါသည်။
id (Identifier Name) Identifier Name နှင့်တူညီသော id ကို ပိုင်ဆိုင်သော Element များကိုရှာဖွေ နိုင်ပါသည်။
last () လက်ရှိ Node၏ နောက်ဆုံးနေရာတွင် တည်ရှိသော Element ကို ရရှိနိုင်ပါသည်။
name (Node Set) Node Set ၏ name Attribute ၏ တန်ဖိုးကို သိရှိနိုင်ပါသည်။
position () လက်ရှိ Node၏ တည်နေရာကို ရရှိနိုင်ပါသည်။
String Functions concat (String1, String2, ...) စကားလုံးစုများကို ပေါင်းစပ်ရာတွင် အသုံးပြု ပါသည်။
substring (String, index, count) စကားလုံးစု String အား၊ indexနေရာမှစ၍ count စာလုံးမြောက်အထိ ဖြတ်ယူရာတွင် အသုံးပြုပါသည်။
substring-after (String1, String2) String1 အတွင်းရှိ String2 စာလုံး၏အနောက်ရှိ စကားလုံးများကို ဖြတ်တောက်ယူရာတွင် အသုံးပြု ပါသည်။
substring-before (String1, String2) String1 အတွင်းရှိ String2 စာလုံး၏အရှေ့ရှိ စကားလုံးများကို ဖြတ်တောက် ယူရာတွင် အသုံးပြု ပါသည်။
substring-length (String) စကားလုံးစု၏ စာလုံးအရေအတွက်ကို ရယူရာတွင် အသုံးပြုပါသည်။
translate (String1, String2, String3) မှုရင်း စာကြောင်း String1 အတွင်းရှိ String2 များကို String3 အဖြစ် ပြောင်းလည်း ဖော်ပြလိုသည့်အခါတွင် အသုံးပြု နိုင်ပါသည်။
Numeric Functions number (String) String စကားလုံးစုများမှ ကိန်းဂဏန်းအဖြစ် ပြောင်းလည်း ယူနိုင်ပါသည်။
round (Numeric) ကိန်းဂဏန်းကို အနီးစပ်ဆုံး အပြည့်ကိန်းများအဖြစ် ပြောင်းလည်းပေး နိုင်ပါသည်။
sum (Node Set)  Node set များ၏ စုစုပေါင်း ရလဒ်ကို တွက်ယူ နိုင်ပါသည်။

XPath Function များသည် XSL တွင်သာမက XML DB တွင် အသုံးပြုသော XQuery တွင်လည်း အသုံးပြုနိုင်ပါသည်။ အသေးစိတ်ကိုတော့ W3C ရဲ့ Web Page များတွင် လေ့လာနိုင်ပါသည်။ 
http://www.w3.org/TR/xpath-functions/


XPath Operators


အထက်ပါအခန်းများတွင် ဖော်ပြပြီးသည့်အတိုင်း XSL တွင် XPath ၏ဖော်ပြချက်များအပေါ်မှုတည်၍ သက်ဆိုင်ရာ Node များ၏ Style များကို ပြောင်းလည်းပေးခြင်း၊ တဖန် XPath ၏ Functions များကို အသုံးပြုပြီး သက်ဆိုင်ရာ Node များမှ လိုအပ်သော တန်ဖိုးများကို ပြောင်းလည်းယူခြင်းများကို ပြုလုပ်နိုင်ကြောင်း တင်ပြခဲ့ပါသည်။ တဖန် XPath ၏ ဖော်ပြချက်များကို လိုအပ်သလို အသုံးပြုနိုင်စေရန် Operators များကိုလည်း ပြင်ဆင်ထားပါသည်။ အသုံးပြုနိုင်သော Operators များမှာ အောက်ပါအတိုင်းဖြစ်၏။

အမျိုးအစား ရှင်းလင်းချက်
| Node Set များကို၊ ပေါင်းဆက်ရာတွင် အသုံးပြုပါသည်။
// book | //cd ဟုရေးထားမည်ဆိုလျှင်၊ current node ၏အောက်တွင်ရှိသော
book node များနှင့်၊ cd node များကို node setတစ်ခုအဖြစ်ရရှိမည် ဖြစ်သည်။
+ အပေါင်းလက္ခဏာ ဖြစ်ပါသည်။
count (//book) + count (//cd) ဟုရေးသားထားမည်ဆိုလျှင် စာအုပ်အရေအတွက်နှင့်
CDအရေအတွက်ကို စုစုပေါင်းအရေအတွက်ကို ရရှိမည်ဖြစ်သည်။
- အနှုတ်လက္ခဏာ ဖြစ်ပါသည်။
* အမြှောက်လက္ခဏာဖြစ်ပါသည်။
div အစားလက္ခဏာဖြစ်ပါသည်။
mod အကြွင်းကို ရလိုသည့်အခါတွင် အသုံးပြုနိုင်ပါသည်။
= တူညီခြင်းကို ဖော်ပြလိုသောအခါ အသုံးပြုနိုင်ပါသည်။
//book/price=39.00 ဟုရေးသားထားလျှင် book၏တန်ဖိုးသည် 39.00 ရှိသော
စာအုပ်များဟု အဓိပ္ပါယ်ရပါသည်။
!= မတူညီခြင်းကို ဖော်ပြလိုသောအခါ အသုံးပြုနိူင်ပါသည်။
//book/price=39.00 ဟုရေးသားထားလျှင် book၏တန်ဖိုးသည် 39.00 မဟုတ်သော
စာအုပ်များဟု အဓိပ္ပါယ်ရပါသည်။
< ပို၍သေးငယ်ခြင်း ကိုဖော်ပြပါသည်။
<= ပို၍သေးငယ်ခြင်း သို့မဟုတ် တူညီခြင်း ကိုဖော်ပြပါသည်။
> ပို၍ကြီးမားခြင်း ကိုဖော်ပြပါသည်။
>= ပို၍ကြီးမားခြင်း သို့မဟုတ် တူညီခြင်း ကိုဖော်ပြပါသည်။
OR သို့မဟုတ်။
A OR B ဟု ရေးသားထားပါက A သို့မဟုတ် B ဟု အဓိပ္ပါယ်ရပါသည်။
AND နှင့်။
A AND B ဟု ရေးသားထားပါက A နှင့် B ဟု အဓိပ္ပါယ်ရ ပါသည်။



အခြားသော XPath ဝါကျများ


IF ဝါကျ


အခြားသော Programming ဘာသာရပ်များကဲ့သို့ပင် if ကို အသုံးပြုနိုင်ပါသည်။ ဖော်ပြပါအနေအထား အတိုင်းပြည့်ဆုံမည် ဆိုလျှင် ရေးသားထားသော လုပ်ဆောင်ချက်များကို လုပ်ဆောင်သွားမည်ဖြစ်သည်။ သို့ရာတွင် သတိထားရမည်မှာ else ကဲ့သို့ အသုံးပြုချက်များမှာ XPath တွင်အသုံးပြု၍မရပေ။

world.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="world.xsl" type="text/xsl" ?>
<world>
<country population="1338.29">China</country>
<country population="1182.42">India</country>
<country population="309.59">USA</country>
<country population="127.53">Japan</country>
<country population="42.642">Myanmar</country>
</world>

world.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="/">
<h3>Countries population is over 500 Million</h3>
<table>
    <tr>
        <th style="text-align:left">Country</th>
        <th>Population</th>
    </tr>
<xsl:apply-templates select="world/country" />
</table>
</xsl:template>

<xsl:template match="country">
<xsl:if test="./@population > 500">
<tr>
    <td width="250px">
        <xsl:value-of select="." />
    </td>
    <td>
        <xsl:value-of select="./@population" />
    </td>
</tr>
</xsl:if>
</xsl:template>

</xsl:stylesheet>

World.xsl၏ စာကြောင်း၁၇မှ ၂၆အထိသည် If ဝါကျကို အသုံးပြုထားသော နမှုနာဖြစ်သည်။ စာကြောင်း ၁၇တွင် <xsl:if test="./@population > 500"> ဟူ၍ If ဝါကျကိုရေးသားထား၏။ test attributeသည် If ဝါကျတွင် မရေးမဖြစ် ပါဝင်ရမည်ဖြစ်ပြီး အသုံးပြုမည့် ဖော်ပြချက်လည်းဖြစ်၏။ ". /@population > 500" သည် လက်ရှိ node၏ population attribute ရဲ့ တန်ဖိုးသည် 500 အထက်ဖြစ်လျှင်ဟု အဓိပ္ပါယ်ရပါသည်။ အကယ်၍ testအတွင်းကဖော်ပြချက်နှင့် ကိုက်ညီမည်ဆိုလျှင် IF ဝါကျ အတွင်းမှ ရေးသားထားသော သတ်မှတ်ချက်များအတိုင်း ပြောင်းလည်းပေးသွားမည်ဖြစ်သည်။ အထက်ပါ world.xml ကို web browserနှင့် ဖွင့်ကြည့်မည် ဆိုလျှင် အောက်ပါအတိုင်း တွေ့မြင်ရမည် ဖြစ်သည်။




Choose ဝါကျ


နှိုင်းယှဉ်ရန် အချက်အလက်သည် တစ်ခုထက်ပိုရှိပြီး၊ အချက်အလက်များကို ကိုယ်စီ လုပ်ဆောင်ချက် များကို ခွဲခြားပြီး ရေးသားလိုလျှင် အသုံးပြုနိုင်ပေသည်။ Choose node ၏ Child nodeဖြစ်သော When Node များတွင် အချက်အလက်များကို သီးခြားရေးသားနိုင်ပေသည်။ အခြားသော Programming ဘာသာရပ်များ၏ switch ဝါကျများနှင့် အသုံးပြုပုံ တူညီပေသည်။

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<h3>Choose Sample</h3>
<table width="60%">
<tr>
<th style="text-align:left">Country</th>
<th style="text-align:right">Population</th>
<th style="text-align:left;padding-left:60px">Type</th>
</tr>
<xsl:apply-templates select="world/country" />
</table>
</xsl:template>

<xsl:template match="country">
<tr>
<td>
    <xsl:value-of select="." />
</td>
<td style="text-align:right">
    <xsl:value-of select="@population" />
</td>
<td style="text-align:left;padding-left:60px">
    <xsl:choose>
    <xsl:when test="@population > 500">
        Over 500 Million
    </xsl:when>
    <xsl:when test="@population > 300">
        Over 300 Million
    </xsl:when>
    <xsl:otherwise>
        Under 300 Million
    </xsl:otherwise>
    </xsl:choose>
</td>
</tr>
</xsl:template>

</xsl:stylesheet>

If နမှုနာတွင် ရေးသားထားသော world.xsl အား အထက်ပါအတိုင်း ပြောင်းလည်း ရေးသားကြည့်ပါမည်။ စာကြောင်း၂၆မှ ၃၆ အထိသည် choose ဝါကျကို အသုံးပြုထားပါသည်။ When node အတွင်းမှ test သတ်မှတ် ချက်များနှင့် ပြည့်စုံလျှင် When အတွင်းတွင် ရေးသားထားသော လုပ်ဆောင်ချက် များအတိုင်း လုပ်ဆောင်သွားမည် ဖြစ်သည်။ တဖန် Whenလုပ်ဆောင်ချက်များနှင့် မပြည့်စုံပါက Otherwise nodeအတွင်းမှ လုပ်ဆောင်ချက်ကို လုပ်ဆောင်ပေးမည် ဖြစ်၏။




For Each ဝါကျ


Node List များမှ Node များကိုတစ်ခုပြီးတစ်ခု သတ်မှတ်ထားသည့် လုပ်ဆောင်ချက်များကို လုပ်ဆောင်စေလိုလျှင် for-each ကို အသုံးပြုရမည် ဖြစ်သည်။ အခြားသော Programmingဘာသာရပ်များမှ while သို့မဟုတ် for ဝါကျနှင့် ဆင်တူပါသည်။
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<h3>For Each sample</h3>
<table width="50%">
<tr>
    <th style="text-align:left">Country</th>
    <th style="text-align:left">Population</th>
</tr>

<xsl:for-each select="world/country">
<tr>
    <td>
        <xsl:value-of select="." />
    </td>
    <td>
        <xsl:value-of select="@population" />
    </td>
</tr>
</xsl:for-each>

</table>
</xsl:template>

</xsl:stylesheet>
wrold.xsl file ကို အထက်ပါအတိုင်း ပြောင်းလည်း ရေးသားပြီး Web Browserဖြင့် ဖွင့်ကြည့်မည် ဆိုလျှင် အောက်ပါအတိုင်း တွေ့မြင်ရမည် ဖြစ်သည်။




Sort လုပ်ခြင်း


ဖော်ပြပုံ အချက်အလက်များကို အစီအစဉ်တကျ ပြောင်းလည်း စီစဉ်လိုပါက Sort ဝါကျကို အသုံးပြုရမည် ဖြစ်သည်။ Sort Elementသည် <xsl:apply-templates> သို့မဟုတ် <xsl:for-each> Element များနှင့် တွဲဖက်၍ အသုံးပြုလေ့ရှိပါသည်။ Sort element တွင် သတ်မှတ်နိုင်သော Attribute များမှာ အောက်ပါ အတိုင်း ဖြစ်၏။

အမည် ရှင်းလင်းချက်
select အစီအစဉ်ပြောင်းလည်းရာတွင် အသုံးပြုမည့် Node Setကို ရေးသားရမည်။
lang အစီအစဉ်ပြောင်းလည်းရာတွင် အသုံးပြုမည့် ဘာသာရပ် ကို ရေးသားရမည်။
data-type အစီအစဉ်ပြောင်းလည်းရာတွင် အသုံးပြုမည့် အချက်အလက်ပုံစံကို ရေးသားရမည်။
  • text : စာလုံးပုံစံ အချက်အလက်
  • number : ကိန်းဂဏာန်းပုံစံ အချက်အလက်
order အစီအစဉ်ပြောင်းလည်းရာတွင် အသုံးပြုမည့် စာစီစဉ်ကို ရေးသားရမည်။
  • ascending : တက်စဉ်
  • descending : ကျစဉ်
case-order အချက်အလက်ပုံစံသည် text ကို အသုံးပြုမှသာလျှင် အသုံးပြုနိုင်မည် ဖြစ်သည်။
  • upper-first : စာလုံးအကြီးကို ဦးစွာဖော်ပြပါမည်။
  • lower-first : စာလုံးအငယ်ကို ဦးစွာဖော်ပြပါမည်။
ကျွှန်တော်တို့ For Each နမှုနာတွင် ရေးသားထားသော 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="/">
<h3>For Each sample</h3>
<table width="50%">
<tr>
    <th style="text-align:left">Country</th>
    <th style="text-align:left">Population</th>
</tr>

<xsl:for-each select="world/country">
<xsl:sort select="." data-type="text" order="ascending"/>
<tr>
    <td>
        <xsl:value-of select="." />
    </td>
    <td>
        <xsl:value-of select="@population" />
    </td>
</tr>
</xsl:for-each>

</table>
</xsl:template>

</xsl:stylesheet>

စာကြောင်း နံပါတ် ၁၄ကို ဖြည့်စွက်ရေးသားပြီး Sort လုပ်စေပါသည်။ ရေးသားထားသော world.xml ကို Double Click လုပ်၍ IE ဘရောင်ဇာ၏ ရလဒ်ကို ကြည့်ပါက အောက်ပါအတိုင်း အစီအစဉ်ကို ပြန်ပြောင်းပေးနိုင်သည်ကို တွေ့ရပါလိမ့်မည်။



Attribute များအား ပြောင်းလည်းသတ်မှတ်ခြင်း

xslတွင် ပြောင်းလည်းရန် Element များကပိုင်ဆိုင်သော Attributes များ၏ တန်ဖိုးများကို သတ်မှတ် ပေးနိုင်ပါသည်။ ထိုအခါတွင် အသုံးပြုသော ဝါကျမှာ attributeဖြစ်၏။
attr.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="attr.xsl" type="text/xsl" ?>
<pages>
 <page url="http://caloricp.jp/apc/sscp/K1006CAL/top.html">Caloricp</page>
 <page url="http://www.ajinomoto.co.jp/aji/egg/generator2/">Ajinomoto</page>
 <page url="http://manifani.com/">Manifani</page>
 <page url="http://www.brucke.co.jp/kolok/">Brucke</page>
 <page url="http://aikohno.com/">Aikohno</page>
 <page url="http://www.premacy.mazda.co.jp/pre/">Masada Premacy</page>
</pages>

attr.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="/">
<h3>Web Pages That I Like</h3>
<ol>
<xsl:for-each select="pages/page">
<li>
    <a>
        <xsl:attribute name="href">
        <xsl:value-of select="@url" />
        </xsl:attribute>
        <xsl:value-of select="." />
    </a>
</li>
</xsl:for-each>
</ol>
</xsl:template>
</xsl:stylesheet>

အထက်ပါ attr.xsl၏ စာကြောင်းနံပါတ်၁၀မှ ၁၂အထိသည် Attribute ကိုသတ်မှတ်ပေးသော ဝါကျဖြစ်၏။ စာကြောင်း၉တွင်ရေးသားထားသော Element <A> ၏ hrefဟု အမည်ရသော Attrubute ၏ တန်ဖိုးကို သတ်မှတ်ပေးနေပါသည်။ တန်ဖိုးမှာ စာကြောင်းနံပါတ် ၁၁ တွင် ရေးသား ထားသည့်အတိုင်း လက်ရှိ Node၏ url Attribute၏ တန်ဖိုးဖြစ်၏။

ထိုသို့ရေးသားထားခြင်းအားဖြင့် <A> element ၏ href attribute တန်ဖိုးတွင် page node ၏ url attribute ၏ တန်ဖိုးကို အစားထိုးဖော်ပြပေးနိုင်ပါသည်။

attr.xml file ကို web browserဖြင့် ဖွင့်ကြည့်သောအခါ အောက်ပါအတိုင်း တွေ့မြင်ရ မည်ဖြစ်၏။



ပြန်လည် သုံးသပ်ချက်


ဤ XMLဆီသို့ခြေလှမ်းများရဲ့ တတိယခြေလှမ်းဖြစ်တဲ့ အခြေခံXSL တွင် XSLTကိုအသုံးပြုပြီး XML စာပိုဒ်များ ၏ တည်ဆောက်ပုံကို အခြားသောတည်ဆောက်ပုံအဖြစ် ပြောင်းလည်းနိုင်ပုံကို ဖော်ပြခဲ့ပါသည်။ 

ဤအခန်းတွင် HTMLသို့ပြောင်းလည်းပုံကို အဓိကထားဖော်ပြခဲ့ပေမယ့်၊ XML စာပိုဒ်အတူတူခြင်း ဖြစ်လင့်ကစား Style Sheetကို ပြောင်းလည်းခြင်းအားဖြင့် ပုံစံတစ်မျိုးဆီသို့ ပြောင်းလည်းပေးနိုင်ကြောင်း နားလည်နိုင်ပေလိမ့်မည်။ ယခုအခန်းတွင်XSLT Processorအဖြစ် Internet Exploreကို အသုံးပြုခဲ့ပါသဖြင့် ပြောင်းလည်းပြီးနောက် အချက်အလက်များ ကိုပြန်လည် အသုံးပြုခြင်းမရှိခဲ့ပေးမယ့်၊ Jax သို့မဟုတ် Xalan ကဲ့သို့ XSLT Processor များကို အသုံးပြုပါက ပြောင်းလည်းပြီးသော အချက်အလက်များ File အဖြစ် ထုတ်ပြန်ပေးနိုင်ပါလိမ့်မည်။ တဖန် Style Sheet၏ ရေးသား  ပုံပေါ်မှုတည်ပြီး CSV ပုံသဏ္ဍာန် အဖြစ်ရေးသားနိုင်ပါသဖြင့် XMLအချက်အလက်များကို Microsoft Excel များမှ တဆင့် အသုံးပြုနိုင်မည်ဖြစ်သည်။

နောက်အခန်းများတွင် DOM, SAX APIကိုအသုံးပြု၍ XMLအချက်အလက်များကို Java Program မှတဆင့် အသုံးပြုပုံများကို ဆက်လက်ဖော်ပြသွားမည် ဖြစ်သည်။

No comments:

Post a Comment