820 likes | 1.01k Views
Стилови езици Езици за трансформиране на XML документи - XSLT. XML стилови езици. Форматирането на XML документ се съхранява в отделен документ, наречен stylesheet .
E N D
Стилови езициЕзици за трансформиране на XML документи - XSLT
XML стилови езици • Форматиранетона XML документ се съхранява в отделен документ, наречен stylesheet. • Използва сеstylesheet processorза обединение на XML информацията с форматирането (стиловата страница) за да се получи нов “читаем” документ. • Stylesheetsсе пишат на стилови езици. • Може да се разработи собствен стилов език и стилов процесор, но XML ползва два стандартизирани стилови езика, които се подържат от всички програмни средства. • CSS (Cascading Style Sheets) • XSL (Extensible Style Language)
XML стилови езици • По принцип таблиците със стилове (style sheets) служат за подобряване на представянето на XML данните, а таблиците с каскадни стилове (CSS) в частност се използват за задаване на медийни характеристики. • W3C и изграждане на архитектурата на слоя на представяне – CSS1 и CSS2. • Стилът се състои от набор от CSS свойства със зададени стойности. • Декларацията на CSS стила за всеки тип таг – правило. • Сборът от правилата в рамките на тага – таблица със стилове. • Името на тага – селектор за правилото. • Каскаден стил – влияе не само на елемента, а и на наследниците му.
XML стилови езици • Стилове се присвояват към XML документ чрез инструкция за обработка. • Примерен XML документ notes.xmlс присвоен стил. <?xml-stylesheet type=“език_стилове” href=stylesheetURL?> <?xml-stylesheet type=“”text/css” href=“notes.css”?> <document> <body> <note type=“warning”>This is a warning.</note> <note type=“tip”>This is a tip.</note> <note type=“resource”>This is a resource.</note> </body> </document>
XML стилови езици • Изграждане наCSS таблицата със стилове notes.cssс механизмите на CSS2 спецификацията. • Правилото noteще открие всички бележки, независимо от атрибута typeсъответна граница и рамка. note {margin-left:.5in;width:250px;border-width:3px;border-style:outset; border-color:blue;position:relative;background-color:lightBlue;} note[type=“warning”] {background-color:red;border-color:red;} note[type=“tip”] {background-color:yellow;border-color:yellow;} note[type=“resource”] {background-color:green;border-color:green;}
XML стилови езици Вътрешни XML таблици с каскадни стилове • Включването на правила за таблица със стилове в елемент от XML документ става с именован идентификатор. <?xml-stylesheet type=“”text/css” href=“#myStyleSheet”?> <document> <st id= “myStyleSheet”> . . . </st> . . . </document>
XML стилови езици Използване на директива @media в файл css • CSS позволява групиране на правила, които да се прилагат към определен тип медиа, като за едно и също правило могат да се присвояват различни характеристики. Изход на екран или принтер @media screen,print { . . . } @media aural { note[type=“tip”] {volume:medium; voice-family:FriendlyAdvice; } . . . } @media tty,braille { note[type=“tip”]:before {content: “[TIP]”; } note[type=“tip”]:after {content: “[END TIP]”; } . . . } Изход към гласов синтезатор Изход към телетипна или Брайлова машина
XML стилови езици • CSSе създаден за HTML, но работи и с XML. • CSS е механизъм за изобразяване на XML документ в браузера. • Повечето от средствата за Web дизайн позволяват изобразяване на страницата и последващо генериране на CSS скрипт за постигане на исканото (позициониране; фонови изображения; задаване на позиции и мерни единици; работа със списъци и таблици, текст и шрифтове,..). • CSSима два съществени недостатъка: • Не може да създаде извеждане с добро качество. • Може само да “украсява” документа, а не може да променя последователността на информацията. Това налага предварителна стъпка за преобразуване на документа преди използване на CSS.
XML стилови езици • XSLе XML-базиран стилов езикза създаване на таблици със стилове, който преодолява недостатъците на CSS. • Главен недостатък: няма средство за генериране на XSL stylesheets(ръчно се пише). • XSL е свързан с 3 стандарта: • Трансформиране (XSLT). XML документ се трансформира в друг формат (друг XML; DHTML или XHTML, който работи на браузер с вградени JavaScript или VBScript). • Указване (XPath), който позволява да се идентифицира отделна част от XML. • Форматиране (XSL) – процес на прилагане на форматиране към информацията без да се пишат специфични за изходното устройство инструкции.
XML стилови езици • Основен принцип е, че се създават правила, които свързват форматиращи и обработващи инструкции към типовете информация в документа. • Правилата се поставят в стиловата страница под формата на темплейти, които указват елементи от информация. • По време на изпълнение, т.нар.“stylesheet processor”получава XML документа и стиловата страница.Тези процесори се съдържат във всяко приложение – браузери и средства за създаване на Web страница. • Тази техника се нарича декларативна, а не процедурна (декларират се стилови правила, а не се пишат процедурни инструкции).
XML стилови езици • XSL може да се разглежда като организиран в две части (два езика): XSLT и XSLFO ( Formatting Objects). • CSS и XSLFO са близки по действие. • Действие на XSL процесор: • Зареждане на изходния документ (т.нар. сорс) • Осъществява се придвижване от корен към листата и на всяка стъпка се проверява за съвпадение на съответния връх и темплейта. • При съвпадение, процесорът генерира върхове в резултантното дърво. • При xsl:apply-templatesсе придвижва към наследниците на текущия връх и повтаря процеса. • xsl:apply-templatesе рекурсивното извикване на стиловата страница.
XML стилови езици • Задачата, която XSLT решава – товае трансформация. • Защо е необходима трансформация на XML документите? • XSLT( eXtensible Stylesheet Language Transformations)е език, койтоспоредпървата фраза наспецификацията (намираща се на адрес http://www.w3.org/TR/xslt), е създаден за трансформиране на един XML документ в друг. • По-общо казано: XSLT е език за трансформиране на структурата на един XML документ.
Защо да се трансформира XML? • XML е първоначално предназначен за комуникация междусофтуерните системи. Като такъв XML удовлетворява две задължителни изисквания: • Разделяне на данните от тяхното представяне. • Предаване на данни между приложенията.
Защо да се трансформира XML? • За целите на комуникацията, понякога е необходим документ, който да може да се изведе на екран или отпечата: например HTML файл, PDF файл или дори звуков такъв. • Преобразуването на XML в HTML за целите на извеждането енай-масовото приложение на XSLT днес. • За да се пренасят данни между различни приложения, е необходимо трансформиране на данните от модела на едно приложение в модел, използван от друго. • За извличане и комбиниране на данни от множество XML документиза да се генерират други XML документи.
Основна идея на XSLT • XSLT stylesheet: • Е декларативен и използва съвпадение на шаблони иtemplatesза специфициране на трансформацията. • Е по-изразителен от CSS stylesheet. • Може да извършва произволни изчисления.
Основна идея на XSLT • В Web, XSLT трансформацията може да се прави или от клиента(т.е. Explorer или Mozilla) или от сървъра – т.е. или катоpre-processing, илиon-the-fly • В бъдеще Web браузерите трябва да разбират XSLT. • Типичен език, разбиран от браузерите еXHTML. • XSLT е широко използван. • Не се ограничава само със стилизиране на документа, а може да извършва и реорганизиране на структурата. • Добавяне и изтриване на елементи или поставяне на таблица на съдържанието в началото на документа. • Преобразуване между различни DTD или различни версии.
Как XSLT трансформира XML? • Обикновено има два аспекта на този процес: • Първата стъпка е структурната трансформация, при която данните се преобразуват от структура на входящ XML документ в структура, която съответства на искания изход. • Втората стъпка е форматирането, при която новата структура се извежда в искания формат: HTML или PDF.
Как XSLT трансформира XML? • Структурата данни, която е резултата на първата стъпка може да се изведе като HTML, текстов файл или XML. • HTML изходът позволява информацията да се види директно чрез браузер от потребителя или да се въведе във всеки модерен текстов процесор. • Изходът във вид на текстов файл позволява форматиране на данните по начин, който съществуващото приложение да възприеме. • XML изходът позволява данните да се предоставят на тези приложения, които възприемат XML директно.
Как XSLT трансформира XML? • Първата стъпка може да включва избор на данни, агрегация и групирането им, сортиране или извършване на аритметични преобразувания (например преобразуване на сантиметри в инчове). • Преди появяването на XSLT е била възможна обработката на входни XML документи само чрез писане на потребителски приложения. • Така, че въпросът е как се използва XSLT за да извърши трансформации на XML по-добре от писане на “потребителски приложения"? • XSLT преобразува XML документът в “дървовидна структура". Това е структурата на документа, която XSLT манипулира, а не самия документ.
Как XSLT трансформира XML? • XSLT е език от високо ниво, посредством който е възможно придвижването по дървото, избора на определени върхове и извършване на манипулации върху тях. XSLT и SQL -Аналогия • Силата на релационните бази данни не е в структурата на данните; тя е в езика, който обработва данните - SQL. • По същия начин, XML само дефинира структурата на данните. • Създаденият за да манипулира структурата на XML данните в случая език е XSLT.
Как XSLT трансформира XML? XSLT и SQL - Аналогия • Обработващият език трябва да включва синтактични структури за избор на данни.ВSQL, това еSELECTинструкцията. Еквивалентното вXSLT еXPathизраза. • Синтаксисът наXPathпозволява извличане на върхове от XML документа, базирано на път през XML документаили контекста на поява на върховете. • Той позволява достъп до определени върхове, съобразявайки се с йерархията и структурата на документа. • След това XSLT се използва за манипулиране на резултатите (пренареждане на избраните върхове, конструиране на нови върхове и т.н.).
Как XSLT трансформира XML? XSLT процесори • Главната роля на един XSLT процесор е да приложи стиловата страница на XSLT към XML документ и да създаде резултатен документ. Важно е да се отбележи, че се работи с XML приложения и следователно съответстващите структури са дървовидни. • В действителност XSLT процесорът обработва три дървовидни структури.
Как XSLT трансформира XML? • Как работят XSLT таблиците със стилове? • Те са изградени от структури, наречени шаблони (templates). Шаблонът определя какво да се търси в изходното дърво и какво да се поставя в резултантното. • XSLT е написан на XML, т.е. Използват се елементи и атрибути за създаване на таблиците със стилове. Елемент за дефиниране на шаблона <xsl:templatematch=“first”>First tag found!</xsl:template> атрибут Съдържание на шаблона • Шаблонът ще се приложи към всички елементи с име <first>в изходното дърво. • В резултантното дърво ще се извежда текста First tag found!
Как XSLT трансформира XML? • Как работят XSLT таблиците със стилове? • Елемент <xsl:value-of> взима информация от изходното дърво и я добавя в резултантното. • Или произволното съдържание на всеки елемент <first>Произволно съдържание</first>ще се добави в резултантното дърво с: • Елемент <xsl:for-each> работи като шаблон в шаблона и се прилага за подмножество от елементи по следния начин: <xsl:template match=“first”><xsl:value-of select=“.”/></xsl:template> <xsl:template match=“first”> <xsl:for-each select=“елемент”/> </xsl:template>
Как XSLT трансформира XML? • Как работят XSLT таблиците със стилове? <?xml version="1.0"?> <strings> <s>Para 1</s> <s>Para 2</s> <s>Para 3</s> </strings> За xml документа <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match=“/”> . . . <xsl:for-each select=“/strings/s”/> <P><xsl:value-of select=“.”/></P> </xsl:for-each> . . . </xsl:template> </xsl:stylesheet> Прилага се за елементи s Ще се изведе съдържанието на s елементите
Как XSLT трансформира XML? • Пример: Ще използваме XSLT за трансформиране на прост XML документ. • Създаване на "Hello, world!" XSLT Стилова страница • Вход • Дървовидното представяне на документа е: XML документ <?xml version="1.0" encoding="iso-8859-1"?> <greeting>Hello, world!</greeting>
Как XSLT трансформира XML? • Изход • Търсеният изход е следния HTML файл, който сменя заглавието на браузера в "Today's Greeting" и извежда поздрава от изходния XML файл: <html> <head> <title>Today's Greeting</title> </head> <body> <p>Hello, world!</p> </body> </html>
Как XSLT трансформира XML? • XSLT стилова страница за извършване на трансформацията: <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>Today's greeting</title> </head> <body> <p><xsl:value-of select="greeting"/></p> </body> </html> </xsl:template> </xsl:stylesheet> правило префикс
Как XSLT трансформира XML? Изпълнение на стиловата страница • Възможно е изпълнение на стиловата страница с използване на произволен XSLT процесор. • Със Saxon, стъпките са както следва: • Download на процесора • Инсталиране на изпълнимия файлsaxon.exeв подходяща директория, която да бъде текуща. • С Notepad, се въвеждат двата описани вече файла с имена hello.xml и hello.xsl в тази директория. • В прозореца на MSDOS: • Start | Programs | MSDOS Prompt • В command promptвъведи: • saxon hello.xml hello.xsl • Виж изведения на стандартния изход HTML.
Как XSLT трансформира XML? • Ако искате изходът да бъде на ваш браузер, съхранете изхода на командния ред като HTML файл по следния начин: Saxon hello.xml hello.xsl > hello.html Какво в същност е действието? • XSLT стиловата страница е XML документи започва със стандартното XML заглавие. • То определя документа като стилова страница. • xmlns:xslатрибута е декларация на XML област на данни, определящ, че префиксътxslще се използва за елементидефинирани в W3C XSLT спецификацията ( XSLT ползва XML области на данни и всички имена на елементи дефинирани в стандарта с префикс за тези области за да се избегне объркване на имената с тези от изходния документ ).
Как XSLT трансформира XML? • Атрибутът за версия определя, че стиловата страница ползва белезите на версията 1.0 на XSLT стандарт. • Елементът <xsl:template>определя правило на темплейта при обработката на определена част на документа. • Атрибутътmatch="/"определя, че това правило се включва при започването на обработката на документа. Тук«/»е израз в XPath, който определя коренния връх на документа. XPath използва«/»за представяне на йерархията на съдържането на XML документа.
Как XSLT трансформира XML? . . . <html> <head> <title>Today's greeting</title> </head> <body> <p><xsl:value-of select="greeting"/></p> </body> </html> . . . Тяло на темплейта При включване на правилото, тялото на темплейта определя какъв изход да се генерира. По-голямата част от това тяло е последователност от HTML елементи и текст, който да се копира в изходния файл. Има едно изключение: <xsl:value-of>е елемент, който представляваXSL инструкция защото използва префиксxsl. Тази инструкция копира стойността на върха от входния документв изходния.
Как XSLT трансформира XML? • АтрибутътSELECTна елемента определя върха, за който ще се оценява стойността.Изразът на XPath “greeting”означава: “намери множеството на всички елементи<greeting>, които са дъщерни на върха, обработван от това правило. В случая това означава елемент<greeting>, който е най-отдалечен • Инструкцията<xsl:value-of>взима текстовия връх на този елемент и го копира на изхода на съответното място, т.е. В генерирания елемент тип <p>. • В края остават двата завършващи реда на започнатото. . . . </xsl:template> </xsl:stylesheet>
Как XSLT трансформира XML? • Защо бихме искали да поставим today's greetingв отделен XML файл и да го извеждаме, използвайки стилова страница? • Това е необходимостта за показване на поздрава по различни начини в зависимост от контекста; например да се показва различно на различните устройства. В този случай може да се пише различна стилова страница за трансформиране един и същи документ по различни начини. Но това поставя въпроса за това как стиловата страница ще приема избраното по време на изпълнение.На този въпрос няма еднозначен отговор.
Модел на действие на XSLT • Стиловата страница на XSLT се състои от темплейтни правила (template rules). template rule = pattern + template • За даден входен XML документ, изходът се получава: • Дървото на сорса се обработва чрез обработка на върха-корен (връх-корен на документ е специален връх, който има коренен елемент като единствен наследник). • Единствен връх се обработва чрез: • Намиранена темплейтно правило с най-добро покритие с шаблона • Създаване на екземплярна темплейта (създава резултантен фрагмент + продължаване на обработката) • Списък от върхове се обработва чрез обработката последователно на всеки връх и конкатенация на резултатите.
Структура на стиловата страница на XSLT • Стиловата страница на XSLT е добре формиран XML документ. <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/REC-html140"><xsl:output method=‘html’/> . . <xsl:template match="pattern"> \ <!--template--> темплейтно правило (template rule)</xsl:template> / . . други елементи . </xsl:stylesheet> Области на данни (за разпознаване на XSLT елементи) XSL речник+ резултат HTML
Структура на стиловата страница на XSLT • Обръщане към стилова страница в XML документ. • Инструкция за свързване на стилова страница с документ за работа с Internet Explorer 5.0 • Документът може да се обърне към стиловата страница и чрез следната инструкция: • Новите браузери съдържат XSLT процесор. <?xml-stylesheethref = “simple – ie5.xsl” type = “text/xsl”?> Параметър за указване на типа стилова страница Параметър за указване на стилова страница <?xml-stylesheet href=“name_of_XSL_file.xsl“ type="text/xsl"?>
Използване на XSLT за извличане на информация • Стъпка 1: Извлича се информация от различни XML документи. • Получават се толкова различни XML документи, колкото са оригиналните. • Стъпка 2: Обединението на извлечените XML документи в един общ листинг. • Стъпка 3: Преобразуване на този листинг в HTML файл.
Използване на XSLT за извличане на информация • Пример на стилова страница за извличане на информация за: URL, title, abstract, dateот различни документи (т.е. получаване на нов по-малък XML файл). <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform/"> <xsl:template match=‘/article’> <article> <url><xsl:value-of select = ‘@fname’/>.html </url> <title> ><xsl:value-of select= “title”/> </title> <abstract> ><xsl:value-of select= “abstract”/> </abstract> <date> ><xsl:value-of select= “date”/> </date> </article> </xsl:template> </xsl:stylesheet>
Използване на XSLT за извличане на информация • Извлечената информация за1 документ: URL, title, abstract, dateима вида: • Сливане на получените документи (с различни средства, но резултатът е файлindex.xml) <article><url>19990101_xsl.html</url><title>XML Style sheets</title> <abstract> Style sheets add flexibility to document viewing. </abstract> <date>January 1999</date></article> <?xml version="1.0" encoding="iso-8859-1"?> <articles> . . . </articles>
Използване на XSLT за извличане на информация • Стилова страница за преобразуване на извлечената в index.xml информация в HTML файл. <?xml version="1.0" encoding="iso-8859-1"?> 1/2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform/"> xmlns="http://www.w3.org/TR/REC-html140"> <xsl:output method=“html”/> <xsl:template match=“/”> <HTML> <HEAD> <TITLE>Pineapplesoft Link:Archives <TITLE> </HEAD> <BODY> <UL> <xsl:for- each select=‘articles/article’> <LI><A> <xsl:attribute name=“HREF”> <xsl:value-of select=“url”/> </xsl:attribute>
Използване на XSLT за извличане на информация • Стилова страница за преобразуване на извлечената в index.xml информация в HTML файл. <xsl:value-of select=“title”/> 2/2 </A><BR/> <xsl:value-of select=“date”/><BR/> <xsl:value-of select=“abstract”/> </LI> </xsl:for-each> </UL> </BODY> </HTML> </xsl:template> </xsl:stylesheet>
XSLT – Patterns (шаблони) • Шаблоните са XPath изрази. • Даден връх съвпада с даден шаблон ако: • Върхът е резултат от изчислението на шаблона при отчитане на някакъв текущ връх. • Операционно (и интуитивно), съвпадението с шаблона се определя най-добре от дясно на ляво. • Структурата на XPath израз можеше да се представи: pattern: location path | ... | location path locationpath: /step/ ... // ... /step step: axis nodetest predicate • Шаблонът е множество отXPath location paths (локализиращи пътища), разделени с| (обединение) • ограничения: тук са разрешени самоchild (по подразбиране) иattribute(@) axes(рамена). • разширения: локализиращ път може да започва сid(..) или key(..)
XSLT – Patterns (шаблони) • Пример • Търси съвпадение на елементиsubsection, които се намират или катоchildелементиsection, или като наследници (descendants) на елементиappendix. match="section/subsection | appendix//subsection"
XSLT – Patterns (шаблони) • Илюстриране на механизма за намиране на множеството върхове, съвпадащи с шаблона a//b/c
XSLT - Templates • Те конструират фрагментите на резултантното дърво (8 вида). • Литерални фрагменти: • Текстова константа (character data) • Елемент, който не принадлежи на XSL област на данните • <xsl:text ...> ... </...> (като текст, но с празни позиции) • <xsl:comment> ... </...> (вмъква коментар<!--...-->) Пример: <xsl:template match="..."> this text is written directly to output when this template is instantiated </xsl:template>