1 Definiowanie typów dokumentów Część 4. XML Schema, RELAX NG, Schematron
2 Symbole wieloznaczne w XML SchemaSymbole wieloznaczne dla elementów (element wildcards). Symbole wieloznaczne dla atrybutów (attribute wildcards).
3 Definiowanie symboli wieloznacznychAtrybut namespace: ##any, ##other, lista wartości: nazwa przestrzeni nazw, ##targetNamespace, ##local. Atrybut processContents: strict, lax, skip. Przy pomocy atrybutu processContents można sterować tym, w jaki sposób sprawdzana jest poprawność elementów zastępujących. Atrybut ten może mieć jedną z trzech wartości: skip – oznacza, że procesor schematów nie sprawdza w jakikolwiek sposób poprawności strukturalnej elementów zastępujących i nie próbuje zlokalizować dokumentów schematów związanych z przestrzeniami nazw, do których należą te elementy. Każdy element zastępujący musi być jednak poprawnym składniowo XML-em i musi należeć do jednej z przestrzeni nazw określonej w symbolu wieloznacznym. lax – oznacza, że procesor sprawdzi poprawność tych elementów zastępujących, dla których może znaleźć deklaracje, i zgłosi błędy, jeśli te elementy nie są poprawne. Procesor schematów nie zgłosi natomiast błędów w odniesieniu do tych elementów, dla których nie znajdzie deklaracji. strict – oznacza, że procesor schematów spróbuje zlokalizować dokumenty schematów związane z przestrzeniami nazw, do których należą elementy zastępujące, i sprawdzić poprawność tych elementów. Procesor zgłosi błędy, jeśli nie znajdzie odpowiednich deklaracji, lub jeśli elementy są niepoprawne. (Priscilla Walmsley, Wszystko o XML Schema, WNT, 2008) Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
4 Symbole wieloznaczne – typowe zastosowanie
5 Czego nie można zamodelować w XML Schema? (1/2)Brak kontekstowego sprawdzania poprawności, np.: zawartość elementu cena-netto jest mniejsza lub równa od zawartości elementu cena-brutto, jeżeli wartością atrybutu sposób-transportu jest powietrze, to element środek-transportu ma zawartość samolot lub balon. Metody kontekstowego sprawdzania poprawności : zaprogramowane w kodzie aplikacji, transformacja XSLT, wykorzystanie innego języka schematów, np. Schematron. Transformacje XSLT w ogólności służą do przekształcania dokumentu XML w inny dokument XML, HTML lub tekstowy. Można je jednak także wykorzystać do walidacji – tworząc transformację, która generuje dokument zawierający np. listę komunikatów o błędach walidacji (jeżeli dokument jest pusty, walidacja przebiegła pomyślnie). Można także wykorzystać dedykowany język Schematron, w którym zapisuje się asercje dotyczące dokumentu XML, tzn. warunki, które muszą być spełnione w pewnym kontekście. Darmowe narzędzie o tej samej nazwie pozwala przekształcać zbiory reguł Schematronowych do postaci transformacji XSLT. Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
6 Czego nie można zamodelować w XML Schema? (2/2)Niejednoznaczność (ambiguity): egzemplarz jest poprawny względem kilku wzorców, np.: Niedeterminizm (non-determinism): procesor ma do wyboru wiele pasujących wzorców (produkcji gramatyki), np.: Równoważny model deterministyczny (nie zawsze istnieje): Język schematów, który radzi sobie z niejednoznacznością i niedeterminizmem: RELAX NG. Procesor schematów, analizując kolejne podelementy pewnego egzemplarza elementu, musi bez spoglądania wprzód i analizowania kolejnych podelementów wybrać jedyną pasującą gałąź modelu zawartości. Dlatego nie radzi sobie z modelami niedeterministycznymi i niejednoznacznymi. Na szczęście zwykle łatwo jest skonstruować równoważny model, który jest jednoznaczny i deterministyczny. Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
7 Schematron Język oparty na własnościach (asercjach), a nie na gramatyce: łatwe wyrażanie reguł walidacji kontekstowej, trudne, nieintuicyjne modelowanie struktury dokumentu, użyteczny w połączeniu ze zwykłą DTD lub schematem XML Schema. Status: norma ISO (ISO/IEC :2006). Implementacja referencyjna: przekształcenie (generator) XSLT, dla zadanego schematu Schematronowego, generuje XSLT sprawdzający poprawność dokumentów. Dostępnych kilkanaście implementacji. Implementacja referencyjna (wzorcowa) Schematronu działa w sposób następujący: dla zadanego schematu schematronowego, generuje przekształcenie XSLT, które pozwala na weryfikację dokumentów XML względem tego schematu. Jeśli przez to wygenerowane przekształcenie „przepuścimy” dokument XML, to jako wynik otrzymamy dokument XML zawierający listę błędów. Jeśli lista jest pusta (dokument wynikowy zawiera tylko pusty element główny), to oznacza to, że dokument jest poprawny względem schematu. Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
8 Język Schematron Własności ewaluowane w kontekście konkretnego węzła dokumentu: assert – własność, która musi być spełniona, report – własność, której spełnienie oznacza błąd. Określanie kontekstu i własności: wyrażenia XPath. Przykład:
9 Schematron + XML Schema (1/2)
10 Schematron + XML Schema (2/2)
11 RELAX NG REgular LAnguage description for XML – New Generation:składnia XML-owa, „bliska opisowi struktury w języku naturalnym”, wspiera typy danych (np. XML Schema Datatypes), atrybuty opisywane (prawie) tak samo, jak elementy, prosta technika modularyzacji: define / ref, model przetwarzania oparty na wyrażeniach regularnych. RELAX NG a inne języki: dostępne konstrukcje nie występujące w XML DTD: elementy wymagane, ale bez określonego porządku, model mieszany – więcej możliwości; pozwala opisać niedostępne w XML Schema: niejednoznaczne i niedeterministyczne modele zawartości, modele zawartości wrażliwe na kontekst. Dzięki zupełnie innemu niż w XML Schema podejściu do przetwarzania dokumentów, w RELAX NG można używać modeli niedostępnych w DTD i XML Schema. Dzięki łatwej do nauczenia i zapamiętania składni oraz dużej sile wyrazu, RELAX NG zyskuje coraz większą popularność. Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
12 Przykład RELAX NG:
13 Przykład Konstrukcja zabroniona w XML Schema:
14 Przykład – niedeterminizmModel jednoznaczny, ale niedeterministyczny. Nie istnieje równoważny model deterministyczny. Nie da się zapisać w XML Schema.
15 Zarządzanie zmianami strukturyZmiany niekompatybilne wstecz – przykład: dodanie elementu wymaganego. Sposób postępowania w „żywym” systemie: wprowadzamy zmianę modelu kompatybilną wstecz (np. dodajemy element, ale opcjonalny), migrujemy dokumenty: przekształcamy automatycznie i/lub instruujemy użytkowników o konieczności migracji do nowej struktury, po dodaniu brakujących elementów (lub po upływie wyznaczonego czasu) – wprowadzenie zmiany docelowej. Większe zmiany modelu: deklarujemy osobny element z nowym modelem i przez pewien czas dopuszczamy stary lub nowy model, stosujemy przez pewien czas równolegle dwie wersje schematu. Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
16 Aplikacje odporne na zmiany struktury dokumentówAplikacja odporna na zmiany struktury dokumentów: przetwarza dokumenty zgodne z pewnym schematem, radzi sobie z dowolnym sensownym rozszerzeniem lub ograniczeniem schematu. Zalecane techniki programistyczne: pomijanie nieistotnych elementów i atrybutów (szczególnie jeśli należą do innych przestrzeni nazw), unikanie sprawdzania poprawności struktury dokumentu w kodzie. Nie można przewidzieć, w jaki sposób schemat będzie modyfikowany i rozszerzany w miarę upływu czasu. Ze zmianami można sobie jednak radzić w elegancki sposób, korzystając z następujących dwóch technik: Pomijanie nieistotnych elementów i atrybutów. Aplikacja powinna przetwarzać elementy i atrybuty, których oczekuje. Nie powinna natomiast sygnalizować błędów, jeśli napotka dodatkowe elementy lub atrybuty, szczególnie jeśli należą one do innej przestrzeni nazw. Aplikacja powinna przetwarzać każdy model zawartości w taki sposób, jakby zawierał on symbole wieloznaczne dla elementów i dla atrybutów, nawet jeśli w rzeczywistości model zawartości ich nie zawiera. Unikanie nadmiernej zależności od struktury dokumentu. Powinniśmy ograniczyć do minimum sprawdzanie poprawności struktury dokumentu w kodzie aplikacji. Jeśli korzystamy z parsera SAX, powinniśmy przetworzyć element korzystając z jego nazwy, unikając sprawdzania, jaki element jest jego rodzicem czy dziadkiem. W języku XSLT powinniśmy korzystać z wyrażeń takich jak .//produkt/numer zamiast ./katalog/produkt/numer. Dzięki temu wyrażenie będzie poprawne także wtedy, gdy pomiędzy elementami katalog i produkt zostanie dodany element dział. (Priscilla Walmsley, Wszystko o XML Schema, WNT, 2008) Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
17 Aplikacje sparametryzowane schematemWykorzystanie atrybutów fixed do parametryzowania aplikacji – np.: etykiety pól na formularzach, odwzorowanie elementów na tabele i pola w bazie danych.
18 Przestrzenie nazw a aplikacje niezależne od struktury dokumentówPrzykład: XLink: linki w elementach o dowolnych nazwach, typ linku i jego parametry przekazywane przez specjalne atrybuty.
19 Case study XML jako format dokumentów ubezpieczeniowych ZUS
20 Tło projektu Formularze ubezpieczeniowe: Przyczyny zmiany formatu:22 typy formularzy, przesyłane okresowo przez płatników do ZUS, dotychczas kodowane w pseudo-SGML-u. Przyczyny zmiany formatu: błędny projekt formatu SGML-owego, rosnąca popularność XML-a, nadchodząca zmiana rozporządzenia określającego strukturę formularzy. Projekt badawczo-rozwojowy prowadzony przez empolis Polska w 2000 roku. Wszystkie formularze powstają najpierw w wersji papierowej i dopiero na jej podstawie projektuje się wersje elektroniczne, dbając, aby były one zgodne co do struktury z wersjami papierowymi. Dotychczas formularze są kodowane w formacie zaprojektowanym przez Prokom. Był to SGML, obwarowany wieloma zastrzeżeniami, często niezgodnymi z ideą SGML-a. Wszystkie wartości pól trzeba np. uzupełniać spacjami do ich pełnej długości – takiej jak na formularzu papierowym. Elementy posiadają ponadto wewnętrzną strukturę, nie modelowaną w SGML-u. Dlatego tak na prawdę jest to format stałopozycyjny, dla którego nie jest potrzebne oznakowanie SGML-owe. Na marginesie, nikt nie używa zaprojektowanego przez Prokom DTD w parserze SGML-owym, ponieważ DTD to zawiera błąd. Wygląda więc na to, że wszystkie aplikacje generujące dane w tym formacie używają własnych mechanizmów generowania, a nie standardowych parserów! Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
21 Kolekcja Elektronicznych Dokumentów Ubezpieczeniowych Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
22 Przykład: fragment formularza ZUS RCBFormularze mają ściśle określoną strukturę: składają się z bloków, bloki z podbloków lub bezpośrednio z pól, pola zawierają właściwe wartości, lub niekiedy składają się z sekcji. Niezależnie od tej budowy logicznej, grupy pól w ramach bloków są często wizualizowane w postaci tabelek lub inaczej grupowane. Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
23 Problemy Wybór logicznego modelu struktury dokumentów:model semantyczny, model składniowy. Modelowanie w DTD informacji pozwalających na sprawdzanie poprawności treści dokumentów. Modelowanie informacji zwrotnych: informacje o błędach w dokumentach, informacje o korektach automatycznie wprowadzonych przez ZUS. Oznaczenie pól wypełnianych przez ZUS. Podstawowym problemem do rozwiązania był sposób modelowania logicznej struktury dokumentów ubezpieczeniowych (szczegóły dalej). Wartości umieszczane w polach formularzy mają określone typy i maksymalne długości (odpowiadające długości pól w formularzach papierowych). Często także dla zawartości pól (np. dla dat) określa się sposób ich formatowania. Mechanizm DTD oraz parsery z niego korzystające nie pozwalają na modelowanie takich ograniczeń na wartości pól. Dlatego trzeba było znaleźć inny sposób na zapisanie tych informacji w DTD, pozwalający na ich wykorzystanie przez aplikacje przetwarzające. W tym miejscu najbardziej brakowało nam standardu XML-Schema i narzędzi go wspierających. W przypadku błędów w formularzach, są one zwracane płatnikom wraz z informacjami o błędach oraz o wprowadzonych korektach (niekiedy ZUS może sam skorygować wartość błędnego pola). Dlatego projektowane DTD musiało umożliwiać kodowanie takich informacji. Wreszcie niektóre pola formularzy są wypełniane dopiero przez ZUS. Można by więc ich nie modelować w wersji DTD przeznaczonej dla płatników, gdyby nie fakt, że formularze są zwracane płatnikom w razie wykrycia w nich błędów. Dlatego pola takie trzeba było umieścić w modelu, zaznaczając (w sposób umożliwiający wykorzystanie przez aplikacje), że są one wypełniane przez ZUS. Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
24 Logiczny model struktury dokumentówSemantyczny: Składniowy: DRZB dane-organizacyjne termin-przys-dekl ident-deklaracji dane-ident-platnika NIP REGON ... RCB DRZB DRZB.01 DRZB.01.01 DRZB.01.02 DRZB.02 DRZB.02.01 DRZB.02.02 ... RCB RCB.01 RCB.02 Model semantyczny polega na wyodrębnieniu z zestawu formularzy bloków i pól o takim samym znaczeniu i strukturze oraz zamodelowaniu ich jako pojedynczych elementów. Nazwy elementów opisują wówczas ich znaczenie, a nie pozycje w formularzach. Model składniowy polega na zdefiniowaniu osobnego elementu XML dla każdego pola i każdego bloku istniejących formularzy. Powtarzające się pola i bloki o tym samym znaczeniu są w tym modelu definiowane jako osobne elementy. Model ten pozwala na nadanie elementom nazw odpowiadających numeracji bloków, podbloków, pól i sekcji. Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
25 Logiczny model struktury dokumentówModel semantyczny: zwięzły i elegancki, pozwala na modelowanie relacji wiele-do-wielu, ale: nazwy szybko przestają być semantyczne. Model składniowy: łatwość automatyzacji przetwarzania: operowanie nazwami elementów, generowanie DTD oraz samych dokumentów, możliwość wzbogacenia o informacje semantyczne. Wybór: model składniowy. Wydaje się, że model semantyczny jest lepszy, bo oferuje się w nim elementami, których nazwy opisują znaczenie zawartości – zgodnie z ideologią XML-a. Ale w formularzach jest wiele pól o „barokowych” opisach, np. Liczba dni kalendarzowych, za które należy opłacić składki za dany miesiąc (wpisać tylko dla osób, które mają ustaloną minimalną podstawę, gdy liczba ta jest mniejsza niż liczba dni w danym miesiącu). Takie nazwy trzeba by skracać, co doprowadziłoby do bałaganu przy tworzeniu skrótów. Skróty przestały by być semantyczne i nie byłoby gwarancji, że niechcący nie skrócimy dwóch różnych nazw do tego samego skrótu. Wybraliśmy model składniowy, mimo jego rozwlekłości i brzydoty. Można go bowiem wzbogacić o informacje semantyczne np. w postaci atrybutów OPIS zawierających etykiety pól z formularzy papierowych. Po takim wyborze jedynym wyjściem było wygenerowanie DTD z bazy danych zawierającej definicje bloków, podbloków, pól i sekcji. Tak utworzone DTD ma ok. 400 KB! Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
26 Modelowanie informacji dodatkowychInformacje dodatkowe: opisy pól, informacje o sposobie sprawdzania poprawności wartości pól, informacje o polach wypełnianych przez ZUS. Sposób kodowania: atrybuty #FIXED: umieszczane w DTD wraz z wartościami, wartości dostępne w egzemplarzach, nie ma możliwości zmiany wartości atrybutu w egzemplarzu. Zgodnie z opisanymi wcześniej problemami, informacje zwrotne powinny być zakodowane w DTD w sposób umożliwiający ich wykorzystanie przez aplikacje generujące lub przetwarzające dokumenty. Takim sposobem mogą być atrybuty #FIXED, których ustalone wartości (tylko do odczytu) podaje się w DTD. Jedynie informacje zwrotne są kodowane w inny sposób. Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
27 Informacje dodatkowe – przykład Atrybut OPIS zawiera etykietę pola taką, jak na formularzu papierowym. Informacje semantyczne są kodowane przy pomocy atrybutów TYP, DLUGOSC oraz FORMAT. TYP zawiera nazwę typu (lista typów jest ustalona). FORMAT zawiera wyrażenie regularne opisujące dopuszczalny format zawartości pola. Jeżeli wartość pola należy do ustalonego zbioru wartości (kodów), wówczas przy pomocy atrybutu SLOWNIK odwołujemy się do słownika (umieszczonego w osobnym pliku) zawierającego zbiór dopuszczalnych wartości. Informacja o tym, że pole jest wypełniane przez ZUS jest podawana przy pomocy atrybutu WYPELNIA.ZUS, którego – dla ułatwienia zarządzania – używa się przy pomocy encji parametrycznej a.wypelnia.zus. Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
28 Informacje zwrotne Informacje o błędach i korektach wykrytych podczas przetwarzania dokumentu przez ZUS: błąd – powoduje odrzucenie formularza, korekta – drobny błąd poprawiany automatycznie przez ZUS. Nie mogą być kodowane w atrybutach: może być więcej niż jeden błąd lub korekta, dotycząca tego samego pola, zawartości mogą zawierać podelementy, niedozwolony model (#PCDATA, BLAD*, KOREKTA*) Rozwiązanie: opcjonalne elementy po elemencie, w którym wystąpił błąd. Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
29 Informacje zwrotne – przykład Definiujemy wspólne dla wszystkich bloków i pól elementy reprezentujące błędy i korekty. Zawartością elementu KOREKTA jest skorygowana wartość (słowo kluczowe ANY pozwala na dowolną zawartość). Elementów tych używamy odwołując się do encji parametrycznej cm.inf.zwr. Ponieważ w XML-u zawartością elementu nie może być „#PCDATA, %cm.inf.zwr;”, trzeba było umieścić elementy dla błędu i korekty obok elementu, którego błąd lub korekta dotyczy. Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
30 Przykład: reprezentacja w XML-uSlajd przedstawia częściowo „zwiniętą” wersję reprezentacji elektronicznej formularza z poprzedniego slajdu, tak jak wyświetla go Internet Exploerer przy pomocy domyślnego arkusza stylów. Szczegóły: główny element – KEDU2, element RCB – odpowiada całemu dokumentowi ZUS RCB, bloki I, II i V są „zwinięte”, blok III jest rozwinięty w całości, pole RCB.III.B.08 składa się z dwóch segmentów, do pola RCB.III.B.12 została przypięta korekta systemowa, do całego bloku RCB.III przypięto błędy. Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
31 Gdzie szukać dalej Extending XML Schemas. A Collectively Developed Set of Schema Design Guidelines RELAX NG Home Page Schematron Vlist, E. van der, Comparing XML Schema Languages Vlist, E. van der, Relax NG Compared Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron
32 Gdzie szukać dalej Zioło, Sz., Jak pozostać niezależnym od DTDSoftware 2.0, nr 6/2002, Wydawnictwo Software Czarnik, P., DTD, XML Schema – i co dalej? Software 2.0, nr 6/2003, Wydawnictwo Software Definiowanie typów dokumentów – część 4: XML Schema, RELAX NG, Schematron