Wykład 02
Transkrypt
Wykład 02
Plan Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 02 T. Romańczukiewicz Jagiellonian University 2009/2010 T. Romańczukiewicz XML 02 Plan Plan 1 Przypomnienie 2 DTD 3 Schematy XML 4 Podsumowanie T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Plan 1 Przypomnienie 2 DTD 3 Schematy XML 4 Podsumowanie T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przypomnienie: XML - jezyk ˛ znaczników zaprojektowany do przechowywania danych. Do prezentowania danych bezpośrednio zawartych w XML można użyć np. arkuszy kaskadowych CSS. XML pozwala na praktycznie nieograniczona˛ dowolność. Strukture˛ określa sie˛ zagnieżdżajac ˛ znaczniki, dodatkowe informacje można przechowywać w atrybutach. W wielu praktycznych zastosowaniach należy jednak ograniczyć te˛ dowlolność definicja typu dokumentu DTD. Jeśli dokument jest poprawnie sformułowany wg rekomendacji W3C można go walidować czyli sprawdzać jego zgodność z DTD. Zawartość dokumentów można czytać przy pomocy np. JavaScript. Kilka różnych dokumentów można łaczyć ˛ w jedna˛ całość, a nazwy elementów z różnych DTD rozróżnia sie˛ poprzez przestrzenie nazw. T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie DTD - potrzeba, zalety i wady Konstrukcja DTD Definicje atrybutów E Plan 1 Przypomnienie 2 DTD DTD - potrzeba, zalety i wady Konstrukcja DTD Definicje atrybutów Encje 3 Schematy XML 4 Podsumowanie T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie DTD - potrzeba, zalety i wady Konstrukcja DTD Definicje atrybutów E Struktura dokumentu XML został tak skonstruowany aby pozwalał na maksymalna˛ dowolność (struktura dokumentu, nazwy znaczników itp). Czasami jednak warto określić pewne ramy jakich dokument musi sie˛ trzymać. Zabieg ten może przyspieszyć przetwarzanie danych w dokumencie oraz zapobiega powstawaniu ewentualnych błedów ˛ już podczas etapu tworzenia dokumentu. Definicja typu dokumentu (DTD, ang. Document Type Definition) formalny opis budowy zawierajacego informacje o nazwach przyporzadkowanych cz˛eściom składowym tekstu (elementach), ich dodatkowych własnościach (atrybutach) i zależnosciach pomiedzy elementami, łacz ˛ acych ˛ je w strukture˛ drzewiasta˛ T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie DTD - potrzeba, zalety i wady Konstrukcja DTD Definicje atrybutów E DTD a Schematy XML Strukture˛ dokumentu można opisać na dwa sposoby: Definicje typu dokumentów Schematy XML W chwili obecnej najcz˛eściej używa sie˛ DTD. Jest to jednak metoda bardzo ograniczona i mało precyzyjna. Schematy XML nie tylko opisuja˛ sama˛ strukture˛ dokumentu, ale również pozwalaja˛ na określanie typu danych w treści elementów dziedziczenie składni określanie minimalnej i maksymalnej ilości wystapie ˛ ń elementu ograniczanie wartości danych wymuszanie niepowtarzalności atrybutów (...) wiele, wiele innych - o tym w dalszej cz˛eści Alternatywy: Relax NG, Schematron i inne T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie DTD - potrzeba, zalety i wady Konstrukcja DTD Definicje atrybutów E Budowa DTD Listing 1: Przykład DTD 1 2 3 4 5 6 7 8 9 10 <?xml version="1.0" encoding="UTF-8" ?> <?xml-stylesheet type="text/css" href="katalog.css" ?> <!DOCTYPE CATALOG [ <!ELEMENT CATALOG (Artist+) > <!ELEMENT Artist (Artist-Name, Album+) > <!ELEMENT Artist-Name (#PCDATA) > <!ELEMENT Album (Title, Year) > <!ELEMENT Title (#PCDATA) > <!ELEMENT Year (#PCDATA) > <!ATTLIST Album id CDATA "100" >]> <!ELEMENT nazwa elementu (model zawartosci)> element+ element wystapi ˛ jeden lub wiecej ˛ razy, element* 0 lub wiecej ˛ razy, element? 0 lub 1 raz, element1, element2 elementy wystapi ˛ a˛ w podanej kolejności, element1 | element2 wystapi ˛ element1 lub element2 (grupa) grupa składników modelu, #PCDATA wystapi ˛ zawartość tekstowa („czysty tekst” — bez podelementów), EMPTY ANY element nie posiada żadnej zawartości, w treści moga˛ wystapić ˛ dowolne zadeklarowane elementy. T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie DTD - potrzeba, zalety i wady Konstrukcja DTD Definicje atrybutów E Model mieszany. Czasami zachodzi konieczność wymieszania danych wraz z elementami. Np gdy chcemy dodać dodatkowy element - dodatkowa uwaga, data itp, a nie jest to konieczne dla każdego elementu. <!ELEMENT nazwa_elementu (#PCDATA | uzupelnienie )*> i można tego używać w nastepuj ˛ acy ˛ sposób: Listing 2: Model mieszany 1 2 3 4 5 6 7 8 9 10 <nazwa_elemetu> zawartosc pierwszego elementu </nazwa_elemetu> <nazwa_elemetu> zawartosc drugiego elementu <uzupelnienie> to jest drugi element </uzupelnienie> </nazwa_elemetu> T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie DTD - potrzeba, zalety i wady Konstrukcja DTD Definicje atrybutów E Definicja atrybutu Listing 3: Przykład definicji atrybutu 1 2 3 <!ATTLIST nazwa elementu nazwa atrybutu1 typ1 zawartosc1 nazwa atrybutu2 typ2 zawartosc2 ...> Typy atrybutów: CDATA ciag ˛ znaków, NMTOKEN ciag ˛ znaków tworzacych ˛ poprawna˛ nazwe, ˛ NMTOKENS ID ciag ˛ NMTOKEN oddzielanych spacjami, identyfikator unikalny w obrebie ˛ dokumentu, IDREF wskaźnik do ID innego elementu, IDREFS ciag ˛ IDREF oddzielany białymi znakami, (a|b|...) jedna z podanych wartości (typ wyliczeniowy), #REQUIRED atrybut jest wymagany, #IMPLIED wartosc #FIXED wartość nie musi być podana, wartość domyślna, w dokumencie można ja˛ zmieniać wartość stała. T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie DTD - potrzeba, zalety i wady Konstrukcja DTD Definicje atrybutów E Elementy czy atrybuty w elementach należy zapisywać istotny tekst, który bedzie ˛ wypisywany, w atrybutach dodatkowe parametry w elementach należy zapisywać dane, a w atrybutach metadane elementy można zagnieżdżać, atrybuty nie - nie maja˛ wewnetrznej ˛ struktury kolejność atrybutów nie ma znaczenia, dla elementów jest ważna w DTD można tylko atrybutom można przyporzadkowywać ˛ wartości domyślne. Listing 4: Umieszczanie DTD w osobnym pliku 1 <!DOCTYPE element_glowny SYSTEM "uri_do_DTD.dtd"> T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie DTD - potrzeba, zalety i wady Konstrukcja DTD Definicje atrybutów E Encje W DTD można definiować też makrorozwiniecia ˛ - encje: Listing 5: Definicje encji wewnetrznych ˛ 1 2 3 4 5 6 <!ENTITY nazwa_encji "rozwiniecie"> ... <przyklad> przyklad uzycia encji &nazwa_encji; </przyklad> ... W XML można korzystać z kilku predefiniowanych encji: ' ’ " " & & < < > > Można też używać ich do odwołań do znaków w kodzie dziesietnym ˛ &#kod_znaku; oraz #xkod_znaku; w kodzie szesnastkowym. T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie DTD - potrzeba, zalety i wady Konstrukcja DTD Definicje atrybutów E Encje zewnetrzne ˛ Listing 6: Przykład użycia encji zewnetrznych ˛ 1 2 3 4 5 6 7 8 9 10 <!ENTITY klasyka SYSTEM "klasyka_rocka.xml"> <!ENTITY NWOBHM SYSTEM "NWOBHM.xml"> <!ENTITY Thrash SYSTEM "http://prunus.if.uj.edu.pl/Slayer_itp.xml"> <CATALOG> &klasyka; &NWOBHM; &Thrash; ... </CATALOG> Właczanie ˛ DTD jest również encje˛ zewnetrzn ˛ a: ˛ <!DOCTYPE element_glowny SYSTEM "uri_do_DTD.dtd"> T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie DTD - potrzeba, zalety i wady Konstrukcja DTD Definicje atrybutów E Encje parametryczne Encje parametryczne definiuje sie˛ i używa przy pomocy znaku %: Listing 7: Przykład użycia encji zewnetrznych ˛ 1 2 3 4 <!ENTITY % fontstyle "TT | I | B | U"> <!ENTITY % inline "#PCDATA | %fontstyle;"> <!ELEMENT p (%inline;)*> <!ELEMENT font (%inline;)*> Można używać np. do definicji elementów w razie potrzeby dodać lub zmienić jeden fragment wykorzystywany w definicji wielu elementów. Możliwe jest też właczanie ˛ lub wyłaczanie ˛ fragmentów DTD poprzez instrukcje: Listing 8: Przykład użycia encji zewnetrznych ˛ 1 2 <![INCLUDE[ ... definicja_uzywana ... ]]> <![IGNORE[ ... definicja_nieuzywana ... ]]> Można teraz łatwo tworzyć kilka wersji DTD w jednym tylko dokumencie i właczać ˛ pewne sekcje DTD parametrycznie. T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie DTD - potrzeba, zalety i wady Konstrukcja DTD Definicje atrybutów E Wady DTD duża złożoność brak możliwości określania tekstowej zawartości atrybutów mało dokładne określanie ilości wystapie ˛ ń danego elementu (+, ?, ∗) brak struktury XML w DTD Rozwiazanie: ˛ schematy XML T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż Plan 1 Przypomnienie 2 DTD 3 Schematy XML Przykłady Elementy proste i złożone Definicje typów Dodatkowe możliwości 4 Podsumowanie T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż Schemat XML Listing 9: Przykład schematu XML 1 2 3 4 <?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> ... </xs:schema> i użycie referencji do schematu w pliku XML jako przestrzeni nazw: Listing 10: Plik XML <?xml version="1.0" encoding="UTF-8"?> <element_glowny xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="moj_schemat.xsd"> 3 ... 4 </element_glowny> 1 2 T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż W XML rozróżniamy kilka typów elementów typ prosty - element zawierajacy ˛ jedynie dane proste (liczby, tekst) typ złożony - element zawierajacy ˛ inne elementy badź ˛ atrybuty każdy atrybut jest typem prostym - nie może zawierać ani atrybutów ani elementów W schemacie typy złożone deklaruje autor, typy proste sa˛ już zawarte w specyfikacji. Autor jednak może tworzyć nowe typy proste. T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż Przykład schematu Listing 11: Przykład schematu XML2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:complexType name="adres"> <xsd:element name="nazwisko" type="xsd:string"/> <xsd:element name="imie" type="xsd:string"/> <xsd:element name="ulica" type="xsd:string"/> <xsd:element name="nr_domu" type="xsd:int"/> <xsd:element name="nr_mieszkania" type="xsd:int" use="optional"/> </xsd:complexType> <xsd:simpleType name="nr_ewidencyjny"> <xsd:pattern value="\d{2}-\d{5}" base="xsd:string"/> </xsd:simpleType> <xsd:element name="moj_adres" type="adres" maxOccurs="1"/> </xsd:schema> Definiujemy przestrzeń nazw xsd, typ złożony adres oraz typ prosty nr_ewidencyjny składajacy ˛ sie˛ z dwóch cyfr, kreski i pieciu ˛ cyfr. T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż Wbudowane typy proste Poniżej wykaz typów jakich można używać: binary,boolean, byte, century,date, decimal, double, float, int, integer, long ENTITIES, ENTITY, ID, IDREF, IDREFS, language, month, Name, NCName, NMTOKEN,NMTOKENS,NOTATION negativeInteger, nonNegativeInteger, nonPositiveInteger, positiveInteger ,QName, recurringDate, recurringDay, recurringDuration, short, string,time timeDuration, timeInstant, timePeriod, unsignedByte,unsignedInt, unsignedLong, unsignedShort, uriReference, year T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż Krotność wystapienia ˛ elementu określa sie˛ przy pomocy nastepuj ˛ acych ˛ atrybutów: minOccurs, maxOccurs. Domyślnie maxOccurs=minOccurs. Bez ograniczeń: maxOccurs="unbounded" Można też użyć jednego z dwóch atrybutów fixed lub default W deklaracji atrybutu <xsd:attribute name="licznik"value="100"type="xsd:int"> możliwe jest użycie atrybutu use który może mieć jedna˛ z nastepuj ˛ acych ˛ wartości required, optionaln fixed, default, prohibited. Gdy use="default"value="100" to jeśli wartość nie zostanie określona w samym atrybucie to przypisana zostanie wartość domyślna. T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż Definicje typów prostych Listing 12: Typy proste 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:simpleType name="nr_ewidencyjny"> <xsd:pattern value="\d{2}-\d{5}" base="xsd:string"/> </xsd:simpleType> <xsd:simpleType name="dzienMiesiaca" base="xsd:integer"> <xsd:minInclusive value="1"/> <xsd:maxInclusive value="31"/> </xsd:simpleType> <xsd:simpleType name="dzienTygodnia" base="xsd:string"> <xsd:enumeration value="Poniedzialek"/> <xsd:enumeration value="Wtorek"/> <xsd:enumeration value="Sroda"/> <xsd:enumeration value="Czwartek"/> <xsd:enumeration value="Piatek"/> <xsd:enumeration value="Sobota"/> <xsd:enumeration value="Niedziela"/> </xsd:simpleType> </xsd:schema> Uwaga: wyrażenie używane do formatowania xsd:pattern maja˛ postać wyrażeń regularnych Perla! T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż Anonimowe definicje typów Czasami nie ma konieczności definiowania osobnych typów. Dzieje sie˛ tak w przypadku, gdy dany tym byłby użyty np. jedynie raz. Można wtedy zamiast xsd:simpleType czy xsd:complexType użyć po prostu xsd:element lub xsd:attribute bez podawania typu. Można też definiować elementy puste: Listing 13: Przykład anonimowej definicji typu 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <xsd:element name="Album" minOccurs="0" maxOccurs="50"> <xsd:complexType> <xsd:element name="Title" type="xsd:string"/> <xsd:element name="Year" type="xsd:Year"/> <xsd:attribute name="id" type="xsd:string"/> </xsd:complexType> </xsd:element> <xsd:element name="Cover"> <xsd:complexType content="empty"> <xsd:attribute name="source" type="xsd:string"/> <xsd:attribute name="width" type="xsd:integer"/> <xsd:attribute name="height" type="xsd:integer"/> </xsd:complexType> </xsd:element> T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż Elementy mieszane Można też definiować typ mieszany: elementy + zwykły tekst dzieki ˛ atrybutowi content="mixed". W DTD można było jedynie określić zawartość bez kolejności wystepowania. ˛ W schematach mamy możliwość podawania kolejności i krotności wystepowania ˛ poszczególnych elementów. Listing 14: Elementy mieszane 1 2 3 4 5 6 7 8 9 10 11 12 <xsd:element name="przypominajka"> <xsd:complexType content="mixed"> <xsd:element name="nazwisko" type="xsd:string"/> <xsd:element name="tytul" type="xsd:string"/> <xsd:element name="terminMaksymalny"> <xsd:simpleType base="xsd:integer"> <xsd:maxExclusive value="14"/> </xsd:simpleType> </xsd:element> <xsd:element name="wartosc" type="xsd:decimal"/> </xsd:complexType> </xsd:element> Atrybut content może przyjmować również wartości "elementOnly" "textOnly" - wartość domyślna dla typów złożonych - domyślny model zawartości dla typu prostego T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż Komentarze w schematach W schematach XML używa sie˛ trzech typów komentarzy: xsd:annotation - ogólny komentarz zawierajacy ˛ dwa pozostałe - bardziej szczegółowe xsd:documentation xsd:appInfo - typowy komentarz przeznaczony dla czytajacych ˛ dokument - informacje dla aplikacji czytajacych ˛ dokument np: Listing 15: komentarze 1 2 3 4 5 <xsd:annotation> <xsd:documentation> Jakis komentarz dla przyszlych pokolen </xsd:documentation> </xsd:annotation> T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż xsd:choice Wybór umożliwia wskazanie szeregu elementów, z których zostanie wybrany zawsze tylko jeden Listing 16: Marny wybór 1 2 3 4 5 6 7 8 <xsd:element name="person"> <xsd:complexType> <xsd:choice> <xsd:element name="employee" type="employee"/> <xsd:element name="member" type="member"/> </xsd:choice> </xsd:complexType> </xsd:element> Można też tworzyć sekwencje, aby wymusić kolejność użycia elementów: Listing 17: Marny wybór 1 2 3 4 5 6 7 8 <xsd:element name="person"> <xsd:complexType> <xsd:sequence> <xsd:element name="firstname" type="xsd:string"/> <xsd:element name="lastname" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż All i group Oprócz indykatorów wyboru i sekwencji można używać także indykatoru xsd:all. Jego użycie oznacza, że wszystkie elementy musza˛ zostać wykorzystane dokładnie raz: Listing 18: All 1 2 3 4 5 6 7 8 <xsd:element name="person"> <xsd:complexType> <xsd:all> <xsd:element name="firstname" type="xsd:string"/> <xsd:element name="lastname" type="xsd:string"/> </xsd:all> </xsd:complexType> </xsd:element> T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż Pojawienie sie˛ którejś z powyższych trzech konstrukcji można zawrzeć wewnatrz ˛ grupy a po zdefiniowaniu całej grupy można sie˛ do niej odwołać: Listing 19: Grupowanie 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <xsd:group name="persongroup"> <xsd:sequence> <xsd:element name="firstname" type="xsd:string"/> <xsd:element name="lastname" type="xsd:string"/> <xsd:element name="birthday" type="xsd:date"/> </xsd:sequence> </xsd:group> <xsd:element name="person" type="personinfo"/> <xsd:complexType name="personinfo"> <xsd:sequence> <xsd:group ref="persongroup"/> <xsd:element name="country" type="xsd:string"/> </xsd:sequence> </xsd:complexType> T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż Grupy można również tworzyć dl atrybutów: Listing 20: Grupy atrybutów 1 2 3 4 5 6 7 8 9 10 11 <xsd:attributeGroup name="personattrgroup"> <xsd:attribute name="firstname" type="xsd:string"/> <xsd:attribute name="lastname" type="xsd:string"/> <xsd:attribute name="birthday" type="xsd:date"/> </xsd:attributeGroup> <xsd:element name="person"> <xsd:complexType> <xsd:attributeGroup ref="personattrgroup"/> </xsd:complexType> </xsd:element> T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż ANY Czasami nawet najlepiej przemyślany schemat musi dopuszczać możliwość rozszerzenia o kolejny niezdefiniowany element. Do tego typu deklaracji służy xsd:any. Można też rozszerzyć definicje˛ o dowolny atrybut xsd:anyAttribute Listing 21: Rozszerzenie definicji o dowolny element 1 2 3 4 5 6 7 8 9 10 <xsd:element name="person"> <xsd:complexType> <xsd:sequence> <xsd:element name="firstname" type="xsd:string"/> <xsd:element name="lastname" type="xsd:string"/> <xsd:any minOccurs="0"/> </xsd:sequence> <xsd:anyAttribute/> </xsd:complexType> </xsd:element> T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Przykłady Elementy proste i złożone Definicje typów Dodatkowe moż substitutionGroup Łatwo wyobrazić sobie sytuacje kiedy schemat jest dobrze napisany, ale wszystkie nazwy elementów sa˛ w jezyku ˛ angielskim. XML z założenia ma opisywać dane tak aby łatwo sie˛ je czytało. Można użyć podstawienia, które zamiast nazwy np. w jezyku ˛ angielskim pozwoli używać nazw w jezyku ˛ polskim: Listing 22: substitutionGroup 1 2 3 4 5 6 7 8 9 10 11 <xsd:element name="name" type="xsd:string"/> <xsd:element name="nazwisko" substitutionGroup="name"/> <xsd:complexType name="custinfo"> <xsd:sequence> <xsd:element ref="name"/> </xsd:sequence> </xsd:complexType> <xsd:element name="customer" type="custinfo"/> <xsd:element name="klient" substitutionGroup="customer"/> Listing 23: XML 1 2 3 4 5 6 7 <klient> <nazwisko>Jan Kowalski</nazwisko> </klient> <customer> <name>John Smith</name> </customer> Używajac ˛ atrybutu block="substitution" możnaXML zabronić podstawienia nazwy T. Romańczukiewicz 02 Przypomnienie DTD Schematy XML Podsumowanie Plan 1 Przypomnienie 2 DTD 3 Schematy XML 4 Podsumowanie T. Romańczukiewicz XML 02 Przypomnienie DTD Schematy XML Podsumowanie Podsumowanie Aby wymusić konkretna˛ strukture˛ dokumentu i zawartość elementów używa sie˛ DTD lub schematów DTD sa˛ bardziej rozpowszechnione jednak maja˛ wiele ograniczeń (np. brak możliwości dokładnego określania ilości wystapie ˛ ń elementów). DTD jest osobnym "jezykiem" ˛ określajacym ˛ strukture˛ dokumentu Schematy pozwalaja˛ na dużo dokładniejsza˛ kontrole˛ struktury dokumentu, oraz bardziej systematyczne określanie zawartości Sa˛ poprawnie sformułowanym dokumentem XML T. Romańczukiewicz XML 02