XML Schema Motywacja, struktura schematu, typy złożone Patryk Czarnik Instytut Informatyki UW XML i nowoczesne technologie zarzadzania treścia 2007/08 Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 1 / 35
Plan Podstawy 1 Podstawy Motywacja Struktura schematu 2 Typy Typy nazwane i anonimowe Deklaracje globalne i lokalne Typy proste i złożone 3 Typy złożone Grupy modelowe Grupy nazwane Atrybuty Zawartość pusta, prosta i mieszana Więzy integralności Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 2 / 35
Dlaczego nie DTD? Podstawy Motywacja Zastosowania XML-a w elektronicznej wymianie danych: przeniesienie zadania sprawdzania poprawności z tworzonej aplikacji na narzędzie walidujace daje spore oszczędności, 60% tworzonego kodu dotyczy weryfikacji poprawności danych. Roger L. Costello, XML Schema Tutorial Cechy DTD: niemal brak kontroli nad tekstowa zawartościa elementów i wartościami atrybutów, bardzo ogólne metody definiowania częstości wystapień. Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 3 / 35
Podstawy Motywacja Porównanie DTD i XML Schema DTD pochodzacy z SGML specyficzna składnia 10 typów danych brak kontroli tekstowej zawartości elementów niewielka dla atrybutów modularność tylko na poziomie tekstu DTD (encje parametryczne) XML Schema zaprojektowany dla XML składnia XML 44 wbudowane typy proste zaawansowana kontrola tekstowej zawartości elementów i atrybutów modularność na poziomie pojęć abstrakcyjnych (własne typy zawartości, grupy, import) Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 4 / 35
Status XML Schema Podstawy Motywacja 15 lutego 1999: Dokument W3C opisujacy wymagania. 2 maja 2001: XML Schema oficjalna rekomendacja W3C: XML Schema Part 0: Primer, XML Schema Part 1: Structures, XML Schema Part 2: Datatypes. Obecnie prace nad wersja 1.1 XML Schema (status: working draft). Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 5 / 35
Podstawy Prosty przykład schematu Struktura schematu <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="osoba"> <xs:complextype> <xs:sequence> <xs:element name="imię" type="xs:string" minoccurs="1" maxoccurs="unbounded"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> <xs:attribute name="wiek" type="xs:positiveinteger" use="optional"/> </xs:element> </xs:schema> element główny schematu Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 6 / 35
Podstawy Prosty przykład schematu Struktura schematu <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="osoba"> <xs:complextype> <xs:sequence> <xs:element name="imię" type="xs:string" minoccurs="1" maxoccurs="unbounded"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> <xs:attribute name="wiek" type="xs:positiveinteger" use="optional"/> </xs:element> </xs:schema> przestrzeń nazw XML Schema Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 6 / 35
Podstawy Prosty przykład schematu Struktura schematu <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="osoba"> <xs:complextype> <xs:sequence> <xs:element name="imię" type="xs:string" minoccurs="1" maxoccurs="unbounded"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> <xs:attribute name="wiek" type="xs:positiveinteger" use="optional"/> </xs:element> </xs:schema> deklaracja elementu (globalna) Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 6 / 35
Podstawy Prosty przykład schematu Struktura schematu <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="osoba"> <xs:complextype> <xs:sequence> <xs:element name="imię" type="xs:string" minoccurs="1" maxoccurs="unbounded"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> <xs:attribute name="wiek" type="xs:positiveinteger" use="optional"/> </xs:element> </xs:schema> deklaracja elementu (lokalna) Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 6 / 35
Podstawy Prosty przykład schematu Struktura schematu <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="osoba"> <xs:complextype> <xs:sequence> <xs:element name="imię" type="xs:string" minoccurs="1" maxoccurs="unbounded"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> <xs:attribute name="wiek" type="xs:positiveinteger" use="optional"/> </xs:element> </xs:schema> określenie liczności elementów Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 6 / 35
Podstawy Prosty przykład schematu Struktura schematu <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="osoba"> <xs:complextype> <xs:sequence> <xs:element name="imię" type="xs:string" minoccurs="1" maxoccurs="unbounded"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> <xs:attribute name="wiek" type="xs:positiveinteger" use="optional"/> </xs:element> </xs:schema> deklaracja atrybutu Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 6 / 35
Podstawy Prosty przykład schematu Struktura schematu <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="osoba"> <xs:complextype> <xs:sequence> <xs:element name="imię" type="xs:string" minoccurs="1" maxoccurs="unbounded"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> <xs:attribute name="wiek" type="xs:positiveinteger" use="optional"/> </xs:element> </xs:schema> określenie (nie)obowiazkowości atrybutu Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 6 / 35
Plan Typy 1 Podstawy Motywacja Struktura schematu 2 Typy Typy nazwane i anonimowe Deklaracje globalne i lokalne Typy proste i złożone 3 Typy złożone Grupy modelowe Grupy nazwane Atrybuty Zawartość pusta, prosta i mieszana Więzy integralności Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 7 / 35
Typy w XML Schema Typy Elementy i atrybuty maja w schemacie określony typ zawartości. Typy zwn. zasięg definicji: nazwane, anonimowe. Typy zwn. pochodzenie: predefiniowane (przez standard), definiowane w schemacie. Typy zwn. zawartość: proste, złożone, o zawartości: pustej, prostej, elementowej (złożonej), mieszanej. Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 8 / 35
Typy w XML Schema Typy Elementy i atrybuty maja w schemacie określony typ zawartości. Typy zwn. zasięg definicji: nazwane, anonimowe. Typy zwn. pochodzenie: predefiniowane (przez standard), definiowane w schemacie. Typy zwn. zawartość: proste, złożone, o zawartości: pustej, prostej, elementowej (złożonej), mieszanej. Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 8 / 35
Typy w XML Schema Typy Elementy i atrybuty maja w schemacie określony typ zawartości. Typy zwn. zasięg definicji: nazwane, anonimowe. Typy zwn. pochodzenie: predefiniowane (przez standard), definiowane w schemacie. Typy zwn. zawartość: proste, złożone, o zawartości: pustej, prostej, elementowej (złożonej), mieszanej. Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 8 / 35
Typy Typy nazwane i anonimowe Typy nazwane i anonimowe Typy nazwane <xs:complextype name="osobatyp"> <xs:sequence> <xs:element name="imię" type="xs:string"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> <xs:element name="osoba" type="osobatyp"/> Typy anonimowe <xs:element name="osoba"> <xs:complextype> <xs:sequence> <xs:element name="imię" type="xs:string"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> </xs:element> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 9 / 35
Typy Typy nazwane i anonimowe Typy nazwane i anonimowe Typy nazwane <xs:complextype name="osobatyp"> <xs:sequence> <xs:element name="imię" type="xs:string"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> <xs:element name="osoba" type="osobatyp"/> Typy anonimowe <xs:element name="osoba"> <xs:complextype> <xs:sequence> <xs:element name="imię" type="xs:string"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> </xs:element> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 9 / 35
Typy Typy nazwane i anonimowe Typy nazwane i anonimowe kiedy stosować? Typy nazwane ten sam typ stosowany dla wielu elementów / atrybutów, typ stanowi podstawę zawężeń / rozszerzeń, także w potencjalnych przyszłych rozszerzeniach schematu! Typy anonimowe typ występujacy tylko w jednym miejscu schematu, nie stanowiacy podstawy dla innego typu. Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 10 / 35
Typy Typy nazwane i anonimowe Typy nazwane i anonimowe kiedy stosować? Typy nazwane ten sam typ stosowany dla wielu elementów / atrybutów, typ stanowi podstawę zawężeń / rozszerzeń, także w potencjalnych przyszłych rozszerzeniach schematu! Typy anonimowe typ występujacy tylko w jednym miejscu schematu, nie stanowiacy podstawy dla innego typu. Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 10 / 35
Typy Deklaracje globalne i lokalne Deklaracje globalne i lokalne Deklaracje globalne <xs:element name="imię" type="xs:string"/> <xs:element name="nazwisko" type="xs:string"/> <xs:complextype name="osobatyp"> <xs:sequence> <xs:element ref="imię" maxoccurs="3"/> <xs:element ref="nazwisko"/> </xs:sequence> </xs:element> Deklaracje lokalne <xs:complextype name="osobatyp"> <xs:sequence> <xs:element name="imię" maxoccurs="3" type="xs:string"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 11 / 35
Typy Deklaracje globalne i lokalne Deklaracje globalne i lokalne Deklaracje globalne <xs:element name="imię" type="xs:string"/> <xs:element name="nazwisko" type="xs:string"/> <xs:complextype name="osobatyp"> <xs:sequence> <xs:element ref="imię" maxoccurs="3"/> <xs:element ref="nazwisko"/> </xs:sequence> </xs:element> Deklaracje lokalne <xs:complextype name="osobatyp"> <xs:sequence> <xs:element name="imię" maxoccurs="3" type="xs:string"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 11 / 35
Typy Deklaracje globalne i lokalne Deklaracje globalne i lokalne Deklaracje globalne <xs:element name="imię" type="xs:string"/> <xs:element name="nazwisko" type="xs:string"/> <xs:complextype name="osobatyp"> <xs:sequence> <xs:element ref="imię" maxoccurs="3"/> <xs:element ref="nazwisko"/> </xs:sequence> </xs:element> Deklaracje lokalne <xs:complextype name="osobatyp"> <xs:sequence> <xs:element name="imię" maxoccurs="3" type="xs:string"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 11 / 35
Typy Deklaracje globalne i lokalne Deklaracje globalne i lokalne kiedy stosować? Deklaracje globalne element (atrybut) występujacy w wielu miejscach schematu z tym samym typem zawartości, także w potencjalnych przyszłych rozszerzeniach schematu! Deklaracje lokalne element (atrybut) tylko w jednym miejscu schematu, w różnych miejscach z różnym typem zawartości... Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 12 / 35
Typy Deklaracje globalne i lokalne Deklaracje globalne i lokalne kiedy stosować? Deklaracje globalne element (atrybut) występujacy w wielu miejscach schematu z tym samym typem zawartości, także w potencjalnych przyszłych rozszerzeniach schematu! Deklaracje lokalne element (atrybut) tylko w jednym miejscu schematu, w różnych miejscach z różnym typem zawartości... Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 12 / 35
Typy Deklaracje globalne i lokalne Deklaracje lokalne z różnym typem zawartości możliwość użycia tej samej nazwy dla różnych (semantycznie i strukturalnie) elementów i atrybutów, naturalne w przypadku atrybutów, mylace w przypadku elementów używać z rozsadkiem. Przykład <xs:element name="a"> <xs:complextype> <xs:sequence> <xs:element name="c" type="xs:positiveinteger"/> </xs:sequence> </xs:element> <xs:element name="b"> <xs:complextype> <xs:sequence> <xs:element name="c" type="xs:negativeinteger"/> </xs:sequence> </xs:element> <a><c>12</c></a> <b><c>-9</c></b> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 13 / 35
Typy złożone i proste Typy Typy proste i złożone Typ złożony <xs:complextype name="osobatyp"> <xs:sequence> <xs:element name="imię" type="xs:string"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> <xs:element name="osoba" type="osobatyp"/> Typ prosty <xs:simpletype name="plectyp"> <xs:restriction base="xs:string"> <xs:enumeration value="k"/> <xs:enumeration value="m"/> </xs:restriction> </xs:simpletype> <xs:element name="nazwisko" type="xs:string"/> <xs:attribute name="płeć" type="plectyp"/> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 14 / 35
Typy złożone i proste Typy Typy proste i złożone Typ złożony <xs:complextype name="osobatyp"> <xs:sequence> <xs:element name="imię" type="xs:string"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> <xs:element name="osoba" type="osobatyp"/> Typ prosty <xs:simpletype name="plectyp"> <xs:restriction base="xs:string"> <xs:enumeration value="k"/> <xs:enumeration value="m"/> </xs:restriction> </xs:simpletype> <xs:element name="nazwisko" type="xs:string"/> <xs:attribute name="płeć" type="plectyp"/> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 14 / 35
Typy Typy proste i złożone Typy proste i złożone kiedy używać? Typy złożone struktura (podelementy, atrybuty), odpowiednie dla elementów. Typy proste zawartość tekstowa, odpowiednie dla atrybutów i elementów, wiele typów predefiniowanych, możliwość definiowania własnych typów. Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 15 / 35
Typy Typy proste i złożone Typy proste i złożone kiedy używać? Typy złożone struktura (podelementy, atrybuty), odpowiednie dla elementów. Typy proste zawartość tekstowa, odpowiednie dla atrybutów i elementów, wiele typów predefiniowanych, możliwość definiowania własnych typów. Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 15 / 35
Plan Typy złożone 1 Podstawy Motywacja Struktura schematu 2 Typy Typy nazwane i anonimowe Deklaracje globalne i lokalne Typy proste i złożone 3 Typy złożone Grupy modelowe Grupy nazwane Atrybuty Zawartość pusta, prosta i mieszana Więzy integralności Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 16 / 35
Typy złożone Typy złożone rodzaje zawartości Zawartość elementowa: <osoba PESEL="12345678901"> <imię>jan</imię> <nazwisko>kowalski</nazwisko> </osoba> Zawartość pusta: <osoba PESEL="12345678901"/> Zawartość prosta: <masa jm="kg">10.55</masa> Zawartość mieszana: <treść>w <j>pascalu</j> przypisanie ma postać <kod>x := 5</kod>, natomiast w <j>c</j> <kod>x = 5</kod>.</treść> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 17 / 35
Typy złożone Typy złożone rodzaje zawartości Zawartość elementowa: <osoba PESEL="12345678901"> <imię>jan</imię> <nazwisko>kowalski</nazwisko> </osoba> Zawartość pusta: <osoba PESEL="12345678901"/> Zawartość prosta: <masa jm="kg">10.55</masa> Zawartość mieszana: <treść>w <j>pascalu</j> przypisanie ma postać <kod>x := 5</kod>, natomiast w <j>c</j> <kod>x = 5</kod>.</treść> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 17 / 35
Typy złożone Typy złożone rodzaje zawartości Zawartość elementowa: <osoba PESEL="12345678901"> <imię>jan</imię> <nazwisko>kowalski</nazwisko> </osoba> Zawartość pusta: <osoba PESEL="12345678901"/> Zawartość prosta: <masa jm="kg">10.55</masa> Zawartość mieszana: <treść>w <j>pascalu</j> przypisanie ma postać <kod>x := 5</kod>, natomiast w <j>c</j> <kod>x = 5</kod>.</treść> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 17 / 35
Typy złożone Typy złożone rodzaje zawartości Zawartość elementowa: <osoba PESEL="12345678901"> <imię>jan</imię> <nazwisko>kowalski</nazwisko> </osoba> Zawartość pusta: <osoba PESEL="12345678901"/> Zawartość prosta: <masa jm="kg">10.55</masa> Zawartość mieszana: <treść>w <j>pascalu</j> przypisanie ma postać <kod>x := 5</kod>, natomiast w <j>c</j> <kod>x = 5</kod>.</treść> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 17 / 35
Typy złożone Grupy modelowe Definiowanie zawartości elementowej Grupy deklaracji (model groups) sequence, choice, all. Zagnieżdżanie grup sequence i choice <xs:complextype name="osobatyp"> <xs:choice> <xs:sequence> <xs:element name="imię" type="xs:string"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> <xs:element name="pseudonim" type="xs:string"/> </xs:choice> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 18 / 35
Typy złożone Grupy modelowe Liczność wystapień Atrybuty minoccurs i maxoccurs. Dla podelementów oraz grup. Wartość unbounded dla maxoccurs. Domyślna liczność: dokładnie 1. Sztuczny przykład <xs:complextype name="dwieosobytyp"> <xs:choice minoccurs="2"> <xs:sequence> <xs:element name="imię" type="xs:string" minoccurs="0" maxoccurs="3"/> <xs:element name="nazwisko" type="xs:string"/> </xs:sequence> <xs:element name="pseudonim" type="xs:string"/> </xs:choice> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 19 / 35
Typy złożone Modele (nie)deterministyczne Grupy modelowe Model niejednoznaczny: Nawet znajac cały dokument nie jesteśmy w stanie wskazać które deklaracje w schemacie odpowiadaja elementom w dokumencie. (a,a)* (a,a,a)* Model niedeterministyczny: Czytajac dokument od poczatku gdy pojawia się pewien znacznik otwierajacy nie jesteśmy w stanie wskazać która deklaracja w schemacie odpowiada bieżacemu elementowi w dokumencie (bez czytania dalej dokumentu). (a,a?,a?) (a,b)+,a? Modele definiowane w XML Schema musza być deterministyczne: Czytajac dowolny dokument od poczatku gdy pojawia się pewien znacznik otwierajacy jesteśmy w stanie wskazać która deklaracja w schemacie odpowiada bieżacemu elementowi w dokumencie (bez czytania dalej dokumentu). (a,(a,a?)?) Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 20 / 35
Typy złożone Grupy modelowe Grupa all Przykład Wszystkie podelementy w dowolnej kolejności. maxoccurs podelementów <= 1. Brak udziału w zagnieżdżeniach. <xs:complextype name="daneosobowetyp"> <xs:all> <xs:element name="pesel" type="peseltyp"/> <xs:element name="dowód" type="dowódtyp"/> <xs:element name="paszport" type="paszporttyp" minoccurs="0"/> </xs:all> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 21 / 35
Typy złożone Nazwane grupy elementów Grupy nazwane <xs:group name="współrzędne"> <xs:sequence> <xs:element name="x" type="xs:double"/> <xs:element name="y" type="xs:double"/> </xs:sequence> </xs:group> <xs:element name="punkt"> <xs:complextype> <xs:sequence> <xs:group ref="współrzędne"/> </xs:sequence> </xs:element> <xs:element name="koło"> <xs:complextype> <xs:sequence> <xs:group ref="współrzędne"/> <xs:element name="r" type="xs:double"/> </xs:sequence> </xs:element> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 22 / 35
Typy złożone Atrybuty Deklaracje atrybutów Przykład Deklaracje globalne i lokalne. W definicji typu złożonego za określeniem typu zawartości. <xs:attribute name="nr" type="positiveinteger"/> <xs:complextype name="osobatyp"> <xs:sequence>... </xs:sequence> <xs:attribute name="pesel" type="peseltyp"/> <xs:attribute name="płeć"> <xs:simpletype>... </xs:simpletype> </xs:attribute> <xs:attribute ref="nr"/> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 23 / 35
Typy złożone Atrybuty Obowiazkowość i wartości domyślne Przykład use required, optional, prohibited. default lub fixed wartość domyślna lub ustalona. <xs:complextype name="osobatyp"> <xs:sequence>... </xs:sequence> <xs:attribute name="pesel" type="peseltyp" use="required"/> <xs:attribute name="płeć" default="k"> <xs:simpletype>... </xs:simpletype> </xs:attribute> <xs:attribute ref="nr" fixed="123"/> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 24 / 35
Typy złożone Nazwane grupy atrybutów Atrybuty <xs:attributegroup name="atrybuty-krawędzi"> <xs:attribute name="kolor-krawędzi" type="kolortyp"/> <xs:attribute name="grubość-krawędzi" type="xs:positiveinteger"/> </xs:attributegroup> <xs:attributegroup name="atrybuty-powierzchni"> <xs:attribute name="kolor-powierzchni" type="kolortyp"/> </xs:attributegroup> <xs:element name="koło"> <xs:complextype> <xs:sequence>... </xs:sequence> <xs:attributegroup ref="atrybuty-krawędzi"/> <xs:attributegroup ref="atrybuty-powierzchni"/> </xs:element> <xs:element name="odcinek"> <xs:complextype> <xs:sequence>... </xs:sequence> <xs:attributegroup ref="atrybuty-krawędzi"/> </xs:element> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 25 / 35
Typy złożone Elementy czy atrtybuty? Przesłanki strukturalne Atrybuty Elementy konieczne gdy: liczność większa od 1, wewnętrzna struktura (podelemety), także w potencjalnych przyszłych rozszerzeniach schematu! Zalety atrybutów: zwięzłość zapisu, wartości domyślne, w DTD dostępne typy zawartości NMTOKEN, ID, IDREF (w XML Schema bez znaczenia). Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 26 / 35
Typy złożone Elementy czy atrtybuty? Przesłanki semantyczne Atrybuty Informacje modelowane zwykle w elementach: zawartość (elementy semantyczne, np. nazwisko, nazwa leku, adres), struktura (np. rozdział, akapit, tytuł, lista), wyszukiwanie (np. termin do indeksu, glosariusza, a także elementy dedykowane), odesłania (np. hiperlinki, noty, przypisy). Informacje modelowane zwykle w atrybutach: metainformacje (np. jednostka miary, waluta, język, priorytet), identyfikatory wartości i odwołania do nich. Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 27 / 35
Typy złożone Zawartość pusta, prosta i mieszana Typy złożone rodzaje zawartości Zawartość elementowa: <osoba PESEL="12345678901"> <imię>jan</imię> <nazwisko>kowalski</nazwisko> </osoba> Zawartość pusta: <osoba PESEL="12345678901"/> Zawartość prosta: <masa jm="kg">10.55</masa> Zawartość mieszana: <treść>w <j>pascalu</j> przypisanie ma postać <kod>x := 5</kod>, natomiast w <j>c</j> <kod>x = 5</kod>.</treść> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 28 / 35
Typy złożone Zawartość pusta, prosta i mieszana Definiowanie zawartości pustej Schemat <xs:complextype name="osobatyp"> <xs:attribute name="pesel" type="peseltyp"/> Dokument <osoba PESEL="12345678901"/> <masa jm="kg">10.55</masa> <treść>w <j>pascalu</j> przypisanie ma postać <kod>x := 5</kod>, natomiast w <j>c</j> <kod>x = 5</kod>.</treść> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 29 / 35
Typy złożone Zawartość pusta, prosta i mieszana Definiowanie zawartości prostej Schemat <xs:complextype name="masatyp"> <xs:simplecontent> <xs:extension base="xs:decimal"> <xs:attribute name="jm" type="xs:string"/> </xs:extension> </xs:simplecontent> Dokument <masa jm="kg">10.55</masa> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 30 / 35
Typy złożone Zawartość pusta, prosta i mieszana Definiowanie zawartości mieszanej (1) Ważna liczność i kolejność <xs:complextype name="zamówienietyp" mixed="true"> <xs:sequence> <xs:element ref="towar" maxoccurs="unbounded"/> <xs:element ref="adres" /> </xs:choice> Dokument <zamówienie> Zamawiam <towar>pączka</towar> i <towar>kawę</towar>. Proszę przysłać na <adres>banacha 2</adres>. </zamówienie> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 31 / 35
Typy złożone Zawartość pusta, prosta i mieszana Definiowanie zawartości mieszanej (2) Jak w DTD <xs:complextype name="tresctyp" mixed="true"> <xs:choice maxoccurs="unbounded"> <xs:element name="j" type="xs:string"/> <xs:element name="kod" type="xs:string"/> </xs:choice> Dokument <treść>w <j>pascalu</j> przypisanie ma postać <kod>x := 5</kod>, natomiast w <j>c</j> <kod>x = 5</kod>.</treść> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 32 / 35
ID i IDREF Typy złożone Więzy integralności Typy atrybutów w DTD, dostępne także w XML Schema. ID: nazwa w sensie XML, żaden inny atrybut o typie ID nie może mieć tej samej wartości, IDREF: jakiś atrybut o typie ID w dokumencie musi mieć równa wartość. Ograniczenia: tylko nazwy (w szczególności nie numery), jedna przestrzeń identyfikatorów dla wszystkich elementów, tylko atrybuty. Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 33 / 35
Klucze i referencje Typy złożone Więzy integralności Więzy integralności (identity constraints) w XML Schema: unique wartości w ramach określonego zakresu unikatowe, key wartości w ramach określonego zakresu unikatowe i niepuste, keyref odwołanie do wartości wskazanego klucza. Zalety w porównaniu z atrybutami typu ID / IDREF: dowolny typ zawartości (nie tylko nazwa), możliwych wiele niezależnych od siebie ograniczeń, odwołanie do konkretnego klucza, kombinacje wartości (krotki), kontrolowane zawartości elementów, nie tylko atrybutów. Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 34 / 35
Klucze i referencje Typy złożone Więzy integralności <xsd:element name="zamówienia-i-faktury" type="zamówieniafakturytyp"> <xsd:unique name="fakturaid"> <xsd:selector xpath="faktury/faktura"/> <xsd:field xpath="@nr"/> <xsd:field xpath="rok"/> </xsd:unique> <xsd:keyref name="zamówienieref" refer="zamówienieid"> <xsd:selector xpath="faktury/faktura/do-zamówienia"/> <xsd:field xpath="@nr"/> </xsd:keyref> <xsd:key name="zamówienieid"> <xsd:selector xpath="zamówienia/zamówienie"/> <xsd:field xpath="numer"/> </xsd:key> </xsd:element> Patryk Czarnik (MIMUW) 03 XML Schema XML 2007/08 35 / 35