69
Definiowanie typów dokumentów DTD, XML Schema

Wyklad2 - XSD

Embed Size (px)

Citation preview

Page 1: Wyklad2 - XSD

Definiowanie typów dokumentów

DTD, XML Schema

Page 2: Wyklad2 - XSD

2

Tematyka

Struktura XML DTD XML Schema

Page 3: Wyklad2 - XSD

3

Struktura XML

Deklaracja XMLAtrybut

Zawartość tekstowa

Element głównyElement

Znacznik początkowy

Znacznik końcowy

Page 4: Wyklad2 - XSD

4

Struktura logiczna dokumentu XML

zeznanie-sprawcy

miejsceautor tresc

Jan Leski Sopot

Wypadek dnia data

22.10.2007

o godzinie godzina

13:13

( dzienTygodnia

środa

...

nr="1313/2001"

Page 5: Wyklad2 - XSD

5

Składnia XML

Deklaracja XML:<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

Znaczniki:<tag attributename="attribute value"> </tag>

Znaczniki elementu pustego:<br></br> <br/>

Komentarz:<!-- komentarz -->

Instrukcja przetwarzania:<?target processing-instruction-body?>

Sekcja CDATA:<![CDATA[dowolny <tekst " nieprzetwarzany & przez [ parser]]>

Page 6: Wyklad2 - XSD

6

Encje predefiniowane

&amp; &

&lt; <

&gt; >

&apos; '

&quot; "

Page 7: Wyklad2 - XSD

7

Unicode

Światowy standard kodowania znaków. Odmiany:

– UTF-7 (korzysta tylko z 7-bitowego zestawu znaków ASCII)– UTF-8 (pierwsze 128 – ASCII, znak zajmuje od 1 do 6 bajtów)– UTF-16 (każdy znak to 16-bitów)– UTF-32 (każdy znak 32-bity)– UCS-4 (znak zajmuje zawsze 4 bajty)

Obowiązkowy standard dla dokumentów XML:– każde narzędzie XML-owe musi wspierać

przynajmniej UTF-8 Sposób użycia w dokumentach XML:

– jako odpowiedni ciąg bajtów– &#kod; - kod dziesiętny znaku– &#xkod; - kod szesnastkowy znaku

Page 8: Wyklad2 - XSD

8

Definiowanie języków

XML, SGML Definiowanie języków (zastosowań, struktury dokumentów,

typów dokumentów):– określanie zestawu dopuszczalnych elementów, atrybutów

definiowanie dopuszczalnej zawartości elementów (tekst, inne elementy)

– przypisywanie atrybutów do elementów– inne części

Metody definiowania struktury:– dokument XML bez formalnej definicji struktury– DTD – Document Type Definition– XML Schema (rekomendacja W3C z 2 maja 2001)

Page 9: Wyklad2 - XSD

9

Poprawność struktury dokumentu

Dokument XML poprawny składniowo każdy element musi być zamknięty:– nie ma nakładających się elementów– wartości atrybutów w apostrofach lub cudzysłowach

Dokument XML poprawny strukturalnie– struktura dokumentu zgodna ze strukturą

zdefiniowaną w definicji typu dokumentu,– obecne wszystkie wymagane atrybuty

Page 10: Wyklad2 - XSD

10

Modelowanie typów dokumentów

Wieloetapowy proces:– analiza struktury modelowanych bytów,– analiza przykładowych dokumentów,– analiza potencjalnych zastosowań dokumentów oraz

przypadków użycia,– abstrakcyjny projekt struktury,– kodowanie projektu struktury np. przy pomocy DTD lub

XML Schema,– testowanie,– stała adaptacja.

Page 11: Wyklad2 - XSD

11

Projektowanie struktury dokumentów

wiersz

autor

tytuł

zwrotka*

?

wers*

Page 12: Wyklad2 - XSD

12

DTD – prosty przykład

<!DOCTYPE wiersz [ <!ELEMENT wiersz (autor, tytul?, zwrotka*)> <!ATTLIST wiersz bialy (tak|nie) "nie"> <!ELEMENT autor (#PCDATA)> <!ELEMENT tytul (#PCDATA)> <!ELEMENT zwrotka (wers)*> <!ELEMENT wers (#PCDATA)>]>

element głównyzawartość elementów

atrybutywyrażenia regularne

Page 13: Wyklad2 - XSD

13

Braki DTD

Zastosowania XML w integracji aplikacji – struktury danych:– Przeniesienie zadania sprawdzania poprawności tworzonej

aplikacji przez narzędzie walidujące – 60% tworzonego kodu dotyczy weryfikacji poprawności

danych Cechy DTD:

– Mała kontrola nad tekstową zawartością elementów i wartościami atrybutów

– Ogólne metody definiowania częstości wystąpień– Nieobiektowe, nierozszerzalne modele struktury

Page 14: Wyklad2 - XSD

14

DTD vs XML Schema

• Wywodzi się z SGML-a

• Specyficzna składnia

• 10 typów danych

• Zaprojektowany na potrzeby XML

• Składnia XML

• 44 wbudowane typy proste

• Typowy mieszany model zawartości

• Możliwość definiowania własnych typów danych

• Brak kontroli tekstowej zawartości elementów

• Zaawansowana kontrola tekstowej zawartości elementów

Page 15: Wyklad2 - XSD

15

XML Schema

15 lutego 1999: Dokument W3C opisujący wymagania stawiane przed nowym formatem:– mechanizmy tworzenia struktury– typy proste– reguły przetwarzania

Przestrzeń nazw XML Schema: http://www.w3.org/2001/XMLSchema

Page 16: Wyklad2 - XSD

16

Elementy i atrybuty

<xsd:element name="osoba"> <xsd:complexType> <xsd:sequence> <xsd:element name="imie" type="xsd:string"/> <xsd:element name="nazwisko" type="xsd:string"/> <xsd:element name="plec" type="xsd:string"/> <xsd:element name="wiek" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:ID"/> <xsd:attribute name="NIP" type="NIPTyp"/> </xsd:complexType></xsd:element>

Page 17: Wyklad2 - XSD

17

Kontrola użycia elementów i atrybutów

<xsd:element name="osoba"> <xsd:complexType> <xsd:sequence> <xsd:element name="imie" type="xsd:string" minOccurs="1" maxOccurs="2"/> <xsd:element name="nazwisko" type="xsd:string"/> <xsd:element name="plec" type="xsd:string"/> <xsd:element name="wiek" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:ID" use="required"/> <xsd:attribute name="NIP" type="NIPTyp"/> </xsd:complexType></xsd:element>

Page 18: Wyklad2 - XSD

18

Typy

Typy wg zasięgu definicji:– typy nazwane– typy anonimowe

Typy wg zawartości:– typy proste– typy złożone o zawartości:

prostej elementowej mieszanej pustej

Typy wg pochodzenia:– typy wbudowane– typy zdefiniowane w schemacie:

rozszerzenia innych typów ograniczenia innych typów listy i unie

Page 19: Wyklad2 - XSD

19

Typy nazwane i anonimowe

Typy nazwane:<xsd:complexType name="OsobaTyp"> <xsd:sequence> <xsd:element name="imie" type="xsd:string"/> <xsd:element name="nazwisko" type="xsd:string"/> </xsd:sequence></xsd:complexType><xsd:element name="osoba" type="OsobaTyp"/>

Typy anonimowe:<xsd:element name="osoba"> <xsd:complexType> <xsd:sequence> <xsd:element name="imie" type="xsd:string"/> <xsd:element name="nazwisko" type="xsd:string"/> </xsd:sequence> </xsd:complexType></xsd:element>

Page 20: Wyklad2 - XSD

20

Typy proste i złożone

Typy proste:<xsd:simpleType name="NIPTyp"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-\d{3}-\d{2}-\d{2}"/> </xsd:restriction></xsd:simpleType>

Typy złożone:<xsd:complexType name="OsobaTyp"> <xsd:sequence> <xsd:element name="imie" type="xsd:string"/> <xsd:element name="nazwisko" type="xsd:string"/> </xsd:sequence></xsd:complexType>

Element może mieć typ prosty lub złożony Atrybut może mieć wyłącznie typ prosty

Page 21: Wyklad2 - XSD

21

Typy złożone – typy zawartości

Zawartość elementowa:<osoba PESEL="12345678901"> <imie>Jan</imie> <nazwisko>Kowalski</nazwisko></osoba>

Zawartość prosta:<masa jm="kg">10.55</masa>

Page 22: Wyklad2 - XSD

22

Typy złożone – typy zawartości

Zawartość mieszana:

Zawartość pusta: <osoba PESEL="12345678901"/>

Page 23: Wyklad2 - XSD

23

Definiowanie zawartości elementowej

Grupy deklaracji elementów:– sequence, choice, all

Zagnieżdżanie grup:<xsd:complexType name="OsobaTyp"> <xsd:sequence> <xsd:element name="imie" type="xsd:string"/> <xsd:element ref="nazwisko"/> <xsd:choice> <xsd:element name="nr-dowodu" type="DowódTyp"/> <xsd:element name="nr-paszportu" type="PaszportTyp"/> </xsd:choice> </xsd:sequence></xsd:complexType>

Page 24: Wyklad2 - XSD

24

Grupa all – ograniczenia

Nie może zawierać innych grup (tylko deklaracje elementów i odwołania do elementów)

Każdy element może wystąpić co najwyżej raz Grupa all nie może być zagnieżdżona w innej grupie Zagnieżdżanie grup <xsd:complexType name="OsobaTyp">

<xsd:all> <xsd:element name="imie" type="xsd:string"/> <xsd:element name="drugie-imie" type="xsd:string" minOccurs="0"/> <xsd:element ref="nazwisko"/> </xsd:all></xsd:complexType>

Page 25: Wyklad2 - XSD

25

Definiowanie zawartości prostej

<xsd:complexType name="MasaTyp"> <xsd:simpleContent> <xsd:extension base="xsd:decimal"> <xsd:attribute name="jm" type="xsd:string"/> </xsd:extension> </xsd:simpleContent></xsd:complexType>

Page 26: Wyklad2 - XSD

26

Definiowanie zawartości mieszanej

<xsd:complexType name="ZeznanieTyp" mixed="true"> <xsd:sequence> <xsd:element name="data" type="xsd:string"/> <xsd:element name="godzina" type="xsd:string"/> <xsd:element name="dzien-tygodnia" type="xsd:string"/> <xsd:element name="poszkodowany" type="xsd:string"/> </xsd:sequence></xsd:complexType>

Page 27: Wyklad2 - XSD

27

Definiowanie zawartości pustej

<xsd:complexType name="OsobaTyp"> <xsd:attribute name="PESEL" type="PESELTyp"/></xsd:complexType>

Page 28: Wyklad2 - XSD

28

Globalne i lokalne deklaracjeelementów i atrybutów - lokalne

Deklaracje lokalne<xsd:complexType name="OsobaTyp"> <xsd:sequence> <xsd:element name="imie" type="xsd:string" minOccurs="1" maxOccurs="2"/> <xsd:element name="nazwisko" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="NIP" type="NIPTyp" use="required"/></xsd:complexType>

Page 29: Wyklad2 - XSD

29

Globalne i lokalne deklaracjeelementów i atrybutów - globalne

Deklaracje globalne i odwołania<xsd:element name="imie" type="xsd:string"/><xsd:element name="nazwisko" type="xsd:string"/><xsd:attribute name="NIP" type="NIPTyp"/><xsd:complexType name="OsobaTyp"> <xsd:sequence> <xsd:element ref="imie" minOccurs="1" maxOccurs="2"/> <xsd:element ref="nazwisko"/> </xsd:sequence> <xsd:attribute ref="NIP" use="required"/></xsd:complexType>

Page 30: Wyklad2 - XSD

30

Elementy a atrybuty

Informacje modelowane zwykle w elementach:– zawartość - np. nazwisko, wiek– struktura – np. akt prawny, rozdział– wyszukiwanie - indeks, słowo kluczowe– odesłania – odnośniki, przypisy

Informacje modelowane zwykle w atrybutach:– metainformacje – język, format liczb– identyfikatory wartości i odwołania do nich

Page 31: Wyklad2 - XSD

31

Elementy vs atrybuty

Zalety elementów:– mogą zawierać inne elementy i atrybuty– mogą się powtarzać– można bezpiecznie rozszerzać ich model zawartości– można dokładnie sterować sposobem ich występowania -

kolejność, liczba wystąpień

Zalety atrybutów:– szybsze do definiowania– mogą mieć wartości domyślne

Page 32: Wyklad2 - XSD

32

Wartości domyślne i ustalone

<xsd:element name="ilość" type="xsd:positiveInteger" default="1"/><xsd:element name="cena" type="xsd:positiveInteger" fixed="5"/><xsd:attribute name="waluta" type="xsd:string" default="PLN"/><xsd:attribute name="VAT" type="xsd:string" fixed="22%"/>

Przykład

<kwota waluta="EUR" VAT="16%">20</kwota>

powinno być bez VAT

Page 33: Wyklad2 - XSD

33

Przestrzenie nazw

Wykorzystanie– Analogiczna nazwa określająca te same elementy w różnych

powiązanych dokumentach - wspólnie przetwarzane, zagnieżdżenie jednego w drugim

Koncepcja– grupa nazw oddzielona (składniowo i semantycznie) od innych

nazw

Historia– rekomendacja W3C ze stycznia 1999 r– XML 1.0 (również DTD) nie wspierają przestrzeni nazw– standardy XML Schema, XSL, XLink wspierają przestrzenie nazw

Page 34: Wyklad2 - XSD

34

Nazwy przestrzeni nazw

Identyfikatory URI, np:– http://www.w3.org/XSLT/Transform/1.0– http://zajecia.edu.pl/osoby– urn:szz:mimuw

Nazwy przestrzeni nazw:– nie muszą wskazywać konkretnych zasobów– pełnią funkcję unikatowych identyfikatorów– są porównywane jako napisy - istotna wielkości liter

Wykorzystanie w dokumentach XML:– odwzorowanie na kilkuznakowy prefiks– poprzedzanie nazw prefiksem

Page 35: Wyklad2 - XSD

35

Użycie przestrzeni nazw XML

<os:osoba xmlns:os="http://zajecia.edu.pl/osoby" xmlns:inst="http://zajecia.edu.pl/instytucje" xmlns:xhtml="http://www.w3.org/1999/xhtml"> <os:imie>Adam</os:imie> <os:nazwisko>Leski</os:nazwisko> <os:NIP>123-456-78-90</os:NIP> <os:opis><xhtml:b>Prezes firmy</xhtml:b> </os:opis> <os:pracuje-w> <inst:firma> <inst:nazwa>WinPol</inst:nazwa> <inst:NIP>987-654-32-10</inst:NIP> </inst:firma> </os:pracuje-w></os:osoba>

Page 36: Wyklad2 - XSD

36

Domyślna przestrzeń nazw

<osoba xmlns="http://zajecia.edu.pl/osoby" xmlns:inst="http://zajecia.edu.pl/instytucje" xmlns:xhtml="http://www.w3.org/1999/xhtml"> <imie>Adam</imie> <nazwisko>Leski</nazwisko> <NIP>123-456-78-90</NIP> <opis><xhtml:b>Prezes firmy</xhtml:b> <pracuje-w> <inst:firma> <inst:nazwa>WinPol</inst:nazwa> <inst:NIP>987-654-32-10</inst:NIP> </inst:firma> </pracuje-w></osoba>

Page 37: Wyklad2 - XSD

37

Widoczność przestrzeni nazw

<os:osoba xmlns:os="http://zajecia.edu.pl/osoby"> <os:imie>Adam</os:imie> <os:nazwisko>Leski</os:nazwisko> <os:NIP>123-456-78-90</os:NIP> <os:pracuje-w> <os:firma xmlns:os="http://zajecia.edu.pl/instytucje"> <os:nazwa>WinPol</os:nazwa> <os:NIP>987-654-32-10</os:NIP> </os:firma> </os:pracuje-w></os:osoba>

Page 38: Wyklad2 - XSD

38

Nazwy z prefiksem i bez

Nazwy elementów:– kwalifikowane – należą do pewnej przestrzeni nazw

poprzedzone prefiksem nie poprzedzone prefiksem, jeśli są w zasięgu deklaracji

domyślnej

– niekwalifikowane – nie należą do żadnej przestrzeni nazw nie poprzedzone prefiksem, poza zasięgiem deklaracji

domyślnej przestrzeni nazw

Nazwy atrybutów:– poprzedzone prefiksem – należą do pewnej przestrzeni nazw– nie poprzedzone prefiksem – nie należą do żadnej przestrzeni nazw

Page 39: Wyklad2 - XSD

39

Nazwy elementów bez prefiksów

<osoba xmlns="http://zajecia.edu.pl/osoby"> <imie>Adam</imie> <nazwisko>Leski</nazwisko> <NIP>123-456-78-90</NIP> <pracuje-w> <firma xmlns=""> <nazwa>WinPol</nazwa> <NIP>987-654-32-10</NIP> </firma> </pracuje-w></osoba>

Page 40: Wyklad2 - XSD

40

Nazwy atrybutów

<osoba xmlns="http://zajecia.edu.pl/osoby" xmlns:xlink="http://www.w3.org/1999/xlink"> <imie>Jan</imie> <nazwisko>Kowalski</nazwisko> <NIP>123-456-78-90</NIP> <pracuje-w xlink:type="simple" xlink:href="..." rodzaj="etat">Business Consulting</pracuje-w></osoba>

Page 41: Wyklad2 - XSD

41

Atrybuty - analiza

Poprawne<x xmlns:n1="http://zajecia.edu.pl/n1"    xmlns:n2="http://zajecia.edu.pl/n2">   <good n1:a="1" n2:a="2"/>

</x> Niepoprawne

<x xmlns:n1="http://zajecia.edu.pl/n1"    xmlns:n2="http://zajecia.edu.pl/n1">  <bad n1:a="1" n2:a="2"/></x>

Poprawne<x xmlns:n1="http://zajecia.edu.pl/n1"    xmlns="http://zajecia.edu.pl/n1">  <good n1:a="1" a="2"/></x>

Page 42: Wyklad2 - XSD

42

Przestrzenie nazw a schematy

Schemat zapisuje się przy pomocy jednego lub więcej dokumentów schematów

Schemat deklaruje nazwy należące do zero lub więcej przestrzeni nazw Dokument schematu deklaruje nazwy należące do zera lub jednej

przestrzeni nazw Przestrzeń nazw zawiera nazwy zadeklarowane w zero lub więcej

schematach

Page 43: Wyklad2 - XSD

43

Przestrzenie nazw a schematy

osoba imię

nazwisko NIP

http://zajecia.edu.pl/osobyfirma

nazwaNIP

http://zajecia.edu.pl/instytucje

osoby.xsd

inst.xsd

import

Page 44: Wyklad2 - XSD

44

Dokument schematu

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://zajecia.edu.pl/osoby" targetNamespace="http://zajecia.edu.pl/osoby"> <xsd:complexType name="OsobaTyp"> ... </xsd:complexType> <xsd:element name="osoba" type="OsobaTyp"/> <xsd:element name="numer" type="xsd:integer"/> ...</xsd:schema>

Page 45: Wyklad2 - XSD

45

Łączenie schematów

Schemat zapisuje się przy pomocy jednego lub więcej dokumentów schematów

Metody budowania schematu z dokumentów schematów

– instrukcje include, import i redefine– lokalizacje dokumentów schematów są określone w

egzemplarzu– procesor łączy dokumenty schematów znajdujące się w

zdefiniowanych lokalizacjach– lokalizacje dokumentów schematów są przekazywane jako

parametry wiersza poleceń

Page 46: Wyklad2 - XSD

46

include

Dołączanie dokumentu schematu do docelowej przestrzeni nazw głównego dokumentu schematu<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://zajecia.edu.pl/osoby" targetNamespace="http://zajecia.edu.pl/osoby"> <xsd:include schemaLocation="inst.xsd"/> ...</xsd:schema>

Dołączany dokument musi:– mieć taką samą docelową

przestrzeń nazw jakdokument główny, lub

– nie mieć docelowejprzestrzeni nazw

http://zajecia.edu.pl/osoby

osobaimięnazwiskoNIP

osoby.xsd

firmanazwaREGON

inst.xsd

Page 47: Wyklad2 - XSD

47

redefine

Dołączanie dokumentu schematu do docelowej przestrzeni nazw głównego dokumentu schematu z możliwością przedefiniowania:

– typów prostych i złożonych– nazwanych grup modeli– grup atrybutów

<xsd:redefine schemaLocation="inst.xsd"/>http://zajecia.edu.pl/osoby

osobaimięnazwiskoNIPNIPTyp

osoby.xsd

firmanazwaREGONNIPTyp

inst.xsd

Page 48: Wyklad2 - XSD

48

import

Odwołanie do komponentów w innej przestrzeni nazw<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://zajecia.edu.pl/osoby" xmlns:inst="http://zajecia.edu.pl/instytucje" targetNamespace="http://zajecia.edu.pl/osoby"> <xsd:import schemaLocation="inst.xsd" namespace="http://zajecia.edu.pl/instytucje"/> ...</xsd:schema>

http://zajecia.edu.pl/osoby

osobaimięnazwiskoNIP

osoby.xsd

firmanazwaNIP

inst.xsd

http://zajecia.edu.pl/instytucje

Page 49: Wyklad2 - XSD

49

Wbudowane typy proste

Page 50: Wyklad2 - XSD

50

Podstawowe typy proste

Typ Poprawne wartościdecimal 12.3 +000012.300

float, double +24.3e-3 12

string osoba

Date 1968-04-02 1968-04-02-05:00

1968-04-02Z -0045-02-02

time 13:20:00.887 13:30:00-05:00

dateTime 1968-04-02T13:20:00.887

Page 51: Wyklad2 - XSD

51

Wyprowadzanie typów

Wyprowadzanie typów prostych:– ograniczanie– tworzenie list– tworzenie unii

Wyprowadzanie typów złożonych:– ograniczanie– rozszerzanie:

typów prostych typów złożonych

Page 52: Wyklad2 - XSD

52

Ograniczanie typów prostych

Aspekty– minExclusive, minInclusive– maxExclusive, maxInclusive– length, minLength, maxLength– totalDigits, fractionDigits– enumeration– pattern

Tylko pattern i enumeration można użyć wielokrotnie w jednej definicji typu

Page 53: Wyklad2 - XSD

53

Ograniczanie typów prostych – przykłady

<xsd:simpleType name="OcenaTyp"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="2"/> <xsd:maxInclusive value="5"/> </xsd:restriction></xsd:simpleType>

<xsd:simpleType name="OrganizacjaTyp"> <xsd:restriction base="xsd:token"> <xsd:enumeration value="Firma"/> <xsd:enumeration value="Instytucja publiczna"/> </xsd:restriction></xsd:simpleType>

<xsd:simpleType name="NIPTyp"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-\d{3}-\d{2}-\d{2}"/> <xsd:pattern value="\d{3}-\d{2}-\d{2}-\d{3}"/> </xsd:restriction></xsd:simpleType>

Page 54: Wyklad2 - XSD

54

Ograniczanie typów prostych

Przestrzeń wartości typu wyprowadzonego musi być podzbiorem przestrzeni wartości typu bazowego

Typy wbudowane mają określone niektóre aspekty, byte:– minInclusive: -128,– maxInclusive: 127.

Przykład – niepoprawne wyprowadzenie<xsd:simpleType name="ExtendedByte"> <xsd:restriction base="xsd:byte"> <xsd:minInclusive value="-256"/> <xsd:maxInclusive value="255"/> </xsd:restriction></xsd:simpleType>

Page 55: Wyklad2 - XSD

55

Listy

<xsd:simpleType name="OcenaTyp"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="2"/> <xsd:maxInclusive value="5"/> </xsd:restriction></xsd:simpleType>

<xsd:simpleType name="OcenySTDTyp"> <xsd:list itemType="OcenaTyp"/></xsd:simpleType>

<xsd:simpleType name="StudentSTDTyp"> <xsd:restriction base=„OcenySTDTyp"> <xsd:length value="2"/> </xsd:restriction></xsd:simpleType>

Page 56: Wyklad2 - XSD

56

Unie

<xsd:simpleType name="RozmiarLiczbowyTyp"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="2"/> <xsd:maxInclusive value="18"/> </xsd:restriction></xsd:simpleType>

<xsd:simpleType name="RozmiarSMLTyp"> <xsd:restriction base="xsd:token"> <xsd:enumeration value="S"/> <xsd:enumeration value="M"/> <xsd:enumeration value="L"/> </xsd:restriction></xsd:simpleType>

<xsd:simpleType name="RozmiarTyp"> <xsd:union memberTypes="RozmiarLiczbowyTyp RozmiarSMLTyp"/></xsd:simpleType>

Page 57: Wyklad2 - XSD

57

Rozszerzenia

Wartości typu bazowego nie muszą być poprawnymi wartościami typu wyprowadzonego

Rozszerzanie zawartości prostej – dodawanie atrybutów do:

– typu prostego– typu złożonego o zawartości prostej

Rozszerzanie zawartości złożonej– dodawanie do typu bazowego dodatkowych elementów i/lub

atrybutów– elementy dodawane w rozszerzeniu występują zawsze na końcu,

po elementach zadeklarowanych w typie bazowym

Page 58: Wyklad2 - XSD

58

Rozszerzanie zawartości prostej

<xsd:complexType name="CenaTyp"> <xsd:simpleContent> <xsd:extension base="xsd:decimal"> <xsd:attribute name="waluta" type="xsd:string"/> </xsd:extension> </xsd:simpleContent></xsd:complexType>

<xsd:complexType name="CenaKlientWaznyTyp"> <xsd:simpleContent> <xsd:extension base="CenaKlientTyp"> <xsd:attribute name="rabat" type="xsd:decimal"/> </xsd:extension> </xsd:simpleContent></xsd:complexType>

Page 59: Wyklad2 - XSD

59

Rozszerzanie zawartości złożonej

<xsd:complexType name="pracownikTyp"> <xsd:sequence> <xsd:element name="imieNazwisko" type="xsd:string"/> <xsd:element name="stanowisko" type="xsd:string"/> </xsd:sequence></xsd:complexType>

<xsd:complexType name="pracownikTymczasowyTyp"> <xsd:complexContent> <xsd:extension base="pracownikTyp"> <xsd:choice> <xsd:element name="kontrakt" type="KontraktTyp"/> <xsd:element name="zlecenie" type="ZlecenieTyp"/> </xsd:choice> </xsd:extension> </xsd:complexContent></xsd:complexType>

Page 60: Wyklad2 - XSD

60

Ograniczanie typów złożonych

Przestrzeń wartości typu wyprowadzonego musi być podzbiorem przestrzeni wartości typu bazowego

Dozwolone operacje:– ograniczenie zawartości prostej– ograniczenie atrybutu

ograniczenie typu atrybutu zmiana atrybutu opcjonalnego na wymagany (required) lub zabroniony

(prohibited) dodanie, zmiana lub usunięcie wartości domyślnej dodanie wartości ustalonej, jeśli jej nie było

– ograniczenie modelu zawartości ściślejsze ograniczenia liczebności (minOccurs, maxOccurs) usunięcie elementów opcjonalnych w grupach sequence i all wybranie podzbioru elementów w grupie choice ograniczenie typu poszczególnych podelementów

Page 61: Wyklad2 - XSD

61

Ograniczanie zawartości prostej i atrybutów<xsd:complexType name="MasaNiedokladnaTyp"> <xsd:simpleContent> <xsd:extension base="xsd:decimal"> <xsd:attribute name="jm" type="xsd:string"/> <xsd:attribute name="dokładność" type="xsd:decimal"/> </xsd:extension> </xsd:simpleContent></xsd:complexType>

<xsd:complexType name="MasaDoUniesieniaTyp"> <xsd:simpleContent> <xsd:restriction base="MasaNiedokladnaTyp"> <xsd:minInclusive value="0"/> <xsd:maxInclusive value="50"/> <xsd:attribute name="dokładność" use="prohibited"/> <xsd:attribute name="jm" fixed="kg"/> </xsd:restriction> </xsd:simpleContent></xsd:complexType>

Page 62: Wyklad2 - XSD

62

Ograniczanie zawartości złożonej

<xsd:complexType name="BazowyTyp"> <xsd:sequence> <xsd:element name="a" type="xsd:string" minOccurs="3" maxOccurs="7"/> <xsd:element name="b" type="xsd:string" minOccurs="0"/> <xsd:element name="c" type="xsd:string"/> </xsd:sequence></xsd:complexType>

<xsd:complexType name="OgraniczonyTyp"> <xsd:complexContent> <xsd:restriction base="BazowyTyp"> <xsd:sequence> <xsd:element name="a" type="xsd:string" minOccurs="4" maxOccurs="6"/> <xsd:element name="c" type="xsd:string"/> </xsd:sequence> </xsd:restriction> </xsd:complexContent></xsd:complexType>

Page 63: Wyklad2 - XSD

63

Metody modularyzacji schematów

Grupy do wielokrotnego wykorzystania– nazwane grupy modeli– grupy atrybutów

Grupy zamienne

Page 64: Wyklad2 - XSD

64

Grupy wielokrotnego wykorzystania

<xsd:group name="ImięNazwisko"> <xsd:sequence> <xsd:element name="imie" type="xsd:string"/> <xsd:element name="nazwisko" type="xsd:string"/> </xsd:sequence></xsd:group>

<xsd:attributeGroup name= "DaneUrzedowe"> <xsd:attribute name="NIP" type="NIPTyp"/> <xsd:attribute name="PESEL" type="PESELTyp"/> </xsd:attributeGroup>

<xsd:complexType name="OsobaTyp"> <xsd:sequence> <xsd:group ref="ImięNazwisko"/> <xsd:element name="obywatelstwo" type="xsd:token"/> </xsd:sequence> <xsd:attributeGroup ref= "DaneUrzedowe"/>

</xsd:complexType>

Page 65: Wyklad2 - XSD

65

Grupy zamienne

<xsd:element name="katalog"> <xsd:complexType> <xsd:sequence> <xsd:element ref="produkt" maxOccurs="unbounded"/> <xsd:sequence> <xsd:complexType> </xsd:element> <xsd:element name="produkt" type="ProduktTyp"/><xsd:element name="komputer" type="KomputerTyp" substitutionGroup="produkt"/> <xsd:element name="ubranie" type="UbranieTyp" substitutionGroup="produkt"/>

Page 66: Wyklad2 - XSD

66

Grupy zamienne – wykorzystanie

<katalog> <produkt>...</produkt> <komputer>...</komputer> <ubranie>...</ubranie> <produkt>...</produkt></katalog>

Page 67: Wyklad2 - XSD

67

Więzy integralności

Elementy więzów integralności– unique – wartości w ramach określonego zakresu muszą być

unikatowe– key - wartości w ramach określonego zakresu muszą być

unikatowe i nie mogą być puste– keyref – odwołanie do wartości wskazanego klucza

Zalety– można tworzyć wiele niezależnych od siebie ograniczeń– odwołanie wskazuje konkretny klucz– więzy integralności mogą być nałożone na kombinację wartości– więzy integralności mogą być nałożone na zawartość elementów

Page 68: Wyklad2 - XSD

68

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>

Page 69: Wyklad2 - XSD

69

Tworzenie schematu XSD za pomocą .NET