XSLT – potężna broń świata XML? | Clever Age - otwarte usługi informatyczne


XSLT – potężna broń świata XML?

Technologia XSLT to podstawa konwertera zapewniającego kompatybilność produktu Microsoft Word z programami opartymi na standardzie ODF (takimi jak np. OpenOffice.org). Konwerter ten, sponsorowany przez firmę Microsoft, a wykonany przez Clever Age umożliwia pracę w środowiskach heterogenicznych, gdzie oba środowiska muszą współpracować ze sobą.

Zapraszamy do lektury artykułu opisującego technologię, która umożliwiła powstanie konwertera.

Znaczniki XML

XML (Extensible Markup Laguage) czyli rozszerzalny język znaczników, staje się coraz bardziej popularnym formatem plików służącym do przechowywania i przenoszenia danych w ustrukturalizowany sposób. Każdy dokument tego typu zapisywany jest w postaci ciągów tekstowych co umożliwia łatwą wymianę dokumentów pomiędzy różnymi systemami operacyjnymi. XML jest oparty o znaczniki posiadające formę podobną jak w przypadku języka HTML. Koncepcja ta zakłada jednak możliwość tworzenia własnych znaczników i formułowania w ten sposób nowych języków. W wielu programach komputerowych porzuca się tradycyjne formaty na rzecz plików w formacie XML. Przykładem tego mogą być choćby pliki opisujące konfigurację projektów stworzonych w programach Microsoft Office 2007, OpenOffice 2, C++ Builder lub Delphi.

Dlaczego XSLT?

Przechowywanie danych w różnego rodzaju znacznikach XML zaowocowało potrzebą przetwarzania i przenoszenia tychże danych. Jak więc najłatwiej przenieść dane zapisane za pomocą znaczników XML do innych znaczników XML? Oczywiście, za pomocą znaczników XML! Takich znaczników używa właśnie język XSLT (Extensible Stylesheet Language Transformations) czyli rozszerzalny arkusz języka transformacji. Do tej pory język XSLT był kojarzony przez wiele osób jako sposób przerabiania dokumentu XML w dokument HTML lub XHTML. Okazuje się jednak, że jest to doskonałe narzędzie do przekształcania w dowolny sposób dokumentu XML na inny dokument XML a także na dokument w postaci tekstowej. XSLT jest zbudowany z reguł opisujących sposoby zamiany poszczególnych znaczników XML na inne. Dany arkusz XSLT przetwarza wejściowy XML najpierw usuwając białe znaki i tworząc drzewo wyjściowe w ten sposób, że do każdego elementu XML znajdywany jest najlepiej do niego pasujący szablon. Jest on aplikowany, a elementy szablonu są traktowane jako instrukcje i są odpowiednio interpretowane. Możliwe jest także nazywanie elementów wynikowego dokumentu nazwami atrybutów dokumentu wejściowego, dodawanie i usuwanie elementów, zmiana sposobu zagnieżdżania elementów lub atrybutów itp. Dla wielu zastosowań jest to idealna technologia, pozwalająca na szybkie realizowanie integracji systemów przy minimalnym ryzyku projektów. Jest ona niestety wciąż mało znana poza środowiskami technicznymi, co powoduje małe zainteresowanie wybitnymi specjalistami z tej dziedziny na rynku pracy.

Charakterystyka języka

Polecenia języka XSLT są znacznikami tworzącymi poprawny dokument XML. Zaledwie kilka rodzajów znaczników tworzy pełnowartościowy język programowania. Za pomocą odpowiednich kombinacji znaczników można tworzyć nie tylko szablony pasujące do określonych elementów XML, ale także szablony nazwane, które wywoływane w odpowiednich miejscach spełniają podobną rolę jak w innych językach programowania funkcje definiowane przez programistę i dysponują podobnymi możliwościami. Język XSLT jest dodatkowo wspomagany przez funkcje języka XPath w ścieżkach używanych w znacznikach, które pozwalają na dopasowywanie szablonów do znaczników o różnych własnościach.

