XML Schema w przykładach Maciej Ogrodniczuk

Slides:



Advertisements
Podobne prezentacje
20041 Projektowanie dynamicznych witryn internetowych Paweł Górczyński ASP 3.0.
Advertisements

Definiowanie typów dokumentów
Przekształcanie dokumentów XML - XSL
Katarzyna Szafrańska kl. II ti
Język C/C++ Funkcje.
Programowanie obiektowe
Rafał Hryniów Tomasz Pieciukiewicz
XHTML Podstawowe różnice.
Polsko-Japońska Wyższa Szkoła Technik Komputerowych
Polsko-Japońska Wyższa Szkoła Technik Komputerowych
XPath XSLT – część XPath. XSLT – część 12 XPath – XML Path Language Problem: –jednoznaczne adresowanie fragmentów struktury dokumentu XML.
Definiowanie typów dokumentów Część 1: DTD 9 października 2003.
11 Poprawne modele zawartości. Zarządzanie zmianami struktury.
XPath. XSLT – część XPath. XSLT – część 12 XPath – XML Path Language Problem: –jednoznaczne adresowanie fragmentów struktury dokumentu XML.
Definiowanie typów dokumentów Część 2. Przestrzenie nazw, XML Schema
11 XML a SGML. Standardy pokrewne.. 22 SGML a XML – różnice Deklaracja SGML: konfiguracja wyglądu znaczników, ich maksymalnej długości, itp., definicja.
Definiowanie typów dokumentów Część 3. XML Schema.
Definiowanie typów dokumentów Część 1. DTD Definiowanie typów dokumentów – część 1: DTD2 Jak wygląda XML? st. asp. Jan Łapówka Dołowice Górne.
11 Definiowanie typów dokumentów. 22 Jak wygląda XML? st. asp. Jan Łapówka Dołowice Górne Wypadek dnia r o godzinie 13:13 ( piątek ) miał miejsce.
Poprawne modele zawartości. Zarządzanie zmianami struktury. 30 października 2003.
Definiowanie typów dokumentów Część 1. DTD, XML Schema.
Definiowanie typów dokumentów Część 2: XML Schema 16 października 2003.
Definiowanie typów dokumentów Część 2. XML Schema
XML w zarządzaniu formularzami ubezpieczeniowymi ZUS
Definiowanie typów dokumentów Część 3. XML Schema.
Definiowanie typów dokumentów Część 2. Przestrzenie nazw, XML Schema.
Definiowanie typów dokumentów Część 1. DTD, XML Schema.
CLR na platformie .NET Tomasz Kostarski.
XSL Extensible Stylesheet Language 6 listopada 2003.
Zaawansowana składnia XML XML Schema
Definiowanie typów dokumentów Część 3. XML Schema.
Poprawne modele zawartości. Zarządzanie zmianami struktury.
11 Definiowanie typów dokumentów. 22 Jak wygląda XML? st. asp. Jan Łapówka Dołowice Górne Wypadek dnia r o godzinie 13:13 ( piątek ) miał miejsce.
XML Schema XML Schema2 Definiowanie języków XML, SGML – metajęzyki. Definiowanie języków (zastosowań, typów dokumentów, schematów): –określanie.
Technologie XML Mgr inż. Michał Jaros Technologie XML wykład 3.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 6: Tablice, rekordy, zbiory.
1 Dygresja: cztery płyty główne…. 2 Dygresja: osobliwości C /* cos o nieistniejacym typie Boolean */ /* oraz o operatorze przecinkowym */ #include int.
XML. Pierwszy dokument XML Witaj świecie! Elementy i atrybuty niezwykle oryginalny Witaj świecie! Druga możliwość: Witaj świecie!
Typy danych – podstawy 1 W Adzie wszystkie dane muszą być określonego typu. Definicja Typ danych (data type) jest to zbiór wartości i operacji, które można.
Wykład 2 struktura programu elementy języka typy zmienne
Systemy zarządzania treścią CMS
Wprowadzenie do programowania w języku Turbo Pascal
Proszę skopiować eclipse najlepiej do c:\temp uruchamiamy rejestrujemy jako academic.
Made by Mateusz Szirch Kilka słów o JavaScript.
HTML 4 Zebrał i opracował : dr inż. Jerzy Zgraja.
HTML 4 Zebrał i opracował : dr inż. Jerzy Zgraja.
Podstawy programowania
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
XML – eXtensible Markup Language 3
ANNA BANIEWSKA SYLWIA FILUŚ
Elementy Rachunku Prawdopodobieństwa i Statystyki
Budowanie tabel i relacji
XML – eXtensible Markup Language 2. Nazwy atrybutów i elementów w języku XML muszą spełniać te same reguły (te same reguły musza spełniać też inne, rzadziej.
XML – eXtensible Markup Language
Projektowanie stron WWW
XML Publisher Przedmiot i zakres szkolenia Przedmiot i zakres szkolenia Przeznaczenie XML Publisher Przeznaczenie XML Publisher Definiowanie Definiowanie.
Model obiektowy bazy danych
REGUŁY ZABEZPIECZEŃ W APLIKACJI OeBS Przedmiot i zakres szkolenia Przedmiot i zakres szkolenia Przedmiot i zakres szkolenia Przedmiot i zakres szkolenia.
Opracowanie mgr Karol Adamczyk
Typy danych, klucz podstawowy, klucz obcy
Piotr Czapiewski Wydział Informatyki ZUT. Web Services Description Language.
Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.
Podstawy programowania
Wykład 2 Programowanie obiektowe. Programowanie obiektowe wymaga dobrego zrozumienia działania funkcji definiowanych przez użytkownika, w ten sposób będziemy.
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka Podstawy.
Aplikacje internetowe XML Paweł Lenkiewicz. Aplikacje internetowe – XML2 eXtensible Markup Language Uniwersalny język opisu danych Często używany we współpracy.
Microsoft® Office Word
Programowanie Obiektowe – Wykład 2
Założenia projektowe Javy
Język C++ Typy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Zapis prezentacji:

XML Schema w przykładach Maciej Ogrodniczuk mog@empolis.pl

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

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.

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.

Definiujemy Typy Dokumentów Związki zawierania się i porządku elementów definiowane są z użyciem wyrażeń regularnych: <!ELEMENT nazwa (model_zawartości)> * – 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.

Definiujemy Typy Dokumentów – cd. <!ATTLIST nazwa_elementu nazwa_atrybutu typ kwalifikator_wartości wartość_domyślna?> 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.

Związanie DTD z instancją dokumentu: Przykład DTD <!ELEMENT słownik (hasło)+> <!ELEMENT hasło (pojęcie, objaśnienie)> <!ATTLIST hasło id ID #REQUIRED dataZapisu NMTOKEN #REQUIRED> <!ELEMENT pojęcie (#PCDATA)> <!ELEMENT objaśnienie (#PCDATA | link)*> <!ELEMENT link (#PCDATA)> <!ATTLIST link 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.

Dokument zgodny z DTD <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE słownik PUBLIC "-//EMPOLIS//DICTIONARY//PL" "http://www.empolis.pl/test/testdic.dtd"> <słownik> <hasło id=”ciepły” dataZapisu=”2001-05-30”> <pojęcie>ciepły</pojęcie> <objaśnienie>mający temperaturę pośrednią między gorącem a zimnem</objaśnienie> </hasło> <hasło id=”ciepluchny” dataZapisu=”2001-06-01”> <pojęcie>ciepluchny</pojęcie> <objaśnienie>forma zdrobniała o odcieniu intensywnym od <link hasło=”ciepły”>ciepły</link> </objaśnienie> </hasło> </słownik>

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.

Ś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.

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

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.

Typy danych: proste i złożone Typy 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: <xsd:element name="pojęcie" type="xsd:string"/>

Typy wbudowane – przegląd Najczęś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 –126789 – 126789, float – liczba rzeczywista (dopuszcza także wartości: –INF, INF i NaN), date – data (postaci 2002-02-28), ID, IDREF, CDATA, language, uriReference...

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.

Typ złożony: przykład definicji <xsd:element name="hasło"> <xsd:complexType> <xsd:sequence> <xsd:element name="pojęcie" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element name="objaśnienie" type="xsd:string" minOccurs="1" maxOccurs="1"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:ID" /> <xsd:attribute name="dataZapisu" type="xsd:dateTime" use="required" /> </xsd:complexType> </xsd:element>

Elementy opcjonalne DTD: XML Schema: <!ELEMENT pojazd (pociąg | samolot | samochód)> XML Schema: <xsd:element name="pojazd"> <xsd:complexType> <xsd:choice> <xsd:element name="pociąg" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element name="samolot" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element name="samochód" type="xsd:string" minOccurs="1" maxOccurs="1"/> </xsd:choice> </xsd:complexType> </xsd:element>

Nowość: Dowolna kolejność W SGML-u – tak, w XML-u z DTD – nie! <xsd:element name="Książka"> <xsd:complexType> <xsd:all> <xsd:element name="Tytuł" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element name="Autor" type="xsd:string" minOccurs="1" maxOccurs="1"/> </xsd:all> </xsd:complexType> </xsd:element> Uwaga: Elementy w zasięgu all mogą wystąpić co najwyżej raz. 

Typ złożony, ale prosty Przypadek: Chcemy zdefiniować element z zawartością tekstową i atrybutem. <xsd:element name="roślina"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:string"> <xsd:attribute name="gatunek" type="xsd:string" use="required"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element>

Typy anonimowe a typy nazwane Oddzielenie pojęcia elementu od typu zawartości: typ anonimowy: <xsd:element name="osoba"> <xsd:complexType> ... </xsd:complexType> </xsd:element> typ nazwany: <xsd:element name="osoba" type="osoba"/> <xsd:complexType name="osoba"> ... </xsd:complexType>

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. –

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 –

Przykład: Nowy typ prosty Korzystanie z aspektów wymaga zastosowania w definicji typu elementu ograniczającego xsd:restriction. Nowy nazwany typ prosty tworzymy poprzez użycie elementu xsd:simpleType: <xsd:simpleType name="kodPocztowy"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{2}-\d{3}"/> </xsd:restriction> </xsd:simpleType>

Przykład: Anonimowy typ prosty Zakres wartości liczbowych: <xsd:element name="wiek"> <xsd:simpleType> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="0"/> <xsd:maxInclusive value="120"/> </xsd:restriction> </xsd:simpleType> </xsd:element> Typ wyliczeniowy: <xsd:element name="plec"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="K"/> <xsd:enumeration value="M"/> </xsd:restriction> </xsd:simpleType> </xsd:element>

Przykład: Lista wartości <xsd:simpleType name="Lista5"> <xsd:list itemType="xsd:integer"/> </xsd:simpleType> <xsd:simpleType name="Lista5"> <xsd:restriction base="Lista"> <xsd:length value="5"/> </xsd:restriction> </xsd:simpleType> Lub prościej: <xsd:simpleType name="LotteryNumbers"> <xsd:restriction> <xsd:simpleType> <xsd:list itemType="OneToNinetyNine"> </xsd:simpleType> <xsd:length value="6"/> </xsd:restriction> </xsd:simpleType>

Rozszerzanie typów <xsd:complexType name="Publikacja"> <xsd:sequence> <xsd:element name="Tytuł" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/> <xsd:element name="Autor" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/> <xsd:element name="RokPubl" type="xsd:year" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="Książka"> <xsd:complexContent> <xsd:extension base="Publikacja" > <xsd:sequence> <xsd:element name="ISBN" type="xsd:string" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType>

Zawężanie typów <xsd:complexType name="Publikacja"> <xsd:sequence> <xsd:element name="Tytuł" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/> <xsd:element name="Autor" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="PublikacjaJednegoAutora"> <xsd:complexContent> <xsd:restriction base="Publikacja" > <xsd:sequence> <xsd:element name="Tytuł" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/> <xsd:element name="Autor" type="xsd:string" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:restriction> </xsd:complexContent> </xsd:complexType>

Rozszerzaniu i zawężaniu mówimy: NIE! Zabraniamy rozszerzania i zawężania: <xsd:complexType name="Publikacja" final="#all"> <xsd:complexType name="Publikacja" final="extension"> Zabraniamy zawężania: <xsd:complexType name="Publikacja" final="restriction">

Zastępowanie elementów Możemy chcieć używać nazw elementów wymiennie, np. w wersji skróconej i rozszerzonej. <xsd:element name="data" type="xsd:date"/> <xsd:element name="dataOstatniegoOdwołania" substitutionGroup="data" type="xsd:date"/> <obiekt> <data>2002-02-28</data> </obiekt> <obiekt> <dataOstatniegoOdwołania>2002-02-28 </dataOstatniegoOdwołania> </obiekt>

Definicje globalne i lokalne <xsd:element name="Książka"> <xsd:complexType> <xsd:sequence> <xsd:element name="Autor" type="xsd:string" minOccurs="1" maxOccurs="1"/> ... <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="ISBN"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{2}-\d{3}"/> </xsd:restriction> </xsd:simpleType> </xsd:element>

Użycie XML Schema <?xml version="1.0"?> <słownik xmlns="http://www.empolis.pl" xmlns:xsi=http://www.w3.org/2001/XMLSchema xsi:schemaLocation="http://www.empolis.pl dictionary.xsd"> ... </słownik> 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.

Jeszcze jeden prosty przykład [1/3] XML Schema rozszerza funkcjonalność DTD (możliwa jest automatyczna konwersja DTD do nowego formatu): <!ELEMENT Biblioteka (Książka)*> <!ELEMENT Książka (Tytuł, Autor, DataWydania, ISBN)> <!ELEMENT Tytuł (#PCDATA)> <!ELEMENT Autor (#PCDATA)> <!ELEMENT DataWydania (#PCDATA)> <!ELEMENT ISBN (#PCDATA)>

Jeszcze jeden prosty przykład [2/3] <?xml version="1.0"?> <xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema targetNamespace=http://www.empolis.pl xmlns=http://www.empolis.pl elementFormDefault="qualified"> <xsd:element name="Biblioteka"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Książka" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> [...] </xsd:schema>

Jeszcze jeden prosty przykład [3/3] <xsd:element name="Książka"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Tytuł" minOccurs="1" maxOccurs="1"/> <xsd:element ref="Autor" minOccurs="1" maxOccurs="1"/> <xsd:element ref="DataWydania" minOccurs="1" maxOccurs="1"/> <xsd:element ref="ISBN" minOccurs="1" maxOccurs="1"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Tytuł" type="xsd:string"/> <xsd:element name="Autor" type="xsd:string"/> <xsd:element name="DataWydania" type="xsd:string"/> <xsd:element name="ISBN" type="xsd:string"/>

Model mieszany: dokument <?xml version="1.0"?> <List xmlns=http://www.list.pl xmlns:xsi=http://www.w3.org/2001/XMLSchema xsi:schemaLocation="http://www.list.pl Letter.xsd"> <Treść> Szanowny Panie! Z powodu niepogratulowania mi otrzymania <wyróżnij>nagrody Nobla</wyróżnij> może mi się Pan od dzisiaj nie kłaniać. </Treść> </List>

Model mieszany w XML Schema <?xml version="1.0"?> <xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema targetNamespace=http://www.list.pl xmlns=http://www.list.pl elementFormDefault="qualified"> <xsd:element name="List"> <xsd:complexType> <xsd:sequence> <xsd:element name="Treść" minOccurs="1" maxOccurs="1"> <xsd:complexType mixed="true"> <xsd:sequence> <xsd:element name="wyróżnij" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>

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?)

Online www.w3.org/XML/Schema Źródło najświeższych informacji o XML Schema www.xmlspy.com XML Spy www.tibco.com/products/extensibility/solutions/turbo_xml.html 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