Your SlideShare is downloading. ×
  • Like
Wyklad2 - XSD
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Wyklad2 - XSD

  • 313 views
Published

 

Published in Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
313
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • 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.

Transcript

  • 1. Definiowanie typów dokumentów DTD, XML Schema
  • 2. Tematyka
    • Struktura XML
    • DTD
    • XML Schema
  • 3. Struktura XML Deklaracja XML Atrybut Zawartość tekstowa Element główny Element Znacznik początkowy Znacznik końcowy
  • 4. 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" …
  • 5. 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]]>
  • 6. Encje predefiniowane
    • &amp; &
    • &lt; <
    • &gt; >
    • &apos; '
    • &quot; &quot;
  • 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
      • &# x kod ; - 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) &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
  • 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=&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>
  • 17. 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>
  • 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 =&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>
  • 20. 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
  • 21. 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>
  • 22. Typy złożone – typy zawartości
    • Zawartość mieszana:
    • Zawartość pusta: <osoba PESEL=&quot;12345678901&quot;/>
  • 23. 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>
  • 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=&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>
  • 25. 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>
  • 26. 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>
  • 27. Definiowanie zawartości pustej
    • <xsd:complexType name=&quot;OsobaTyp&quot;> <xsd:attribute name=&quot;PESEL&quot; type=&quot;PESELTyp&quot;/> </xsd:complexType>
  • 28. 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>
  • 29. 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>
  • 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=&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
  • 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=&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 >
  • 36. 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 >
  • 37. 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 >
  • 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=&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 >
  • 40. 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 >
  • 41. 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 >
  • 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/osoby firma nazwa NIP http://zajecia.edu.pl/instytucje osoby.xsd inst.xsd import
  • 44. 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 >
  • 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=&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
  • 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=&quot;inst.xsd&quot;/>
    http://zajecia.edu.pl/osoby osoba imię nazwisko NIP NIPTyp osoby.xsd firma nazwa REGON NIPTyp inst.xsd
  • 48. 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
  • 49. Wbudowane typy proste
  • 50. 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
  • 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=&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>
  • 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=&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>
  • 55. 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>
  • 56. 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>
  • 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=&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>
  • 59. 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>
  • 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=&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>
  • 62. 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>
  • 63. Metody modularyzacji schematów
    • Grupy do wielokrotnego wykorzystania
      • nazwane grupy modeli
      • grupy atrybutów
    • Grupy zamienne
  • 64. 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>
  • 65. 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;/>
  • 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=&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>
  • 69. Tworzenie schematu XSD za pomocą .NET