• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Wyklad2 - XSD
 

Wyklad2 - XSD

on

  • 459 views

 

Statistics

Views

Total Views
459
Views on SlideShare
459
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Slajd przedstawia jedynie podstawowe elementy składni dokumentu XML. Każdy dokument XML zaczyna się od deklaracji XML, określającej wersję składni XML-a, kodowanie znaków, itp. Cała zawartość dokumentu zawarta jest w jednym elemencie – elemencie głównym. On dopiero zawiera inne elementy oraz tekst. Elementy mogą posiadać atrybuty, opisujące pewne właściwości elementów. Element jest kodowany przy pomocy znacznika początkowego oraz znacznika końcowego.
  • Drugi stopień poprawności (poprawność strukturalna) wymaga, aby spełniony był także pierwszy. Ma on sens jedynie dla dokumentów z określoną strukturą. Dokument, który nie jest poprawny składniowo, nie jest dokumentem XML.
  • Podobnie jak implementacja (kodowanie) jest tylko jedną z wielu faz budowy systemu informatycznego, tak zapisywanie definicji języka przy pomocy DTD lub XML Schema jest jedynie jednym z etapów modelowania języka. Etap ten powinien być poprzedzony przez analizę oraz projektowanie struktury języka w sposób abstrakcyjny. Stosowanie pełnego cyklu modelowania ma sens w przypadku skomplikowanych języków, wykorzystywanych np. w systemach zarządzania aktami prawnymi czy zasobami encyklopedycznymi. Proces modelowania takich języków właściwie się nie kończy, ponieważ żyją i zmieniają się same reguły biznesowe będące podstawą modelu języka, lub pojawiają się nowe zależności, które trzeba zamodelować. Dlatego w profesjonalnych zastosowaniach, typy dokumentów muszą podlegać pielęgnacji. Oczywiście w prostych przypadkach (np. modelowanie komunikatu z klienta do serwera aplikacji), "rozgarnięty" projektant poradzi sobie od razu kodując definicję przy pomocy DTD lub XML Schema.
  • Podczas abstrakcyjnego, niezależnego od notacji zapisu (DTD lub XML Schema), projektowania struktury dokumentów, używa się z reguły notacji graficznych. Istnieją specjalne programy, które pozwalają na takie graficzne projektowanie, np. XML Authority.
  • Definicja typu dokumentu jest zawarta w deklaracji DOCTYPE , po której następuje nazwa elementu głównego. Pozycje ELEMENT określają dopuszczalną zawartość poszczególnych elementów przy pomocy wyrażeń regularnych. #PCDATA ( Parsed Characters Data ) oznacza "czysty" tekst, bez podelementów. DTD określa także atrybuty elementów.
  • Taką kontrolę poprawności możemy oczywiście zaimplementować sami w kodzie naszej aplikacji (ewentualnie parametryzując aplikację przy pomocy atrybutów #FIXED ), jest to jednak dość pracochłonne. Dobrze byłoby zrzucić walidację na parser XML. Standard XML Schema pozwala na definiowanie struktur dokumentów z dużo bardziej niż w DTD zaawansowaną kontrolą zawartości.

Wyklad2 - XSD Wyklad2 - XSD Presentation Transcript

  • Definiowanie typów dokumentów DTD, XML Schema
  • Tematyka
    • Struktura XML
    • DTD
    • XML Schema
  • Struktura XML Deklaracja XML Atrybut Zawartość tekstowa Element główny Element Znacznik początkowy Znacznik końcowy
  • Struktura logiczna dokumentu XML zeznanie-sprawcy miejsce autor tresc Jan Leski Sopot Wypadek dnia data 22.10.2007 o godzinie godzina 13:13 ( dzienTygodnia środa ... nr="1313/2001" …
  • Składnia XML
    • Deklaracja XML:
      • <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?>
    • Znaczniki:
      • <tag attributename=&quot;attribute value&quot;> </tag>
    • Znaczniki elementu pustego:
      • <br></br> <br/>
    • Komentarz:
      • <!-- komentarz -->
    • Instrukcja przetwarzania:
      • <?target processing-instruction-body?>
    • Sekcja CDATA:
      • <![CDATA[dowolny <tekst &quot; nieprzetwarzany & przez [ parser]]>
  • Encje predefiniowane
    • &amp; &
    • &lt; <
    • &gt; >
    • &apos; '
    • &quot; &quot;
  • 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
      • &# x kod ; - kod szesnastkowy znaku
  • 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)
  • 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
  • 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.
  • Projektowanie struktury dokumentów wiersz autor tytuł zwrotka * ? wers *
  • DTD – prosty przykład <!DOCTYPE wiersz [ <!ELEMENT wiersz (autor, tytul?, zwrotka*)> <!ATTLIST wiersz bialy (tak|nie) &quot;nie&quot;> <!ELEMENT autor (#PCDATA)> <!ELEMENT tytul (#PCDATA)> <!ELEMENT zwrotka (wers)*> <!ELEMENT wers (#PCDATA)> ]> element główny zawartość elementów atrybuty wyrażenia regularne
  • 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
  • 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
  • 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
  • Elementy i atrybuty
    • < xsd:element name=&quot;osoba&quot;> <xsd:complexType> <xsd:sequence> <xsd:element name=&quot;imie&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;nazwisko&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;plec&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;wiek&quot; type=&quot;xsd:string&quot;/> </xsd:sequence> < xsd:attribute name=&quot;id&quot; type=&quot;xsd:ID&quot;/> <xsd:attribute name=&quot;NIP&quot; type=&quot;NIPTyp&quot;/> </xsd:complexType> </xsd:element>
  • Kontrola użycia elementów i atrybutów
    • <xsd:element name=&quot;osoba&quot;> <xsd:complexType> <xsd:sequence> <xsd:element name=&quot;imie&quot; type=&quot;xsd:string&quot; minOccurs=&quot;1&quot; maxOccurs=&quot;2&quot; /> <xsd:element name=&quot;nazwisko&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;plec&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;wiek&quot; type=&quot;xsd:string&quot;/> </xsd:sequence> <xsd:attribute name=&quot;id&quot; type=&quot;xsd:ID&quot; use=&quot;required&quot; /> <xsd:attribute name=&quot;NIP&quot; type=&quot;NIPTyp&quot;/> </xsd:complexType> </xsd:element>
  • 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
  • Typy nazwane i anonimowe
    • Typy nazwane : <xsd: complexType name =&quot;OsobaTyp&quot;> <xsd:sequence> <xsd:element name=&quot;imie&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;nazwisko&quot; type=&quot;xsd:string&quot;/> </xsd:sequence> </xsd: complexType > <xsd:element name=&quot;osoba&quot; type =&quot;OsobaTyp&quot;/>
    • Typy anonimowe: < xsd:element name=&quot;osoba&quot;> <xsd: complexType > <xsd:sequence> <xsd:element name=&quot;imie&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;nazwisko&quot; type=&quot;xsd:string&quot;/> </xsd:sequence> </xsd: complexType > </xsd:element>
  • Typy proste i złożone
    • Typy proste: <xsd: simpleType name=&quot;NIPTyp&quot;> <xsd:restriction base=&quot;xsd:string&quot;> <xsd:pattern value=&quot;d{3}-d{3}-d{2}-d{2}&quot;/> </xsd:restriction> </xsd: simpleType >
    • Typy złożone: <xsd: complexType name=&quot;OsobaTyp&quot;> <xsd:sequence> <xsd:element name=&quot;imie&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;nazwisko&quot; type=&quot;xsd:string&quot;/> </xsd:sequence> </ xsd:complexType>
    • Element może mieć typ prosty lub złożony
    • Atrybut może mieć wyłącznie typ prosty
  • Typy złożone – typy zawartości
    • Zawartość elementowa: <osoba PESEL=&quot;12345678901&quot;> <imie>Jan</imie> <nazwisko>Kowalski</nazwisko> </osoba>
    • Zawartość prosta: <masa jm=&quot;kg&quot;>10.55</masa>
  • Typy złożone – typy zawartości
    • Zawartość mieszana:
    • Zawartość pusta: <osoba PESEL=&quot;12345678901&quot;/>
  • Definiowanie zawartości elementowej
    • Grupy deklaracji elementów:
      • sequence , choice , all
    • Zagnieżdżanie grup: <xsd:complexType name=&quot;OsobaTyp&quot;> <xsd: sequence > <xsd:element name=&quot;imie&quot; type=&quot;xsd:string&quot;/> <xsd:element ref=&quot;nazwisko&quot;/> <xsd: choice > <xsd:element name=&quot;nr-dowodu&quot; type=&quot;DowódTyp&quot;/> <xsd:element name=&quot;nr-paszportu&quot; type=&quot;PaszportTyp&quot;/> </xsd: choice > </xsd: sequence > </xsd:complexType>
  • 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=&quot;OsobaTyp&quot;> <xsd: all > <xsd:element name=&quot;imie&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;drugie-imie&quot; type=&quot;xsd:string&quot; minOccurs=&quot;0&quot;/> <xsd:element ref=&quot;nazwisko&quot;/> </xsd: all > </xsd:complexType>
  • Definiowanie zawartości prostej
    • <xsd:complexType name=&quot;MasaTyp&quot;> <xsd: simpleContent > <xsd:extension base=&quot;xsd:decimal&quot;> <xsd:attribute name=&quot;jm&quot; type=&quot;xsd:string&quot;/> </xsd:extension> </xsd: simpleContent > </xsd:complexType>
  • Definiowanie zawartości mieszanej
    • <xsd:complexType name=&quot;ZeznanieTyp&quot; mixed=&quot;true&quot; > <xsd:sequence> <xsd:element name=&quot;data&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;godzina&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;dzien-tygodnia&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;poszkodowany&quot; type=&quot;xsd:string&quot;/> </xsd:sequence> </xsd:complexType>
  • Definiowanie zawartości pustej
    • <xsd:complexType name=&quot;OsobaTyp&quot;> <xsd:attribute name=&quot;PESEL&quot; type=&quot;PESELTyp&quot;/> </xsd:complexType>
  • Globalne i lokalne deklaracje elementów i atrybutów - lokalne
    • Deklaracje lokalne <xsd:complexType name=&quot;OsobaTyp&quot;> <xsd:sequence> <xsd: element name =&quot;imie&quot; type=&quot;xsd:string&quot; minOccurs=&quot;1&quot; maxOccurs=&quot;2&quot;/> <xsd:element name=&quot;nazwisko&quot; type=&quot;xsd:string&quot;/> </xsd:sequence> <xsd: attribute name =&quot;NIP&quot; type=&quot;NIPTyp&quot; use=&quot;required&quot;/> </xsd:complexType>
  • Globalne i lokalne deklaracje elementów i atrybutów - globalne
    • Deklaracje globalne i odwołania <xsd: element name =&quot;imie&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;nazwisko&quot; type=&quot;xsd:string&quot;/> <xsd: attribute name =&quot;NIP&quot; type=&quot;NIPTyp&quot;/> <xsd:complexType name=&quot;OsobaTyp&quot;> <xsd:sequence> <xsd: element ref =&quot;imie&quot; minOccurs=&quot;1&quot; maxOccurs=&quot;2&quot;/> <xsd:element ref=&quot;nazwisko&quot;/> </xsd:sequence> <xsd: attribute ref =&quot;NIP&quot; use=&quot;required&quot;/> </xsd:complexType>
  • 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
  • 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
  • Wartości domyślne i ustalone
    • <xsd:element name=&quot;ilość&quot; type=&quot;xsd:positiveInteger&quot; default =&quot;1&quot;/> <xsd:element name=&quot;cena&quot; type=&quot;xsd:positiveInteger&quot; fixed =&quot;5&quot;/> <xsd:attribute name=&quot;waluta&quot; type=&quot;xsd:string&quot; default =&quot;PLN&quot;/> <xsd:attribute name=&quot;VAT&quot; type=&quot;xsd:string&quot; fixed =&quot;22%&quot;/>
    • Przykład
    • <kwota waluta= &quot; EUR &quot; VAT= &quot; 16% &quot; >20</kwota>
    • powinno być bez VAT
  • 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
  • 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
  • Użycie przestrzeni nazw XML
    • < os:osoba xmlns:os=&quot;http://zajecia.edu.pl/osoby&quot; xmlns:inst=&quot;http://zajecia.edu.pl/instytucje&quot; xmlns:xhtml=&quot;http://www.w3.org/1999/xhtml&quot; > < 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 >
  • Domyślna przestrzeń nazw
    • < osoba xmlns=&quot;http://zajecia.edu.pl/osoby&quot; xmlns:inst=&quot;http://zajecia.edu.pl/instytucje&quot; xmlns:xhtml=&quot;http://www.w3.org/1999/xhtml&quot; > < 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 >
  • Widoczność przestrzeni nazw
    • < os:osoba xmlns:os=&quot;http://zajecia.edu.pl/osoby&quot; > < 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=&quot;http://zajecia.edu.pl/instytucje&quot; > < os:nazwa >WinPol</ os:nazwa > < os:NIP >987-654-32-10</ os:NIP > </ os:firma > </ os:pracuje-w > </ os:osoba >
  • 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
  • Nazwy elementów bez prefiksów
    • < osoba xmlns=&quot;http://zajecia.edu.pl/osoby&quot; > < imie >Adam</ imie > < nazwisko >Leski</ nazwisko > < NIP >123-456-78-90</ NIP > < pracuje-w > <firma xmlns=&quot;&quot; > <nazwa>WinPol</nazwa> <NIP>987-654-32-10</NIP> </firma> </ pracuje-w > </ osoba >
  • Nazwy atrybutów
    • < osoba xmlns=&quot;http://zajecia.edu.pl/osoby&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; > < imie >Jan</ imie > < nazwisko >Kowalski</ nazwisko > < NIP >123-456-78-90</ NIP > < pracuje-w xlink:type =&quot;simple&quot; xlink:href =&quot;...&quot; rodzaj=&quot;etat&quot;>Business Consulting</ pracuje-w > </ osoba >
  • Atrybuty - analiza
    • Poprawne <x  xmlns:n1=&quot;http://zajecia.edu.pl/n1 &quot;      xmlns:n2=&quot;http://zajecia.edu.pl/n2&quot; >    <good  n1:a =&quot;1&quot;  n2:a =&quot;2&quot;/> </x>
    • Niepoprawne <x  xmlns:n1=&quot;http://zajecia.edu.pl/n1 &quot;      xmlns:n2=&quot;http://zajecia.edu.pl/n1 &quot;>   <bad  n1:a =&quot;1&quot;  n2:a =&quot;2&quot;/> </x>
    • Poprawne < x   xmlns:n1=&quot;http://zajecia.edu.pl/n1 &quot;      xmlns=&quot;http://zajecia.edu.pl/n1&quot; >   < good   n1:a =&quot;1&quot; a=&quot;2&quot;/> </ x >
  • 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
  • Przestrzenie nazw a schematy osoba imię nazwisko NIP http://zajecia.edu.pl/osoby firma nazwa NIP http://zajecia.edu.pl/instytucje osoby.xsd inst.xsd import
  • Dokument schematu
    • < xsd:schema xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns=&quot;http://zajecia.edu.pl/osoby&quot; targetNamespace=&quot;http://zajecia.edu.pl/osoby&quot;> < xsd:complexType name=&quot; OsobaTyp &quot;> ... </ xsd:complexType > < xsd:element name=&quot; osoba &quot; type=&quot; OsobaTyp &quot;/> < xsd:element name=&quot; numer &quot; type=&quot; xsd:integer &quot;/> ... </ xsd:schema >
  • Łą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ń
  • include
    • Dołączanie dokumentu schematu do docelowej przestrzeni nazw głównego dokumentu schematu <xsd:schema xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns=&quot;http://zajecia.edu.pl/osoby&quot; targetNamespace=&quot;http://zajecia.edu.pl/osoby&quot;> <xsd: include schemaLocation=&quot;inst.xsd&quot;/> ... </xsd:schema>
    • Dołączany dokument musi:
      • mieć taką samą docelową przestrzeń nazw jak dokument główny, lub
      • nie mieć docelowej przestrzeni nazw
    http://zajecia.edu.pl/osoby osoba imię nazwisko NIP osoby.xsd firma nazwa REGON inst.xsd
  • 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=&quot;inst.xsd&quot;/>
    http://zajecia.edu.pl/osoby osoba imię nazwisko NIP NIPTyp osoby.xsd firma nazwa REGON NIPTyp inst.xsd
  • import
    • Odwołanie do komponentów w innej przestrzeni nazw <xsd:schema xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns=&quot;http://zajecia.edu.pl/osoby&quot; xmlns:inst=&quot;http://zajecia.edu.pl/instytucje&quot; targetNamespace=&quot;http://zajecia.edu.pl/osoby&quot;> <xsd: import schemaLocation=&quot;inst.xsd&quot; namespace=&quot;http://zajecia.edu.pl/instytucje&quot;/> ... </xsd:schema>
    http://zajecia.edu.pl/osoby osoba imię nazwisko NIP osoby.xsd firma nazwa NIP inst.xsd http://zajecia.edu.pl/instytucje
  • Wbudowane typy proste
  • Podstawowe typy proste 12.3 +000012.300 decimal 1968-04-02T13:20:00.887 dateTime 13:20:00.887 13:30:00-05:00 time 1968-04-02 1968-04-02-05:00 1968-04-02Z -0045-02-02 Date osoba string +24.3e-3 12 float , double Poprawne wartości Typ
  • 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
  • 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
  • Ograniczanie typów prostych – przykłady
    • <xsd:simpleType name=&quot;OcenaTyp&quot;> <xsd:restriction base=&quot;xsd:integer&quot;> <xsd: minInclusive value=&quot;2&quot;/> <xsd: maxInclusive value=&quot;5&quot;/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name=&quot;OrganizacjaTyp&quot;> <xsd:restriction base=&quot;xsd:token&quot;> <xsd: enumeration value=&quot;Firma&quot;/> <xsd: enumeration value=&quot;Instytucja publiczna&quot;/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name=&quot;NIPTyp&quot;> <xsd:restriction base=&quot;xsd:string&quot;> <xsd: pattern value=&quot;d{3}-d{3}-d{2}-d{2}&quot;/> <xsd: pattern value=&quot;d{3}-d{2}-d{2}-d{3}&quot;/> </xsd:restriction> </xsd:simpleType>
  • 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=&quot;ExtendedByte&quot;> <xsd:restriction base=&quot;xsd:byte&quot;> <xsd:minInclusive value=&quot; -256 &quot;/> <xsd:maxInclusive value=&quot; 255 &quot;/> </xsd:restriction> </xsd:simpleType>
  • Listy
    • <xsd:simpleType name=&quot;OcenaTyp&quot;> <xsd:restriction base=&quot;xsd:integer&quot;> <xsd:minInclusive value=&quot;2&quot;/> <xsd:maxInclusive value=&quot;5&quot;/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name=&quot;OcenySTDTyp&quot;> <xsd: list itemType=&quot;OcenaTyp&quot;/> </xsd:simpleType> <xsd:simpleType name=&quot;StudentSTDTyp&quot;> <xsd:restriction base=„OcenySTDTyp&quot;> <xsd: length value=&quot;2&quot;/> </xsd:restriction> </xsd:simpleType>
  • Unie
    • <xsd:simpleType name=&quot;RozmiarLiczbowyTyp&quot;> <xsd:restriction base=&quot;xsd:integer&quot;> <xsd:minInclusive value=&quot;2&quot;/> <xsd:maxInclusive value=&quot;18&quot;/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name=&quot;RozmiarSMLTyp&quot;> <xsd:restriction base=&quot;xsd:token&quot;> <xsd:enumeration value=&quot;S&quot;/> <xsd:enumeration value=&quot;M&quot;/> <xsd:enumeration value=&quot;L&quot;/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name=&quot;RozmiarTyp&quot;> <xsd: union memberTypes =&quot;RozmiarLiczbowyTyp RozmiarSMLTyp&quot;/> </xsd:simpleType>
  • 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
  • Rozszerzanie zawartości prostej
    • <xsd:complexType name=&quot;CenaTyp&quot;> <xsd: simpleContent > <xsd: extension base=&quot;xsd:decimal&quot;> <xsd:attribute name=&quot;waluta&quot; type=&quot;xsd:string&quot;/> </xsd: extension > </xsd: simpleContent > </xsd:complexType> <xsd:complexType name=&quot;CenaKlientWaznyTyp&quot;> <xsd: simpleContent > <xsd: extension base=&quot;CenaKlientTyp&quot;> <xsd:attribute name=&quot;rabat&quot; type=&quot;xsd:decimal&quot;/> </xsd: extension > </xsd: simpleContent > </xsd:complexType>
  • Rozszerzanie zawartości złożonej
    • <xsd:complexType name=&quot;pracownikTyp&quot;> <xsd:sequence> <xsd:element name=&quot;imieNazwisko&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;stanowisko&quot; type=&quot;xsd:string&quot;/> </xsd:sequence> </xsd:complexType> <xsd:complexType name=&quot;pracownikTymczasowyTyp&quot;> <xsd: complexContent > <xsd: extension base=&quot;pracownikTyp&quot;> <xsd:choice> <xsd:element name=&quot;kontrakt&quot; type=&quot;KontraktTyp&quot;/> <xsd:element name=&quot;zlecenie&quot; type=&quot;ZlecenieTyp&quot;/> </xsd:choice> </xsd: extension > </xsd: complexContent > </xsd:complexType>
  • 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
  • Ograniczanie zawartości prostej i atrybutów
    • <xsd:complexType name=&quot;MasaNiedokladnaTyp&quot;> <xsd:simpleContent> <xsd:extension base=&quot;xsd:decimal&quot;> <xsd:attribute name=&quot;jm&quot; type=&quot;xsd:string&quot;/> <xsd:attribute name=&quot;dokładność&quot; type=&quot;xsd:decimal&quot;/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> <xsd:complexType name=&quot;MasaDoUniesieniaTyp&quot;> <xsd: simpleContent > <xsd: restriction base=&quot;MasaNiedokladnaTyp&quot;> <xsd:minInclusive value=&quot;0&quot;/> <xsd:maxInclusive value=&quot;50&quot;/> <xsd:attribute name=&quot;dokładność&quot; use=&quot;prohibited&quot;/> <xsd:attribute name=&quot;jm&quot; fixed=&quot;kg&quot;/> </xsd: restriction > </xsd: simpleContent > </xsd:complexType>
  • Ograniczanie zawartości złożonej
    • <xsd:complexType name=&quot;BazowyTyp&quot;> <xsd:sequence> <xsd:element name=&quot;a&quot; type=&quot;xsd:string&quot; minOccurs=&quot;3&quot; maxOccurs=&quot;7&quot;/> <xsd:element name=&quot;b&quot; type=&quot;xsd:string&quot; minOccurs=&quot;0&quot;/> <xsd:element name=&quot;c&quot; type=&quot;xsd:string&quot;/> </xsd:sequence> </xsd:complexType> <xsd:complexType name=&quot;OgraniczonyTyp&quot;> <xsd: complexContent > <xsd: restriction base=&quot;BazowyTyp&quot;> <xsd:sequence> <xsd:element name=&quot;a&quot; type=&quot;xsd:string&quot; minOccurs=&quot;4&quot; maxOccurs=&quot;6&quot;/> <xsd:element name=&quot;c&quot; type=&quot;xsd:string&quot;/> </xsd:sequence> </xsd: restriction > </xsd: complexContent > </xsd:complexType>
  • Metody modularyzacji schematów
    • Grupy do wielokrotnego wykorzystania
      • nazwane grupy modeli
      • grupy atrybutów
    • Grupy zamienne
  • Grupy wielokrotnego wykorzystania
    • <xsd: group name=&quot;ImięNazwisko&quot;> <xsd:sequence> <xsd:element name=&quot;imie&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;nazwisko&quot; type=&quot;xsd:string&quot;/> </xsd:sequence> </xsd: group > <xsd: attributeGroup name= &quot;DaneUrzedowe&quot;> <xsd:attribute name=&quot;NIP&quot; type=&quot;NIPTyp&quot;/> <xsd:attribute name=&quot;PESEL&quot; type=&quot;PESELTyp&quot;/> </xsd: attributeGroup > <xsd:complexType name=&quot;OsobaTyp&quot;> <xsd:sequence> <xsd: group ref=&quot;ImięNazwisko&quot;/> <xsd:element name=&quot;obywatelstwo&quot; type=&quot;xsd:token&quot;/> </xsd:sequence> <xsd: attributeGroup ref= &quot;DaneUrzedowe&quot;/>
    • </xsd:complexType>
  • Grupy zamienne
    • <xsd:element name=&quot;katalog&quot;> <xsd:complexType> <xsd:sequence> <xsd:element ref=&quot;produkt&quot; maxOccurs=&quot;unbounded&quot;/> <xsd:sequence> <xsd:complexType> </xsd:element> <xsd:element name=&quot;produkt&quot; type=&quot;ProduktTyp&quot;/> <xsd:element name=&quot;komputer&quot; type=&quot;KomputerTyp&quot; substitutionGroup =&quot;produkt&quot;/> <xsd:element name=&quot;ubranie&quot; type=&quot;UbranieTyp&quot; substitutionGroup =&quot;produkt&quot;/>
  • Grupy zamienne – wykorzystanie
    • <katalog> <produkt>...</produkt> <komputer>...</komputer> <ubranie>...</ubranie> <produkt>...</produkt> </katalog>
  • 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
  • Więzy integralności
    • <xsd:element name=&quot;zamówienia-i-faktury&quot; type=&quot;ZamówieniaFakturyTyp&quot;> <xsd: unique name=&quot;fakturaId&quot;> <xsd: selector xpath=&quot;faktury/faktura&quot;/> <xsd: field xpath=&quot;@nr&quot;/> <xsd: field xpath=&quot;rok&quot;/> </xsd: unique > <xsd: keyref name=&quot;zamówienieRef&quot; refer =&quot;zamówienieId&quot;> <xsd: selector xpath=&quot;faktury/faktura/do-zamówienia&quot;/> <xsd: field xpath=&quot;@nr&quot;/> </xsd: keyref > <xsd: key name=&quot;zamówienieId&quot;> <xsd: selector xpath=&quot;zamówienia/zamówienie&quot;/> <xsd: field xpath=&quot;numer&quot;/> </xsd: key > </xsd:element>
  • Tworzenie schematu XSD za pomocą .NET