Upload
michal-kuciapski
View
354
Download
2
Embed Size (px)
Citation preview
Definiowanie typów dokumentów
DTD, XML Schema
2
Tematyka
Struktura XML DTD XML Schema
3
Struktura XML
Deklaracja XMLAtrybut
Zawartość tekstowa
Element głównyElement
Znacznik początkowy
Znacznik końcowy
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"
…
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]]>
6
Encje predefiniowane
& &
< <
> >
' '
" "
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
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)
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
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.
11
Projektowanie struktury dokumentów
wiersz
autor
tytuł
zwrotka*
?
wers*
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
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
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
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
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>
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>
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
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>
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
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>
22
Typy złożone – typy zawartości
Zawartość mieszana:
Zawartość pusta: <osoba PESEL="12345678901"/>
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>
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>
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>
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>
27
Definiowanie zawartości pustej
<xsd:complexType name="OsobaTyp"> <xsd:attribute name="PESEL" type="PESELTyp"/></xsd:complexType>
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>
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>
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
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
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
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
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
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>
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>
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>
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
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>
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>
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>
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
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
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>
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ń
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
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
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
49
Wbudowane typy proste
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
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
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
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>
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>
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>
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>
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
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>
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>
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
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>
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>
63
Metody modularyzacji schematów
Grupy do wielokrotnego wykorzystania– nazwane grupy modeli– grupy atrybutów
Grupy zamienne
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>
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"/>
66
Grupy zamienne – wykorzystanie
<katalog> <produkt>...</produkt> <komputer>...</komputer> <ubranie>...</ubranie> <produkt>...</produkt></katalog>
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
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>
69
Tworzenie schematu XSD za pomocą .NET