XML ، بهمراه خود مجموعه ای از ساير تکنولوژی ها را ايجاد کرده است . XSL يکی از مهمترين تکنولوژی های مرتبط با 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> |
سند 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"/> |
CSS
هسته اوليه XSL از CSS شکل گرفته است . CSS بمنظور تعريف و افزودن فرمت به يک فايل Html استفاده می گردد . گرامر استفاده شده در يک Stylesheet مربوط به XSLT مشابه گرامر استفاده شده در CSS است . Stylesheet های استفاده شده در XSLT دارای عملکردی بسيار متفاوت نسبت به نمونه های خود در CSS می باشند . CSS امکان تعريف زنگ ها ، زمينه ها ، نوع و اندازه فونت ها را برای يک صفحه وب Html فراهم می نمايد . XSLT امکان تبديل يک فايل XML را به فرمتی ديگر فراهم می نمايد . در صورتيکه هدف صرفا" تعريف فرمت و قالب برای يک صفحه وب باشد ، می توان همچنان از CSS استفاده کرد . استفاده از CSS با توجه به عموميت آن، برای اکثر استفاده کنندگان گزينه ای مناسب خواهد بود .
XML Query Language
XML ، امکان تعريف تگ های اختصاصی را توسط مولفين سندها ، فراهم می نمايد، بنابراين تبديل يک سند XML به نوع ديگر، همواره بعنوان يک نياز خواهد بود . از طرف ديگر، مرورگر قادر به نمايش مستقيم اسناد XML نمی باشند . بنابراين ضروری است که يک سند XML به HTML تبديل تا امکان نمايش آن توسط مرورگرهای وب فراهم گردد . بمنظور پاسخ به نيازهای فوق، شرکت های ماکروسافت، Texcel و WebMethods در سال 1998 پيشنهاد ايجاد يک زبان پرسو جو برای XML را به کنسرسيوم وب، ارائه دادند (XML Query Language :XQL) . بخشی از پيشنهاد فوق به نحوه استفاده از زبان XSL در اسناد XML اشاره داشت . در سال 1999 کنسرسيوم وب ، تصميم به يکپارچه نمودن تمامی تحقيقات انجام شده در رابطه با " ايجاد يک مدل اساسی برای پرس و جو " ، گرديد . و بر همين اساس XSLT معرفی و عرضه گرديد .
XPath
در زمان پياده سازی XSLT ، گروه ديگری در کنسرسيوم وب بر روی يکی از تکنولوژی های مرتبط با XML و با نام XPointer فعاليت خود را آغاز نمودند. XPointer از ايده تگ های anchor در يک سطح جديد استفاده می کرد . هم XPointer و هم XSLT نيازمند روشی بمنظور اشاره به بخش های متفاوت يک سند XML می باشند. XSLT نيازمند انتخاب بخش های از يک سند XML بمنظور عمليات تبديل بوده و XPointer بمنظور الحاق دو سند به امکان فوق نياز خواهد داشت . بدين منظور می بايست از يک گرامر متداول در اين زمينه استفاده تا امکان بکارگيری آن در XSLT و XPointer فراهم گردد . اين تکنولوژی جديد، XPath ناميده شد . با اينکه XPath زيرمجموعه ای از XSLTاست ولی می تواند بصورت مستقل نيز استفاده گردد .
XPath زبانی برای يافتن اطلاعات در يک سند XML است . با استفاده از XPath می توان محل و موقعيت ساختار سند و يا داده های موجود در يک سند XML را مشخص نمود. پس از مشخص نمودن موقعيت و مکان المان مورد نظر در يک سند XML ، می توان با استفاده از XSLT پردازش های لازم را در رابطه با اطلاعات مربوطه، انجام داد .کنسرسيوم وب ، تعريف زير را در ارتباط با XPath ارائه نموده است :
تعريف XPath |
XPath ، زبانی بمنظورآدرس دهی بخش های متفاوت يک سند XMLبمنظور استفاده در XSLTو XPointerاست . |
هدف اوليه XPath ،امکان آدرس دهی بخش های متفاوت يک سند XML است . بمنظور تامين خواسته فوق از امکانات و پتانسيل های متعددی بمنظور انجام عمليات بر روی رشته ها ، اعداد و منطق استفاده می شود . XPath از يک گرامر فشرده و عدم مبتنی بر XML بهمراه URI و مقادير خصلت های XML استفاده می نمايد.دليل انتخاب نام XPath برای تکنولوژی فوق بدين علت است که در حقيقت از يک آدرس بمنظور حرکت در طول يک سند XML با ساختار سلسله مراتبی استفاده می گردد. XPath يک سند XML را بعنوان درختی از گره ها شبيه سازی می نمايد . در اين راستا ، گره های متفاوتی نظير: گره های Element ، گره های Attribute و گره های Text ، وجود دارد برای هر گره توسط XPath ، يک رشته در نظر گرفته می شود . برخی از انواع خاص گره ها دارای اسامی اختصاصی خود می باشند . XPath بطور کامل XML Namespace را حمايت می نمايد .بنابراين نام يک گره توسط يک زوج ، شامل يک بخش محلی و يک Namespace از نوع URIمشخص می گردد ( نام توسعه يافته ) .
برخی از مفاهيم اوليه XPath
گرامر استفاده شده در XPath شباهت زيادی به نحوه آدرس دهی فايل ها در يک سيتستم آدرس دهی فايل ها دارد . در صورتيکه مسير با "/" شروع گردد ، نشاندهنده يک مسير مطلق به المان مورد نياز است . در صورتيکه آدرس با " //" شروع گردد، تمام المان هائی که با شرايط اعلام شده مطابقت نمايند، انتخاب می گردند . مثلا" //Price// ، باعث انتخاب تمام المان های price موجود در سند می گردد .
Context ( بافتار )
بافتار يک پرس وجو ، گره ای در سند XML است که پردارشی بر روی آن در حال انجام است . بنابراين در تمپليت زير :
ما در بافتار ريشه سند XML می باشيم . زمانيکه از از حلقه تکرار xsl:for-each استفاده می گردد ، بافتار، گره ای است که در حال حاضر از طريق حلقه تکرار بر روی آن قرار گرفته ايم . شناخت بافتاری که توسط يک تمپليت XSL پردازش می گردد ، بسيار حايز اهميت بوده و در خيلی از موارد و زمانيکه يک فايل XSL نوشته شده ، خروجی مورد نظر را توليد نمی نمايد ، ممکن است اشکال از بافتار باشد . زمانيکه عمليات اشکال زدائی XSL را انجام خواهيم داد ، اولين سوالی که مطرح خواهد شد ، ماهيت بافتار پردازش شده است .
مکان يابی مسيرها
با مکان يابی مسيرها ، بافتار مربوط به گره ای که قصد يافتن آن را داريم ، مشخص می گردد . برای تعيين موقعيت يک مسير، می توان از دو روش کوتاه و يا غيرکوتاه استفاده کرد . بمنظور انتخاب يکی از روش های فوق، می بايست به حمايت آن از طرف پارسر مطمئن گرديد( از سال 2000 ، پارسر MSXML ماکروسافت، دو روش فوق را حمايت می نمايد ) .
• گرامر کوتاه (Abbreviated ) . مثال زير، نحوه مکان يابی المان های موجود در يک سند XML را به صورت کوتاه توسط XPath نشان می دهد.
<xsl:for-each select="PEOPLE//PERSON"> |
• گرامر غيرکوتاه (unabbreviated ) .مثال زير ، نحوه مکان يابی المان های موجود در يک سند XML را به صورت غيرکوتاه توسط XPath نشان می دهد.
<xsl:for-each select="child::PEOPLE/descendant::PERSON"> |
{{Fullname}} {{Creationdate}}
{{Body}}