xml - xsl кратко упътване

Напоследак в web започва да се пълни със сайтове ползващи xml и xsl комбинирани със javascript или някакъв serverside език...

Много хора смятат че в това е бъдещето, и сигурно са прави...

Да започнем от там какво е това xml...

EXtensible Markup Language е език съсдаден да описва информацията и да я доставя до потребителя структурирана като се фокусира изцяло в/у съдържанието,а не върху външния вид... Таговете в xml не са предефинирани... това означава че всеки developer може да използва свои тагове като се придържа към някакви собствени правила. Таговете в xml са case-sensitive и трябва да са вградени правилно един в друг (b›iThis text is bold and italic/b/i - невалиден xml). Всички елементи на xml трябва да са посравени вътре във един root елемент (подобно на тага body във html). Всики елементи в xml трябва да имат отварящ и затварящ таг. Имената на елементите в xml могат да съдържат букви, цифри и други символи, но не могат да започват със цифра, пунктуационен знак или съчетанието "xml" (Xml, XML и т.н). Всички елементи в xml могат да имат атрибути...

Атрибутите в xml предоставят допълнителна информация за дадения елемент. Те винаги са оградени в кавички, като е възможно използването и на единични и на двойни кавички. Атрибутите могат да се използват вместо child елементи, но не е препоръчително.

Като цяло най доброто описание на xml е: Софтуерно и хардуерно независим инструмент за обмен на информация.

Какво е предимството да използваш xml?
1. Промяната на информацията и промяната на изгледа не са пряко свързани.
2. Позволява на потребителите да ползват предоставената от вас информация не само чрез браузър но и с различни софтуерни приложения (например приложения които изговарят информацията за да е достъпна тя и за слепи хора)
3. Тъй като wap е произлезнал от xml вашите сайтове могат да станат достъпни и през мобилни телефони

Какви са недостатъците?
1. Тъй като таговете не са предефинирани различните приложения могат да се объркат и да не предадът информацията коректно
2. Когато във xml документа има грешка (например липсващ затварящ таг) това предизвиква спиране на програмата (браузъра)

Показване на xml чрез eXtensible Stylesheet Language

Xsl е предпочитаният език за дефиниране на стилове за xml. Тъй като таговете в xml не са предефинирани (‹table› може да е обикновенна таблица, но може и да е мебел) xsl се използва за да "опише" на браузъра за какъв елемент става въпрос и как трябва да бъде показан той.

По надолу ще става въпрос за xslt - под ниво на xsl което се използва за трансформиране на xml в html още преди браузъра да го е показал.

Декларирането на стил става със тага ‹xsl:stylesheet› или ‹xsl:transform› (таговете са синоними така че може да се използва който и да е от тях).

Следващият важен елемент на един xsl документ е ‹xsl:template›. Той се използва за дефиниране на темплейт за дадени елементи на xml-а. За да се покаже кой темплейт на кой елемент отговаря се използва атрибута "match" (Например: ‹xsl:template match="/"› дефинира темплейт за целия документ)

За да се вземе стойност от xml документа и да се постави във резултата от трансформацията се използва елемента ‹xsl:value-of›. За да покажете на value-of коя точно стойност да вземе от xml използвайте атрибут "select". Особенното при този атрибут е че той дефинира път подобен на път от файловата система (Например при ‹xsl:value-of select="catalog/cd/title" /› се има предвид във root тага catalog да се намери под-тага cd и под-под-тага title)

Прости цикли от типа "за всеки (foreach)" се реализират със тага ‹xsl:for-each›. Вътре в тези цикли може резултатите да се филтрират също със атрибута "select". Например когато имаме xml документ описващ каталог със CD дискове на различни изпълнители ние можем да покажем всички дискове на Металика със следният код:

  ‹xsl:for-each select="catalog/cd[artist='Metallica']"›
   ‹tr›
      ‹td›‹xsl:value-of select="title"/›‹/td›
      ‹td›‹xsl:value-of select="artist"/›‹/td›
   ‹/tr›
   ‹/xsl:for-each›

За сортиране по дадена колона (например по изпълнител) можем да използваме ‹xsl:sort select="artist"›

За прилагане на условия може да се използват ‹xsl:if› и ‹xsl:choose›... ‹xsl:choose› е синоним на case тага във други програмни езици...
Примери: (оточнявам че по долу няма грешка... за сравнение се използва кода на по-голямо и по-малко... в случая вместо › е >)

‹xsl:if test="price > 10"›
   ‹tr›
      ‹td›‹xsl:value-of select="title"/›‹/td›
      ‹td›‹xsl:value-of select="artist"/›‹/td›
   ‹/tr›
‹/xsl:if›

или

‹xsl:choose›
‹xsl:when test="price > 10"›
   ‹tr style="background: #FF0000;"›
      ‹td›‹xsl:value-of select="title"/›‹/td›
      ‹td›‹xsl:value-of select="artist"/›‹/td›
   ‹/tr›
‹/xsl:when›
‹xsl:otherwise›
   ‹tr›
      ‹td›‹xsl:value-of select="title"/›‹/td›
      ‹td›‹xsl:value-of select="artist"/›‹/td›
   ‹/tr›
‹/xsl:otherwise›
‹/xsl:choose›

Ако искаме да извикаме темплейт от друг темплейт се използва ‹xsl:apply-templates select="името на темплейта който викаме"›. Пример:

‹xsl:template match="cd"›
  ‹p›
      ‹xsl:apply-templates select="title"/›
      ‹xsl:apply-templates select="artist"/›
  ‹/p›
‹/xsl:template›

‹xsl:template match="title"›
    Title: ‹span style="color:#ff0000"› ‹xsl:value-of select="."/›‹/span› ‹br /›
‹/xsl:template›

‹xsl:template match="artist"›
    Artist: ‹span style="color:#00ff00"› ‹xsl:value-of select="."/›‹/span› ‹br /›
‹/xsl:template›

 

Ако има неточности ми сигнализирайте... ще ги оправя веднага.

Използвани материали:

http://www.w3schools.com/xml/default.asp
http://www.w3schools.com/xsl/default.asp