implementacja procesora xslt w języku ocaml
DESCRIPTION
Implementacja procesora XSLT w języku Ocaml. Patryk Czarnik. Prezentacja tematu pracy magisterskiej. Plan prezentacji. Omówienie tematyki XML DOM XSLT i XPath Co ja chcę zrobić Ocaml Części składowe mojego projektu. XML - Extensible Markup Language. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/1.jpg)
Implementacja procesora XSLT w języku Ocaml
Patryk Czarnik
Prezentacja tematu pracy magisterskiej
![Page 2: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/2.jpg)
Plan prezentacji
• Omówienie tematyki– XML– DOM– XSLT i XPath
• Co ja chcę zrobić– Ocaml– Części składowe mojego projektu
![Page 3: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/3.jpg)
XML - Extensible Markup Language
XML to sposób zapisywania w plikach tekstowych różnorakich danych z zachowaniem ich struktury
XML jest podzbiorem standardu SGML prostszym w parsowaniu, przetwarzaniu
![Page 4: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/4.jpg)
Przykładowy dokument XML
<?xml version="1.0" encoding="UTF-8"?>
<dokument data-wydania="2002.10.12">
<tytuł>Przykładowy dokument XML</tytuł>
<treść>Największym miastem w <kraj sym='pl'>Polsce</kraj> jest <miasto>Warszawa</miasto>.
</treść>
</dokument>
![Page 5: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/5.jpg)
Przykładowy dokument XML
<?xml version="1.0" encoding="UTF-8"?>
<dokument data-wydania="2002.10.12">
<tytuł>Przykładowy dokument XML</tytuł>
<treść>Największym miastem w <kraj sym='pl'>Polsce</kraj> jest <miasto>Warszawa</miasto>.
</treść>
</dokument>
deklaracja XML
![Page 6: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/6.jpg)
Przykładowy dokument XML
<?xml version="1.0" encoding="UTF-8"?>
<dokument data-wydania="2002.10.12">
<tytuł>Przykładowy dokument XML</tytuł>
<treść>Największym miastem w <kraj sym='pl'>Polsce</kraj> jest <miasto>Warszawa</miasto>.
</treść>
</dokument>
element główny dokument
![Page 7: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/7.jpg)
Przykładowy dokument XML
<?xml version="1.0" encoding="UTF-8"?>
<dokument data-wydania="2002.10.12">
<tytuł>Przykładowy dokument XML</tytuł>
<treść>Największym miastem w <kraj sym='pl'>Polsce</kraj> jest <miasto>Warszawa</miasto>.
</treść>
</dokument>
elementy tytuł, treść
![Page 8: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/8.jpg)
Przykładowy dokument XML
<?xml version="1.0" encoding="UTF-8"?>
<dokument data-wydania="2002.10.12">
<tytuł>Przykładowy dokument XML</tytuł>
<treść>Największym miastem w <kraj sym='pl'>Polsce</kraj> jest <miasto>Warszawa</miasto>.
</treść>
</dokument>
atrybuty data-wydania, sym
![Page 9: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/9.jpg)
Inne przykłady
...
<position-x>120</position-x>
<position-y>213</position-y>
<show-window-content/>
<stylesheet href="default.css"/>
...
ustawienia programów
![Page 10: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/10.jpg)
Inne przykłady
...
<row><id>63982</id><name>Smith</name>...</row>
<row><id>63987</id><name>Morgan</name>...</row>
<row><id>63988</id><name>Morgan</name>...</row>
...
dane z bazy danych
![Page 11: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/11.jpg)
Dowolna struktura - zaleta czy wada?
Dowolność w nazywaniu elementów, atrybutów oraz ich strukturze, zagnieżdżaniu...
Łatwo pisać, trudniej analizować
Do konkretnego zastosowania warto ustalić strukturę dokumentu XML, stworzyć pewną klasę dokumentów ("zastosowanie XML")
![Page 12: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/12.jpg)
DTD - Document Type Definition
• określa dopuszczalne nazwy elementów
• określa typ zawartości elementów
• dla danego elementu określa atrybuty, ich typ zawartości, wartość domyślną, ...
• definiuje encje, które można wstawiać w dokumencie
![Page 13: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/13.jpg)
Przykład DTD<!DOCTYPE dokument [
<!ELEMENT dokument (tytuł?, autor?, treść)>
<!ATTLIST dokument
data-wydania CDATA #IMPLIED>
<!ELEMENT tytuł #PCDATA>
<!ELEMENT treść (#PCDATA|miasto|kraj|br)*>
<!ELEMENT miasto #PCDATA>
<!ELEMENT kraj #PCDATA>
<!ATTLIST kraj sym CDATA "pl">
<!ELEMENT br EMPTY>
<!ENTITY RP "Rzeczpospolita Polska">
]>
![Page 14: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/14.jpg)
DOM - Document Object Model
O dokumencie można myśleć jak o drzewie, którego węzłami są elementy, atrybuty, węzły tekstowe
Formalnie określa to DOM - rekomendacja W3C (IDL i opis działania)
Najnowsza obowiązująca wersja DOM level 2 (13.11.2001) składa się z jądra i niezależnych modułów
![Page 15: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/15.jpg)
DOM - fragment IDL
interface Node { const unsigned short ELEMENT_NODE = 1; readonly attribute DOMString nodeName; attribute DOMString nodeValue raises(DOMException) on setting; readonly attribute unsigned short nodeType; readonly attribute Node parentNode; readonly attribute NodeList childNodes; readonly attribute Node firstChild; readonly attribute Node previousSibling; readonly attribute NamedNodeMap attributes; Node insertBefore(in Node newChild, in Node refChild) raises(DOMException); ... };
![Page 16: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/16.jpg)
Prezentacja danych XML
Często XML zawiera dane, które chcielibyśmy prezentować ludziom.
XML sam w sobie to tylko struktura, a nie znaczenie czy wygląd.
Tą samą treść można chcieć prezentować na wiele różnych sposobów.
Dobrze by było móc dodawać informację o prezentacji "obok" dokumentów XML.
![Page 17: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/17.jpg)
CSS - Cascading Style Sheets
Dość prosty system przypisujący elementom dokumentu obiekty wizualne i dający duże możliwości ich formatowania.
Nie pozwala na zmianę kolejności, wielokrotne używanie tych samych fragmentów dokumentu itp.
Składnia różna od XML utrudnia parsowanie.
Zaimplementowany w większości przeglądarek internetowych.
![Page 18: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/18.jpg)
Transformacje dokumentów
A
B C
D E
a
d b e c
![Page 19: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/19.jpg)
XSL = XSLT + FO
Extensible Stylesheet Language został zaprojektowany z myślą o prezentacji danych z dowolnych dokumentów XML.
Formating Objects to zastosowanie XML stworzone z myślą o prezentacji. Zawiera elementy typu "blok", "tabela", ...
XSL Transformation - język transformacji umożliwiający przekształcenie dowolnego dokumentu XML do FO.
![Page 20: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/20.jpg)
XSLT
XSLT pozwala na przekształcenia nie tylko do FO, ale do dowolnego dokumentu XML. Wynik przekształcenia można zapisywać jako XML, HTML lub płaski tekst.
Arkusz XSLT jest dokumentem XML, nie trzeba specjalnych parserów.
XSLT jest językiem deklaratywnym.
![Page 21: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/21.jpg)
Budowa arkusza XSLT
Arkusz XSLT składa się z szablonów. Każdy szablon mówi jak zamieniać jakiś węzeł (węzły) dokumentu wejściowego na fragment dokumentu wyjściowego.
Predefiniowany szablon przepisuje na wyjście zawartość tekstową elementu i wywołuje szablony dla podelementów.
Tranformacja polega na wywołaniu szablonu dla elementu głównego.
![Page 22: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/22.jpg)
Budowa arkusza XSLT
<xsl:stylesheet> <xsl:output method="html"/> <xsl:template match="bold"> <b> <xsl:apply-templates/> </b> </xsl:template>
<xsl:template match="/*/@id"> ID: <xsl:value-of select="."/> </xsl:template></xsl:stylesheet>
![Page 23: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/23.jpg)
Tworzenie węzłów wyjściowych
• wpisanie ich po prostu w treść szablonu
• elementy tworzące dokument wyjściowy<xsl:element name="elem"> wartość </xsl:element><xsl:attribute name="att"> wartość </xsl:attribute>
<xsl:text> tekst </xsl:text>
![Page 24: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/24.jpg)
Sterowanie
Warunkowe generowanie zawartości:<xsl:if test="warunek"> zawartość </xsl:if>
<xsl:choose> <xsl:when test="warunek1">...</xsl:when> <xsl:when test="warunek2">...</xsl:when> <xsl:otherwise>...</xsl:otherwise></xsl:choose>
Dla wszystkich węzłów określonych przez ścieżkę:
<xsl:for-each select="ścieżka"> zawartość </xsl:for-each>
![Page 25: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/25.jpg)
XPath - podstawy
XPath to język wyrażeń służący do adresowania części dokumentu XML.
Wynikiem wyrażenia XPath jest grupa węzłów (np. jeden element, jeden węzeł tekstowy, lista elementów, lista atrybutów...).
![Page 26: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/26.jpg)
XPath - podstawy
Oś, adresowanie wezłów w drzewie dokumentu podobne do adresowania plików w drzewie katalogów, rodzaj węzła.
following::/doc/section/paraattribute::styledescesant-or-self::node()
Możliwe są skróty i napisy wieloznaczne://miastosection/*/@id../para
![Page 27: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/27.jpg)
XPath - arytmetyka
W wyrażeniach mogą być zapisane warunki logiczne:
section[position()=3] section[3]a[@href]
XPath zawiera w sobie arytmetykę:/par[position() = (count(/par) div 2)]
Możliwe są skomplikowane wyrażenia:/*/table[@id < 10]//td[@t='a' or @t='b']/@*
![Page 28: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/28.jpg)
"Funkcje" w XSLT
W arkuszach XSLT można deklarować "zmienne":
<xsl:variable name="x"> wartość </xsl:variable>
<xsl:if test="$x > 7">...</xsl:if>
Szablony mogą mieć nazwy i parametry:<xsl:template name="tem1">
<xsl:param name="x" select="0"/>
...
</xsl:template>
![Page 29: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/29.jpg)
"Funkcje" w XSLT
Można wywołać szablon z określonymi parametrami:
<xsl:call-template name="tem1">
<xsl:with-param name="x" select="0"/>
</xsl:call-template>
Dopuszczalna jest rekurencja.
![Page 30: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/30.jpg)
Silnia w XSLT<xsl:template name="silnia"> <xsl:param name="n"/> <xsl:param name="res" select="1"/> <xsl:choose> <xsl:when test="$n > 1"> <xsl:call-template name="silnia"> <xsl:with-param name="n" select="$n-1"/> <xsl:with-param name="res" select="$n * $res"/> </xsl:call-template> </xsl:when> <xsl:otherwise> $res </xsl:otherwise> </xsl:choose></xsl:template>
![Page 31: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/31.jpg)
Ocaml
• Język programowania funkcyjnego, składniowo podobny do SML, gorliwy.
• Rozbudowany system modułów (sygnatury, struktury, funktory), rozłączna kompilacja.
• Efektywny kompilator i optymalizator.
• Imperatywne i obiektowe rozszerzenia.
![Page 32: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/32.jpg)
Podział na moduły
• Unicode
• DOM
• Parser XML
• XPath
• XSLT
![Page 33: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/33.jpg)
Unicode
Międzynarodowy standard kodowania znaków. Brak wsparcia w Ocamlu.
W moim module:
• 16 bitowe znaki i wybrane pary, int ?
• napisy - tablice lub listy tablic
• funkcje potrzebne do pracy z napisami
• odczyt i zapis do UTF-16, UTF-8 i jednobajtowych standardów ISO-8859-X
![Page 34: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/34.jpg)
DOM
Implementacja DOM level2 Core jak najbliższa rekomendacji.
Model obiektowy - wykorzystam obiektowe rozszerzenia Ocamla
![Page 35: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/35.jpg)
Parser
Oparty o napisy Unicodowe, implementacja od podstaw.
Tworzy obiekt dokumetu DOM (drzewo).
Należy pamiętać o DTD (inna składnia od prostej zawartości XML).
![Page 36: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/36.jpg)
XPath
• typy dla wartości wyrażeń (bool, number, text, node-set)
• parser wyrażeń
• i obliczanie... (ścieżki, warunki logiczne, arytmetyka)
![Page 37: Implementacja procesora XSLT w języku Ocaml](https://reader036.vdocuments.site/reader036/viewer/2022062519/56814c9d550346895db9ace8/html5/thumbnails/37.jpg)
Procesor XSLT
Korzystając z implementacji DOM i XPath dokonuje tranformacji dokumentów.
• dopasowywanie szablonów
• parametry i szablony (funkcje)
• serializer (do XML, HTML, tekstu)