XPath چيست ؟

( بخش اول )
XML ، بهمراه خود مجموعه ای از ساير تکنولوژی ها را ايجاد کرده است . XSL يکی از مهمترين تکنولوژی های مرتبط با XML بوده که عموما” به سه تکنولوژی ديگر اشاره می نمايد :
• XSLT : زبانی برای تبديل ساختار يک سند XML
• XPath : زبانی برای آدرس دهی بخش های متفاوت يک سند XML
• XSL-FO : زبانی بمنظور فرمت دهی يک سند XML

XPath يکی از تکنولوژی های مرتبط با XML بوده که ارتباط بسيار نزديکی با XSLT دارد . بنابراين لازم است قبل از آشنائی با XPath ،نگاهی سريع به تکنولوژی XSLT داشته و از اين رهگذر جايگاه XPath را تبين نمائيم .XSLT زبانی مبتنی بر قوانين بوده و با ساير زبان های برنامه نويسی تفاوت دارد. XSLT مبتنی بر مجموعه ای از تمپليت ها است که هر يک بر اساس قوانين تعريف شده شکل واقعی خود را پيدا خواهند کرد .در حقيقت يک تمپليت با اتکاء بر قوانين تعريف شده، نحوه پردازش سندهای XML را مشخص می نمايد.به عبارت ديگر يک Stylesheet ، نحوه ايجاد خروجی مورد نظر در زمان مواجه شدن با يک الگو در سند XML را مشخص می نمايد.

در XSLT بر اساس مجموعه ای از قوانين، تمپليت ( تمپليت ها ) تعريف و در زمان تبديل يک سند XML از قوانين موجود در XSLT برای يافتن يک الگو در سند XML استفاده می گردد . در صورتيکه الگوی مورد نظر در سند XML پيدا گردد ، واکنش های پيش بينی شده ، انجام و خروجی مورد نظر ايجاد می گردد. يک StyleSheet می تواند نحوه برخورد با يک المان خاص در زمان عمليات تبديل را مشخص و تعريف نمائيد. مثلا” در صورتيکه المانی با نام NAME در سند XML پيدا گرديد، می توان واکنش های مورد نظر را بمنظور برخورد با واقعيت موجود مشخص کرد. گرامر تمپليت در اين حالت بصورت زير خواهد بود :
<xsl:template match=”NAME”>

</xsl:template>
مثال: استفاده از XSLT بمنظور تبديل يک سند XML
در اين مثال با استفاده از XSLT يک سند XML به Html تبديل و در خروجی نمايش داده می شود .
سند XML نمونه ( Test.xml)
<?xml version=”1.0″ ?>
<?xml:stylesheet type=”text/xsl” href=”Test.xsl”?>
<PEOPLE>
<PERSON>

<NAME>Webmaster</NAME>
<EMAIL>webmaster@Srco.ir</EMAIL>
</PERSON>
<PERSON>
<NAME>Webadmin</NAME>
<EMAIL>info@Srco.ir</EMAIL>
</PERSON>
</PEOPLE>

در سند فوق از يک دستورالعمل پردازشی بمنظور مراجعه به Stylesheet بصورت زير استفاده شده است :
<?xml:stylesheet type=”text/xsl” href=”Test.xsl”?>

خروجی Html مورد نظر
Name Email
Webmaster webmaster@Srco.ir
Webadmin info@Srco.ir

سند XSLT بمنظور تبديل سند XML به HTML برای نمايش در مرورگر ( Test.xsl)
<?xml version=”1.0″?>
<xsl:stylesheet xmlns:xsl=”http://www.w3.org/TR/WD-xsl”>
<xsl:template match=”/”>
<HTML>
<BODY>
<TABLE BORDER=”3″>
<TR>
<TD>Name</TD>
<TD>Email</TD>
</TR>
<xsl:for-each select=”PEOPLE/PERSON”>
<TR>
<TD><xsl:value-of select=”NAME”/></TD>
<TD><xsl:value-of select=”EMAIL”/></TD>
</TR>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
در هر فايل XSL ، می بايست XSL namespace معرفی گردد . بدين ترتيب پارسر از نسخه XSLT استفاده شده ، آگاهی لازم را پيدا خواهد کرد .

<xsl:stylesheet xmlns:xsl=”http://www.w3.org/TR/WD-xsl”>

توضيحاتی در رابطه با مثال فوق :
• قبل از انجام هر گونه پردازش در رابطه با يک سند XML ، می بايست با استفاده از يک عبارت XPath بخش مورد نظر در سند انتخاب گردد .عمليات فوق توسط يک عملگر match انجام می شود . در صورتيکه تمام سند انتخاب گردد، از “/” = match استفاده می گردد. يکی ديگر از رويکردهای موجود، استفاده از المانی است که نشاندهنده تمام سند است . در مثال فوق،المان موجود در سند که دارای چنين رسالتی است با استفاده از match = PEPOLE مشخص می گردد.
<xsl:template match=” … “>

• عبارت زير، تمام المان های PERSON در بافتار PEPOLE را با استفاده از PEPOLE/PERSON که عبارتی از نوع XPath است، پيدا خواهد کرد. در صورتيکه گره انتخابی، شامل تمام المان ها در ريشه باشد ، تمام المان های PEOPLE انتخاب خواهند شد . با توجه به اينکه قصد نمايش تمام المان های PERSON در سند خروجی وجود دارد ، از عبارت فوق استفاده شده است . عبارت for-each يک حلقه تکرار بوده که باعث انجام پردازش های يکسان در رابطه با المان های مورد نظر( انتخابی ) خواهد شد .

<xsl:for-each select=”PEOPLE/PERSON”>
• زمانيکه يک المان PEPOLE توسط عبارت xsl:for-each انتخاب گرديد، با استفاده از عبارت xsl:value-of مقدار مربوط به المان استخراج و در فايل خروجی قرار می گيرد. در مثال فوق، مقدار ذخيره شده در المان NAME در خروجی قرار خواهد گرفت .
<xsl:value-of select=”NAME”/>