Wady i zalety

Wbrew obiegowym opiniom, ogromną zaletą XSLT jest jego szybkość w działaniu, szczególnie przy pobieraniu danych. Dzieje się tak ponieważ mamy do czynienia ze skompilowanym kodem XSLT a nie z interpretowanym kodem (np. PHP) który jeszcze interpretuje kod języka szablonów XML. Niestety, XSLT nie spisuje się tak dobrze podczas wykonywania instrukcji wymagających bardziej skomplikowanych operacji (np, pętle, rekurencja). Jest to spowodowane ograniczoną liczbą dostępnych znaczników oraz brakiem możliwości modyfikacji raz zadeklarowanych zmiennych. Instrukcje łatwo wykonywane w innych językach programowania, wymagaja skomplikowanych operacji, by mogły zostać użyte w XSLT. Inną zaletą XSLT jest gwarancja wygenerowania poprawnego kodu XML o określonej składni i formacie. Jeżeli chodzi o zastosowanie XSLT do tworzenia stron www poprzez transformację kodu XML w XHTML, a operacja przetwarzania wywołuje się po stronie klienta w przeglądarce, to na dzień dzisiejszy nie jest to dobre rozwiązanie. Ładowanie stron trwa dłużej, ponieważ XSLT nie może działać poprawnie w momencie kiedy nie są załadowane wszystkie dane i cały szablon. Do tego XSLT jest nową technologią i nie jest jeszcze obsługiwany przez wiele przeglądarek. Sposobem na uniknięcie tych kłopotów jest wywoływanie aplikacji XSLT po stronie serwera i przesyłanie do przeglądarki gotowego kodu XHTML lub HTML.

Przykład projektu w którym wykorzystano przekształcenia XSLT

Format XSLT został wykorzystany przez Clever Age przy tworzeniu dodatku Add-in Word 2007 służącego do otwierania i zapisywania plików w formacie ODF ( OpenDocument Format, stworzony przez Organization for the Advancement of Structured Information Standards ). Proces ten odbywa się na dzięki transformacji plików XML tworzących format ODF w drugi format XML (Open XML tworzący format plików Word 2007) przy użyciu XSLT.

Doświadczenie projektu jasno pokazuje, że użycie technologii XSLT było najlepszym możliwym sposobem na zamianę tych formatów. Dzięki niemu praca nad projektem posuwała się bardzo szybko do przodu. Różnica między tymi dwoma formatami okazała się tak duża, że część opcji była niestety niemożliwa do przetransformowania (np. animacja tekstu, zagnieżdżone tabele). Podczas tworzenia aplikacji pojawiły się także problemy których nie udało się rozwiązać za pomocą XSLT. Przykładem takiego problemu było ograniczenie maksymalnej ilości znaków jakie może zawierać paragraf w plikach ODT. W tego typu przypadkach transformacja wspomagana jest pre i post-processingiem wykonanym w C#. Wykonanie całej transformacji za pomocą C# spowodowałoby, że jej stopień komplikacji byłby znacznie większy, tworzenie aplikacji bardziej pracochłonne a jej czas działania dłuższy.

Więcej szczegółów na temat tej wtyczki można znaleźć na stronie odf-converter.sourceforge.net

Problemy w trakcie powstawania projektu

W trakcie powstawania projektu pojawiło się również wiele innych nie zawsze interesujących problemów.

Jednym z nich jest np. różnica w implementacji stylów paragrafu w formatach DOCX i ODT. Co ciekawe, nie zawsze dotyczyły one samej aplikacji, lecz także sposobu tworzenia plików testowych (np. w przypadku plików wygenerowanych za pomocą aplikacji Google Docs, standard ODT nie zawsze jest poprawnie respektowany).

Informacje na temat tych zagadnień, a także innych wydarzeń związanych z projektem można znaleźć na blogu projektu