Przykładowy dokument XML
DTD - wady Ograniczona kontrola nad strukturą dokumentów. Zbyt wysokopoziomowe typy danych: liczby, daty są zawsze reprezentowane jako tekst! Bardzo ogólne metody definiowania częstości wystąpień. Aby określić, że zwrotka wiersza może mieć od 4 do 8 wersów musimy ją zdefiniować tak: <!ELEMENT zwrotka (wers, wers, wers, wers, wers?, wers?, wers?, wers?)>
DTD - wady (2) Mało obiektowe definicje. Chcielibyśmy np. zdefiniować zwrotkę w jednym DTD, a następnie rozszerzyć ją w innym bez przepisywania całej definicji. Inna składnia
Przykładowy schemat XML
Najważniejsze dokumenty 1999: dokument W3C opisujący wymagania stawiane przed nowym formatem: mechanizmy tworzenia struktury, typy proste i reguły przetwarzania 2001: XML Schema staje się oficjalną rekomendacją W3C: XML Schema Part 0: Primer XML Schema Part 1: Structures XML Schema Part 2: Datatypes 2004: aktualne, drugie wydanie specyfikacji
W wielkim skrócie XML Schema to rozwinięcie pomysłu DTD Do definicji typu dokumentu w formacie XML Schema wykorzystywana jest standardowa składnia XML Składniki definicji należą do przestrzeni nazw XML Schema http://www.w3.org/2001/xmlschema Cała definicja zawarta jest w elemencie głównym <xsd:schema>, węzły i atrybutów definiuje się za pomocą znaczników <xsd:element> i <xsd:attribute>
Typy danych Typy proste (ang. simple type) odpowiadają zawartości bez wewnętrznej struktury (bez podelementów ani atrybutów). Mogą być przypisywane elementom i atrybutom. Typy złożone (ang. complex type) mogą mieć zawartość elementową i wprowadzać atrybuty.
Typy proste Typami prostymi są wszystkie typy wbudowane (np. liczba, napis, bool), jak również typy stworzone na ich bazie. <xsd:element name="definicja" type= xsd:string"/> W DTD odpowiada to definicji: <!ELEMENT definicja (#PCDATA)>
Typy wbudowane string ciąg znaków, boolean wartość logiczna (true, false, 0 lub 1), decimal liczby rzeczywiste o określonej długości float 32-bitowa liczba rzeczywista double 64-bitowa liczba rzeczywista normalizedstring napis, w którym każdy biały znak jest podczas przetwarzania zastępowany przez spację,
Typy wbudowane (2) token napis, w którym każdy ciąg białych znaków jest podczas przetwarzania zastępowany przez jedną spację, zaś białe znaki na początku i końcu są usuwane, hexbinary dane binarne zapisane szesnastkowo integer liczba całkowita z przedziału od -126789 do 126789, date, time, datetime, duration, gyearmonth,... ID, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, NMTOKEN, NMTOKENS, CDATA, language, normalizedstring, token, urireference...
Drzewo typów prostych
Typy pierwotne Typ xsd:anytype może być użyty jawnie do definiowania zawartości elementu: <xsd:element name="fragmentkodu" type="xsd:anytype"/> Taka definicja zezwala na dowolną zawartość znakową i elementową. Podobną funkcję pełni typ xsd:anysimpletype, który dopuszcza tylko zawartość o typie pierwotnym
Własne typy proste - fasety mininclusive, maxinclusive, minexclusive, maxexclusive zawężają zakres dozwolonych wartości liczbowych (wartości minimalna i maksymalna, przedział otwarty i domknięty) pattern zgodność z podanym wyrażeniem regularnym enumeration typ wyliczeniowy list listy wartości typu prostego (jak NMTOKENS) union suma teoriomnogościowa wartości kilku typów, length, minlength, maxlength odpowiednio wymagana, minimalna lub maksymalna długość napisu lub listy
Własne typy proste Nowy typ prosty tworzymy poprzez użycie elementu <xsd:simpletype> Skorzystanie z fasety wymaga zastosowania w definicji elementu znacznika <xsd:restriction> ograniczającego typ wskazany atrybutem base lub podany w treści tego elementu.
Własne typy proste
Własne typy proste
Własne typy proste
Typ wyliczeniowy
Ograniczenia Zakres wartości wyprowadzonego typu prostego musi być podzbiorem zakresu wartości typu bazowego.
Listy wartości
Łączenie typów
Unie - łączenie typów Unia to połączenie zakresów wartości kilku typów w jeden nowy zakres. Instancja może mieć przypisaną wartość należącą do dowolnego z połączonych zakresów wartości.
Unia - przykład
Unia - przykład
Typy anonimowe i nazwane
Organizacja przestrzeni nazw Schemat zapisuje się przy pomocy minimum jednego dokumentu schematu. Schemat deklaruje nazwy należące do zero lub więcej przestrzeni nazw.
Powiązanie schematu z dokumentem Powiązanie schematu z dokumentem składa się z trzech elementów: deklaracji przestrzeni nazw dla egzemplarza dokumentu zgodnego z XML Schema: xmlns:xsi="http:// www.w3.org/2001/xmlschema-instance" powiązań listy używanych przestrzeni nazw z URL-ami schematów mających posłużyć do walidacji elementów, których nazwy należą do używanych w dokumencie przestrzeni nazw w atrybucie xsi:schemalocation powiązania schematu dla elementów nie należących do żadnej przestrzeni nazw poprzez podanie URL-a schematu w atrybucie xsi:nonamespaceschemalocation
Nazwy kwalifikowane i niekwalifikowane Nazwy kwalifikowane (ang. qualified) należą do pewnej przestrzeni nazw. Mogą być poprzedzone prefiksem lub należeć do domyślnej przestrzeni nazw. Nazwy niekwalifikowane (ang. unqualified) nie należą do żadnej przestrzeni nazw.
Dołączenie schematu do dokumentu
Przestrzenie nazw - prefiksy
Dokumenty schematów Schemat (struktura logiczna) może być zapisany w wielu dokumentach schematów (plikach.xsd) Specyfikacja XML Schema określa trzy metody łączenia dokumentów schematów: include import redefine
<xsd:include> Metoda include dołącza dokument schematu do docelowej przestrzeni nazw głównego dokumentu schematu. Dołączany dokument musi mieć taką samą docelową przestrzeń nazw jak dokument główny lub nie mieć w ogóle docelowej przestrzeni nazw.
<xsd:include>
<xsd:redefine> i <xsd:import> Metoda redefine dołącza dokument schematu do docelowej przestrzeni nazw głównego dokumentu schematu z możliwością przedefiniowania komponentów: <xsd:redefine schemalocation="redefine.xsd"/> Metoda import dołącza dokument schematu z innej przestrzeni nazw (inną przestrzeń nazw): <xsd:import schemalocation="import.xsd namespace="http://www.example.org/firmy"/>
<xsd:import>