1 XML Schema w przykładach Maciej Ogrodniczuk [email protected]
2 Krótkie porównanie dla niecierpliwych:DTD a XML Schema Krótkie porównanie dla niecierpliwych: DTD Wywodzi się z SGML-a Specyficzna składnia 10 „typów danych” Brak kontroli tekstowej zawartości elementów XML Schema Zaprojektowany na potrzeby XML-a Składnia XML-owa Ponad 40 typów danych Zaawansowana kontrola tekstowej zawartości elementów
3 Po co nam formalizacja struktury?Dokumenty XML-owe bez określonej formalnie definicji struktury mogą istnieć – ale UWAGA: Bez formalnej strukturalizacji XML daje nam mało - separacja struktury od treści sprowadza się do segmentacji danych i nie ma z niej wiele pożytku. Nikt nie lubi sztywnych reguł, ale to się czasem opłaca tendencja do coraz większej formalizacji (stąd typy danych). Korzyść to dostępność logicznej struktury treści – XML pomaga lepiej zrozumieć dokument.
4 Dlaczego jeszcze? Przeniesienie zadania sprawdzania poprawności z tworzonej aplikacji na narzędzie walidujące daje spore oszczędności. Jak podaje Roger L. Costello, aż 60% tworzonego kodu dotyczy weryfikacji poprawności danych.
5 Definiujemy Typy DokumentówZwiązki zawierania się i porządku elementów definiowane są z użyciem wyrażeń regularnych: * – 0 lub więcej wystąpień, + – 1 lub więcej wystąpień, ? – 0 lub 1 wystąpienie, , – sekwencja, | – alternatywa, () – grupowanie, #PCDATA – oznaczenie zawartości tekstowej, EMPTY – oznaczenie zawartości pustej.
6 Definiujemy Typy Dokumentów – cd. Typy atrybutów: ID – unikatowa (w ramach dokumentu) wartość, IDREF – wskaźnik do elementu ID, NMTOKEN – ciąg dozwolonych znaków, CDATA – napis o rozszerzonej zawartości, (a|b|c) – jedna z podanych wartości. Kwalifikatorem wartości jest jedno ze słów: #REQUIRED – wartość wymagana, #IMPLIED – wartość nie musi zostać podana, #FIXED – wartość stała.
7 Związanie DTD z instancją dokumentu: Przykład DTD id ID #REQUIRED dataZapisu NMTOKEN #REQUIRED> hasło IDREF #REQUIRED> Związanie DTD z instancją dokumentu: DOCTYPE z podaniem odwołania do definicji struktury lub samej definicji, element główny – korzeń drzewa struktury.
8 Dokument zgodny z DTD
9 Wady DTD Jedynie podstawowa kontrola nad strukturą dokumentów, Zbyt „wysokopoziomowe” typy danych, Bardzo ogólne metody definiowania częstości wystąpień, „Mało obiektowe”, nierozszerzalne definicje, Składnia różna od składni opisywanej zawartości.
10 Świat bez XML Schema Wyobraźmy sobie system przetwarzający zamówienia zapisane w XML-u, z polem odpowiadającym liczbie zamawianych produktów. Co stanie się, gdy do przetwarzania zostanie skierowane zamówienie z ujemną liczbą produktów? Czy system odrzuci je jako błędne? Na jakim etapie? A może wcale nie zareaguje, zwiększy wartość licznika stanu zapasów i wyda polecenie przelewu z naszego konta na konto podane w zamówieniu? Przydałoby się niskopoziomowe sprawdzanie poprawności – najlepiej wbudowane w dokument.
11 XML Schema wczoraj i dziś15 lutego 1999: Dokument W3C opisujący wymagania stawiane przed nowym formatem: mechanizmy tworzenia struktury + typy proste reguły przetwarzania, 2 maja 2001: XML Schema staje się oficjalną rekomendacją W3C: XML Schema Part 0: Primer XML Schema Part 1: Structures XML Schema Part 2: Datatypes
12 Wprowadzenie Do definicji typu dokumentu w formacie XML Schema wykorzystywana jest standardowa składnia XML-a. Dla uniknięcia konfliktów nazw, składniki definicji należą do przestrzeni nazw XML Schema, wyróżnianej prefiksem xsd. Cała definicja zawarta jest w elemencie głównym xsd:schema, zaś odpowiednikami deklaracji elementów i atrybutów z DTD są elementy xsd:element i xsd:attribute.
13 Typy danych: proste i złożoneTypy proste definiują zbiory wartości atomowych (tzn. bez wewnętrznej struktury XML). Są nimi wszystkie typy wbudowane (np. liczba, napis, wartość logiczna), jak również typy stworzone na ich bazie. Używa się ich do określania dopuszczalnych wartości atrybutów i zawartości elementów. Oto przykład deklaracji elementu o zawartości typu prostego:
14 Typy wbudowane – przeglądNajczęściej stosowane typy wbudowane: string – ciąg znaków, boolean – wartość logiczna (true i false lub 1 i 0), integer – liczba całkowita z przedziału – – , float – liczba rzeczywista (dopuszcza także wartości: –INF, INF i NaN), date – data (postaci ), ID, IDREF, CDATA, language, uriReference...
15 Typy złożone Typy złożone: definicje modeli zawartości + atrybuty. Sekwencja wystąpień elementów – xsd:sequence, Alternatywa – xsd:choice, Grupowanie – xsd:group. Określanie liczby wystąpień elementów: atrybuty minOccurs i maxOccurs o wartościach całkowitych + unbounded (nieograniczona liczba wystąpień). Kontrola użycia atrybutów – realizowana przy pomocy atrybutu use o dopuszczalnych wartościach required, optional lub prohibited.
16 Typ złożony: przykład definicji
17 Elementy opcjonalne DTD: XML Schema: XML Schema:
18 Nowość: Dowolna kolejnośćW SGML-u – tak, w XML-u z DTD – nie!
19 Typ złożony, ale prosty Przypadek: Chcemy zdefiniować element z zawartością tekstową i atrybutem.
20 Typy anonimowe a typy nazwaneOddzielenie pojęcia elementu od typu zawartości: typ anonimowy:
21 Własne typy danych Tworzone łatwo na podstawie typów prostych, z użyciem tzw. aspektów (facets). Najważniejsze z nich: minInclusive, maxInclusive, minExclusive, maxExclusive – zawężają zakres dozwolonych wartości liczbowych, pattern – wzorzec wartości zgodny z podanym wyrażeniem regularnym, enumeration – typ wyliczeniowy, list – listy wartości typu prostego, length, minLength, maxLength – opowiednio wymagana, minimalna lub maksymalna długość napisu lub listy. –
22 Dozwolone wyrażenia regularne. a? a+ a* (a|b) [ab]c [a-c]x [^0-9]a (la){2} a{1,3} a{2,} \s \d \D \w –
23 Przykład: Nowy typ prostyKorzystanie z aspektów wymaga zastosowania w definicji typu elementu ograniczającego xsd:restriction. Nowy nazwany typ prosty tworzymy poprzez użycie elementu xsd:simpleType:
24 Przykład: Anonimowy typ prostyZakres wartości liczbowych:
25 Przykład: Lista wartości
26 Rozszerzanie typów
27 Zawężanie typów
28 Rozszerzaniu i zawężaniu mówimy: NIE!Zabraniamy rozszerzania i zawężania:
29 Zastępowanie elementówMożemy chcieć używać nazw elementów wymiennie, np. w wersji skróconej i rozszerzonej.
30 Definicje globalne i lokalne
31 Użycie XML Schema Wielopoziomowa walidacja: Sprawdź, że dokument library.xml jest zgodny z regułami opisanymi w dictionary.xsd. Sprawdź, że dictionary.xsd jest poprawnym dokumentem (zgodnym z regułami opisanymi w XMLSchema.xsd – pliku zawierającym schemat dla XML Schema.
32 Jeszcze jeden prosty przykład [1/3]XML Schema rozszerza funkcjonalność DTD (możliwa jest automatyczna konwersja DTD do nowego formatu):
33 Jeszcze jeden prosty przykład [2/3]
34 Jeszcze jeden prosty przykład [3/3]
35 Model mieszany: dokument
36 Model mieszany w XML Schema
37 Co dalej? XML Schema to przyszłość. Czy zagraża DTD? Chyba jednak nie: Wieloletnie doświadczenia związane z wykorzystaniem SGML-a, Dostępność dobrze zbudowanych DTD, Przyzwyczajenie (co się wygodniej czyta?)
38 Online Źródło najświeższych informacji o XML Schema XML Spy Turbo XML (IDE, które wchłonęło XML Authority) ftp.cogsci.ed.ac.uk/pub/XSV/XSV14.EXE Świeżutki XML Schema Validator Henry’ego Thompsona xml.apache.org/xerces2-j/ Xerces