استفاده از XSLT در برنامه های وب (3)
استفاده از XSLT در برنامه های وب (3)
مرتب سازی ( Sorting)
مرتب سازی در XSLTبا افزودن يک و يا چندين عنصر فرزند <xsl:Sort> به عنصر <xsl:apply-templates> و يا <xsl:for each> محقق می گردد . گرامر استفاده از عنصر فوق ، بصورت زير است :
xsl:sort element syntax |
<xsl:sort select="Xpath expression" |
خصلت Select، باعث انتخاب يک عنصر و يا خصلت می گردد . در صورتيکه بيش از يک عنصر <xsl:sort> استفاده گردد ، خروجی در ابتدا بر اساس عنصر و يا خصلت مشخص شده در اولين <xsl:sort> مرتب شده و در صورتيکه پس از مرتب سازی ، موارد تکراری وجود داشته باشد ، موارد موجود توسط عنصر و يا خصلت مشخص شده در دومين <xsl:sort> ، مرتب می گردند . خصلت data-type، مشخص کننده نوع داده ئی است که قصد مرتب سازی آن وجود دارد( عددی و يا حرفی ) . مثلا" در صورتيکه قصد مرتب سازی اعداد 1 ، 10 ، 11، 5 را داشته باشيم ، نوع data-typeمی بايست textدر نظر گرفته شود . در چنين حالتی خروجی بصورت : 5 ، 11، 10 ، 1 خواهد بود . در صورتيکه مرتب سازی بصورت عددی انجام شود ، مقدار خصلت data-typeمی بايست numberدر نظر گرفته شود . در چنين حالتی نتيجه عمليات مرتب سازی بصورت 11 ، 10 ، 5 ، 1 می باشد . خصلت data-typeدارای مقدار پيش فرض ، textمی باشد. خصلت order، پارامتر صعودی و يا نزولی فرآيند مرتب سازی را مشخص می نمايد. مقدار پيش فرض اين خصلت ascendingمی باشد . خصلت case-order، اولويت حروف را مشخص می نمايد (حروف بزرگ و يا کوچک ). مثلا"، در صورتيکه برای خصلت case-orderمقدار upper-firstدر نظر گرفته شده باشد و قصد مرتب سازی داده هائی نظير : A B a bرا داشته باشيم ، نتايج بصورت : A a B bخواهد بود . در صورتيکه مقدار خصلت فوق ، lower-firstدر نظر گرفته شود ، نتيجه عمليات مرتب سازی بصورت : a A b Bخواهد بود. مقدار پيش فرض خصلت فوق بستگی به خصلت langداشته که زبان سند مورد نظر را مشخص می نمايد. زمانيکه ، برای خصلت lang، مقدار enدر نظر گرفته شود ، خصلت case-orderدارای مقدار پيش فرض، upper-firstاست .
مثال يک :
هدف : استفاده از عنصر xsl:sortبه منظور مرتب سازی مشخصات دانشجويان بر اساس نام خانوادگی
توضيحات : درمثال فوق ، از فايل XMLزير استفاده شده است ( فايل XMLحاوی نام و نام خانوادگی پنج دانشجو می باشد ) .
Student XML file |
<?xml version="1.0" encoding="utf-8" ?> |
فايل XSLاستفاده شده برای مثال يک :
Student XSL file for sortting |
<?xml version="1.0" encoding="UTF-8" ?> |
خروجی : پس از مقداردهی خصلت های DocumentSourceو TransformSourceکنترل سرويس دهنده XML، به ترتيب به فايل های XMLو XSL، خروجی زير نمايش داده می شود .
ساختار تصميم گيری
در زمان ايجاد يک StyleSheet،در برخی حالات نيازمند اتخاذ تصميم در رابطه با نحوه نمايش نتايج می باشيم . XSLTدارای عناصری است که با استفاده از آنان می توان کنترل روند پردازش را در Stylesheetانجام داد. هر زبان برنامه نويسی امکان اتخاذ تصميم را از طريق کد نوشته شده در اختيار برنامه نويسان قرار می دهد . XSLTاز اين قاعده مستثنی نبوده و امکان تصميم گيری بر اساس شرايط موجود را با استفاده از دو عنصر <xsl:if> و <xsl:choose> فراهم می نمايد . گرامر عمومی دو عنصر فوق، بصورت زير می باشد :
xsl:if element syntax |
<xsl:if test="Boolean expression" |
xsl:choose element syntax |
<xsl:choose> |
برای هر دو عنصر <xsl:if> و <xsl:choose> ، عبارت منطقی ( Boolean expression> يک عبارت XPathبوده که به يک مقدار منطقی تبديل خواهد شد.عبارت XPathبر اساس قوانين زير به يک عبارت منطقی تبديل می گردد :
- در صورتيکه مقدار عددی بوده و ارزش آن صفر باشد ، مقدار Falseدر نظرگرفته خواهدشد.برای هر مقدار غيرصفر( مثبت و يا منفی ) ، مقدار Trueدر نظر گرفته می شود .
- در صورتيکه مقدار يک رشته باشد و طول آن بيش از صفر باشد ، مقدار Trueدر نظر گرفته خواهد شد .
- در صورتيکه مقدار يک مجموعه گره باشد و مقدار آن غيرتهی باشد ، مقدار Trueدر نظر گرفته خواهد شد .
- هر نوع ديگر اشياء بر اساس نوع شی به يک مقدار منطقی تبديل خواهند شد .
مثلا" عبارت : < "xsl:if test = "name> ، در صورتيکه يک عنصر با نام <name> غيرتهی وجود داشته (عضوء context node) ، مقدار Trueو در غير اينصورت مقدار Falseدر نظر گرفته خواهد شد.
عنصر <xsl:if> ، ساده ترين ساختار تصميم گيری ارائه شده در XSLTمی باشد. عنصر فوق ، مقدار عبارت را بررسی ( ارائه شده توسط خصلت test) و در صورتيکه مقدار آن Trueباشد ، محتويات عنصر <xsl:if> ، بررسی و اجراء خواهند شد .
xsl:if element Example |
<xsl:if test="name" > نام مورد نظر پيداگرديد</xsl:if> |
در مثال فوق ، در صورتيکه عنصر <name> بعنوان فرزندی از context nodeوجود داشته باشد ، عبارت " نام مورد نظر پيدا گرديد " ، نمايش داده می شود.
عنصر <xsl:choose> ، نسبت به <xsl:if> امکانات بيشتری را بمنظور اتخاذ تصميم ارائه می نمايد . ساختار فوق، امکان تصميم گيری پيجيده تری را فراهم می نمايد.در عنصر فوق ، می توان از يک گزينه "پيش فرض " ، نيز استفاده نمود .
xsl:choose Example : |
<xsl:choose> |
در صورتيکه عنصر <number> ، شامل يک مقدار عددی بيش از 2000 باشد ، عبارت : "يک عدد بزرگ " در خروجی نمايش داده خواهد شد . در صورتيکه مقدار عنصر فوق بيش از 1000 باشد .، عبارت : "يک عدد متوسط " در خروجی نمايش داده می شود. در ساير حالات ، عبارت : " يک عدد کوچک" در خروجی نمايش داده خواهد شد .در مثال فوق از يک تابع XPathاستفاده شده است ( تابع ( ) number) .تابع فوق،مسئوليت تبديل مقدار عنصر <number> به يک مقدار عددی را برعهده دارد . فراموش نکنيم که تمامی اطلاعات موجود در يک فايل XML، صرفا" بصورت متن بوده و XSLTهمواره با داده موجود در يک فايل XMLبصورت textبرخورد خواهد کرد( مگراينکه ، با صراحت به XSLTاعلام گردد که می بايست در اين رابطه تبديلی صورت پذيرد) . در صورتيکه از تابع numberاستفاده نشود ، XSLTداده موردنظر را بصورت Textبررسی می نمايد. ( در مثال فوق در مقابل علامت "<" از "gt" استفاده شده است ).
مثال دو :
هدف : استفاده از عنصر xsl:ifبه منظور اتخاذ تصميم و نمايش اطلاعات دانشجو با نام " خسرو ايرانی "
توضيحات : درمثال فوق ، از فايل XMLارائه شده درمثال يک ( فايل XMLحاوی نام و نام خانوادگی پنج دانشجو می باشد ) و فايل XSLزير استفاده شده است.
Student XSL file : If Example |
<?xml version="1.0" encoding="UTF-8" ?> |
خروجی : پس از مقداردهی خصلت های DocumentSourceو TransformSourceکنترل سرويس دهنده XML، به ترتيب به فايل های XMLو XSL، خروجی زير نمايش داده می شود .
مثال سه :
هدف : استفاده از عنصر xsl:chooseبه منظور اتخاذ تصميم و نمايش اطلاعات دانشجو با نام " خسرو ايرانی " و "پيمان دوستی "
توضيحات :درمثال فوق ، از فايل XMLارائه شده درمثال يک ( فايل XMLحاوی نام و نام خانوادگی پنج دانشجو می باشد ) و فايل XSLزير استفاده شده است.
Student XSL file for sortting |
<?xml version="1.0" encoding="UTF-8" ?> |
خروجی : پس از مقداردهی خصلت های DocumentSourceو TransformSourceکنترل سرويس دهنده XML، به ترتيب به فايل های XMLو XSL، خروجی زير نمايش داده می شود .
/خ
{{Fullname}} {{Creationdate}}
{{Body}}