Definiowanie typów dokumentów DTD, XML Schema
Tematyka <ul><li>Struktura XML </li></ul><ul><li>DTD </li></ul><ul><li>XML Schema </li></ul>
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 godzi...
Składnia XML <ul><li>Deklaracja XML: </li></ul><ul><ul><li><?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standa...
Encje predefiniowane <ul><li>&amp; & </li></ul><ul><li>&lt; < </li></ul><ul><li>&gt; > </li></ul><ul><li>&apos; ' </li></u...
Unicode <ul><li>Światowy standard kodowania znaków. </li></ul><ul><li>Odmiany: </li></ul><ul><ul><li>UTF-7 (korzysta tylko...
Definiowanie języków <ul><li>XML, SGML </li></ul><ul><li>Definiowanie języków (zastosowań, struktury dokumentów, typów dok...
Poprawność struktury dokumentu <ul><li>Dokument XML poprawny składniowo każdy element musi być zamknięty: </li></ul><ul><u...
Modelowanie typów dokumentów <ul><li>Wieloetapowy proces: </li></ul><ul><ul><li>analiza struktury modelowanych bytów, </li...
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) &qu...
Braki DTD <ul><li>Zastosowania XML w integracji aplikacji – struktury danych: </li></ul><ul><ul><li>Przeniesienie zadania ...
DTD vs XML Schema <ul><li>Wywodzi się z SGML-a </li></ul><ul><li>Specyficzna składnia </li></ul><ul><li>10 typów danych </...
XML Schema <ul><li>15 lutego 1999: Dokument W3C opisujący wymagania stawiane przed nowym formatem: </li></ul><ul><ul><li>m...
Elementy i atrybuty <ul><li>< xsd:element  name=&quot;osoba&quot;>   <xsd:complexType>   <xsd:sequence>   <xsd:element nam...
Kontrola użycia elementów i atrybutów <ul><li><xsd:element name=&quot;osoba&quot;>   <xsd:complexType>   <xsd:sequence>   ...
Typy <ul><li>Typy wg zasięgu definicji: </li></ul><ul><ul><li>typy nazwane </li></ul></ul><ul><ul><li>typy anonimowe </li>...
Typy nazwane i anonimowe <ul><li>Typy nazwane : <xsd: complexType   name =&quot;OsobaTyp&quot;>   <xsd:sequence>   <xsd:el...
Typy proste i złożone <ul><li>Typy proste: <xsd: simpleType  name=&quot;NIPTyp&quot;>   <xsd:restriction base=&quot;xsd:st...
Typy złożone – typy zawartości <ul><li>Zawartość elementowa: <osoba PESEL=&quot;12345678901&quot;>   <imie>Jan</imie>   <n...
Typy złożone – typy zawartości <ul><li>Zawartość mieszana: </li></ul><ul><li>Zawartość pusta:   <osoba PESEL=&quot;1234567...
Definiowanie zawartości elementowej <ul><li>Grupy deklaracji elementów: </li></ul><ul><ul><li>sequence ,  choice ,  all </...
Grupa  all  – ograniczenia <ul><li>Nie może zawierać innych grup (tylko deklaracje elementów i odwołania do elementów) </l...
Definiowanie zawartości prostej <ul><li><xsd:complexType name=&quot;MasaTyp&quot;>   <xsd: simpleContent >   <xsd:extensio...
Definiowanie zawartości mieszanej <ul><li><xsd:complexType name=&quot;ZeznanieTyp&quot;  mixed=&quot;true&quot; >   <xsd:s...
Definiowanie zawartości pustej <ul><li><xsd:complexType name=&quot;OsobaTyp&quot;>   <xsd:attribute name=&quot;PESEL&quot;...
Globalne i lokalne deklaracje elementów i atrybutów - lokalne <ul><li>Deklaracje lokalne <xsd:complexType name=&quot;Osoba...
Globalne i lokalne deklaracje elementów i atrybutów - globalne <ul><li>Deklaracje globalne i odwołania <xsd: element   nam...
Elementy a atrybuty <ul><li>Informacje modelowane zwykle w elementach: </li></ul><ul><ul><li>zawartość - np. nazwisko, wie...
Elementy vs atrybuty <ul><li>Zalety elementów: </li></ul><ul><ul><li>mogą zawierać inne elementy i atrybuty </li></ul></ul...
Wartości domyślne i ustalone <ul><li><xsd:element name=&quot;ilość&quot; type=&quot;xsd:positiveInteger&quot;   default =&...
Przestrzenie nazw <ul><li>Wykorzystanie </li></ul><ul><ul><li>Analogiczna nazwa określająca te same elementy w różnych pow...
Nazwy przestrzeni nazw <ul><li>Identyfikatory URI, np: </li></ul><ul><ul><li>http://www.w3.org/XSLT/Transform/1.0 </li></u...
Użycie przestrzeni nazw XML <ul><li>< os:osoba   xmlns:os=&quot;http://zajecia.edu.pl/osoby&quot;   xmlns:inst=&quot;http:...
Domyślna przestrzeń nazw <ul><li>< osoba   xmlns=&quot;http://zajecia.edu.pl/osoby&quot;   xmlns:inst=&quot;http://zajecia...
Widoczność przestrzeni nazw <ul><li>< os:osoba   xmlns:os=&quot;http://zajecia.edu.pl/osoby&quot; >   < os:imie >Adam</ os...
Nazwy z prefiksem i bez <ul><li>Nazwy elementów: </li></ul><ul><ul><li>kwalifikowane – należą do pewnej przestrzeni nazw <...
Nazwy elementów bez prefiksów <ul><li>< osoba   xmlns=&quot;http://zajecia.edu.pl/osoby&quot; >   < imie >Adam</ imie >   ...
Nazwy atrybutów <ul><li>< osoba   xmlns=&quot;http://zajecia.edu.pl/osoby&quot;   xmlns:xlink=&quot;http://www.w3.org/1999...
Atrybuty - analiza <ul><li>Poprawne <x  xmlns:n1=&quot;http://zajecia.edu.pl/n1 &quot;      xmlns:n2=&quot;http://zajecia....
Przestrzenie nazw a schematy <ul><li>Schemat  zapisuje się przy pomocy jednego lub więcej dokumentów schematów </li></ul><...
Przestrzenie nazw a schematy osoba imię nazwisko NIP http://zajecia.edu.pl/osoby firma nazwa NIP http://zajecia.edu.pl/ins...
Dokument schematu  <ul><li>< xsd:schema   xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot;   xmlns=&quot;http://zaje...
Łączenie schematów <ul><li>Schemat  zapisuje się przy pomocy jednego lub więcej  dokumentów schematów </li></ul><ul><li>Me...
include <ul><li>Dołączanie dokumentu schematu do docelowej przestrzeni nazw głównego dokumentu schematu <xsd:schema   xmln...
redefine <ul><li>Dołączanie dokumentu schematu do docelowej przestrzeni nazw głównego dokumentu schematu z możliwością prz...
import <ul><li>Odwołanie do komponentów w innej przestrzeni nazw <xsd:schema   xmlns:xsd=&quot;http://www.w3.org/2001/XMLS...
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-...
Wyprowadzanie typów <ul><li>Wyprowadzanie typów prostych: </li></ul><ul><ul><li>ograniczanie </li></ul></ul><ul><ul><li>tw...
Ograniczanie typów prostych <ul><li>Aspekty </li></ul><ul><ul><li>minExclusive ,  minInclusive </li></ul></ul><ul><ul><li>...
Ograniczanie typów prostych – przykłady <ul><li><xsd:simpleType name=&quot;OcenaTyp&quot;>   <xsd:restriction base=&quot;x...
Ograniczanie typów prostych <ul><li>Przestrzeń wartości typu wyprowadzonego musi być podzbiorem przestrzeni wartości typu ...
Listy <ul><li><xsd:simpleType name=&quot;OcenaTyp&quot;>   <xsd:restriction base=&quot;xsd:integer&quot;>   <xsd:minInclus...
Unie <ul><li><xsd:simpleType name=&quot;RozmiarLiczbowyTyp&quot;>   <xsd:restriction base=&quot;xsd:integer&quot;>   <xsd:...
Rozszerzenia <ul><li>Wartości typu bazowego nie muszą być poprawnymi wartościami typu wyprowadzonego </li></ul><ul><li>Roz...
Rozszerzanie zawartości prostej <ul><li><xsd:complexType name=&quot;CenaTyp&quot;>   <xsd: simpleContent >   <xsd: extensi...
Rozszerzanie zawartości złożonej <ul><li><xsd:complexType name=&quot;pracownikTyp&quot;>   <xsd:sequence>   <xsd:element n...
Ograniczanie typów złożonych <ul><li>Przestrzeń wartości typu wyprowadzonego musi być podzbiorem przestrzeni wartości typu...
Ograniczanie zawartości prostej i atrybutów <ul><li><xsd:complexType name=&quot;MasaNiedokladnaTyp&quot;>   <xsd:simpleCon...
Ograniczanie zawartości złożonej <ul><li><xsd:complexType name=&quot;BazowyTyp&quot;>   <xsd:sequence>   <xsd:element name...
Metody modularyzacji schematów <ul><li>Grupy do wielokrotnego wykorzystania </li></ul><ul><ul><li>nazwane grupy modeli </l...
Grupy wielokrotnego wykorzystania <ul><li><xsd: group  name=&quot;ImięNazwisko&quot;>   <xsd:sequence>   <xsd:element name...
Grupy zamienne <ul><li><xsd:element name=&quot;katalog&quot;>   <xsd:complexType>    <xsd:sequence>   <xsd:element ref=&qu...
Grupy zamienne – wykorzystanie <ul><li><katalog>   <produkt>...</produkt>   <komputer>...</komputer>   <ubranie>...</ubran...
Więzy integralności <ul><li>Elementy więzów integralności </li></ul><ul><ul><li>unique  – wartości w ramach określonego za...
Więzy integralności <ul><li><xsd:element name=&quot;zamówienia-i-faktury&quot;    type=&quot;ZamówieniaFakturyTyp&quot;>  ...
Tworzenie schematu XSD za pomocą .NET
Upcoming SlideShare
Loading in …5
×

Wyklad2 - XSD

510 views
443 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
510
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

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), &amp;quot;rozgarnięty&amp;quot; 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 &amp;quot;czysty&amp;quot; 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

    1. 1. Definiowanie typów dokumentów DTD, XML Schema
    2. 2. Tematyka <ul><li>Struktura XML </li></ul><ul><li>DTD </li></ul><ul><li>XML Schema </li></ul>
    3. 3. Struktura XML Deklaracja XML Atrybut Zawartość tekstowa Element główny Element Znacznik początkowy Znacznik końcowy
    4. 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=&quot;1313/2001&quot; …
    5. 5. Składnia XML <ul><li>Deklaracja XML: </li></ul><ul><ul><li><?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?> </li></ul></ul><ul><li>Znaczniki: </li></ul><ul><ul><li><tag attributename=&quot;attribute value&quot;> </tag> </li></ul></ul><ul><li>Znaczniki elementu pustego: </li></ul><ul><ul><li><br></br> <br/> </li></ul></ul><ul><li>Komentarz: </li></ul><ul><ul><li><!-- komentarz --> </li></ul></ul><ul><li>Instrukcja przetwarzania: </li></ul><ul><ul><li><?target processing-instruction-body?> </li></ul></ul><ul><li>Sekcja CDATA: </li></ul><ul><ul><li><![CDATA[dowolny <tekst &quot; nieprzetwarzany & przez [ parser]]> </li></ul></ul>
    6. 6. Encje predefiniowane <ul><li>&amp; & </li></ul><ul><li>&lt; < </li></ul><ul><li>&gt; > </li></ul><ul><li>&apos; ' </li></ul><ul><li>&quot; &quot; </li></ul>
    7. 7. Unicode <ul><li>Światowy standard kodowania znaków. </li></ul><ul><li>Odmiany: </li></ul><ul><ul><li>UTF-7 (korzysta tylko z 7-bitowego zestawu znaków ASCII) </li></ul></ul><ul><ul><li>UTF-8 (pierwsze 128 – ASCII, znak zajmuje od 1 do 6 bajtów) </li></ul></ul><ul><ul><li>UTF-16 (każdy znak to 16-bitów) </li></ul></ul><ul><ul><li>UTF-32 (każdy znak 32-bity) </li></ul></ul><ul><ul><li>UCS-4 (znak zajmuje zawsze 4 bajty) </li></ul></ul><ul><li>Obowiązkowy standard dla dokumentów XML: </li></ul><ul><ul><li>każde narzędzie XML-owe musi wspierać przynajmniej UTF-8 </li></ul></ul><ul><li>Sposób użycia w dokumentach XML: </li></ul><ul><ul><li>jako odpowiedni ciąg bajtów </li></ul></ul><ul><ul><li>&# kod ; - kod dziesiętny znaku </li></ul></ul><ul><ul><li>&# x kod ; - kod szesnastkowy znaku </li></ul></ul>
    8. 8. Definiowanie języków <ul><li>XML, SGML </li></ul><ul><li>Definiowanie języków (zastosowań, struktury dokumentów, typów dokumentów): </li></ul><ul><ul><li>określanie zestawu dopuszczalnych elementów, atrybutów definiowanie dopuszczalnej zawartości elementów (tekst, inne elementy) </li></ul></ul><ul><ul><li>przypisywanie atrybutów do elementów </li></ul></ul><ul><ul><li>inne części </li></ul></ul><ul><li>Metody definiowania struktury: </li></ul><ul><ul><li>dokument XML bez formalnej definicji struktury </li></ul></ul><ul><ul><li>DTD – Document Type Definition </li></ul></ul><ul><ul><li>XML Schema (rekomendacja W3C z 2 maja 2001) </li></ul></ul>
    9. 9. Poprawność struktury dokumentu <ul><li>Dokument XML poprawny składniowo każdy element musi być zamknięty: </li></ul><ul><ul><li>nie ma nakładających się elementów </li></ul></ul><ul><ul><li>wartości atrybutów w apostrofach lub cudzysłowach </li></ul></ul><ul><li>Dokument XML poprawny strukturalnie </li></ul><ul><ul><li>struktura dokumentu zgodna ze strukturą zdefiniowaną w definicji typu dokumentu, </li></ul></ul><ul><ul><li>obecne wszystkie wymagane atrybuty </li></ul></ul>
    10. 10. Modelowanie typów dokumentów <ul><li>Wieloetapowy proces: </li></ul><ul><ul><li>analiza struktury modelowanych bytów, </li></ul></ul><ul><ul><li>analiza przykładowych dokumentów, </li></ul></ul><ul><ul><li>analiza potencjalnych zastosowań dokumentów oraz przypadków użycia, </li></ul></ul><ul><ul><li>abstrakcyjny projekt struktury, </li></ul></ul><ul><ul><li>kodowanie projektu struktury np. przy pomocy DTD lub XML Schema, </li></ul></ul><ul><ul><li>testowanie, </li></ul></ul><ul><ul><li>stała adaptacja. </li></ul></ul>
    11. 11. Projektowanie struktury dokumentów wiersz autor tytuł zwrotka * ? wers *
    12. 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. 13. Braki DTD <ul><li>Zastosowania XML w integracji aplikacji – struktury danych: </li></ul><ul><ul><li>Przeniesienie zadania sprawdzania poprawności tworzonej aplikacji przez narzędzie walidujące </li></ul></ul><ul><ul><li>60% tworzonego kodu dotyczy weryfikacji poprawności danych </li></ul></ul><ul><li>Cechy DTD: </li></ul><ul><ul><li>Mała kontrola nad tekstową zawartością elementów i wartościami atrybutów </li></ul></ul><ul><ul><li>Ogólne metody definiowania częstości wystąpień </li></ul></ul><ul><ul><li>Nieobiektowe, nierozszerzalne modele struktury </li></ul></ul>
    14. 14. DTD vs XML Schema <ul><li>Wywodzi się z SGML-a </li></ul><ul><li>Specyficzna składnia </li></ul><ul><li>10 typów danych </li></ul><ul><li>Zaprojektowany na potrzeby XML </li></ul><ul><li>Składnia XML </li></ul><ul><li>44 wbudowane typy proste </li></ul><ul><li>Typowy mieszany model zawartości </li></ul><ul><li>Możliwość definiowania własnych typów danych </li></ul><ul><li>Brak kontroli tekstowej zawartości elementów </li></ul><ul><li>Zaawansowana kontrola tekstowej zawartości elementów </li></ul>
    15. 15. XML Schema <ul><li>15 lutego 1999: Dokument W3C opisujący wymagania stawiane przed nowym formatem: </li></ul><ul><ul><li>mechanizmy tworzenia struktury </li></ul></ul><ul><ul><li>typy proste </li></ul></ul><ul><ul><li>reguły przetwarzania </li></ul></ul><ul><li>Przestrzeń nazw XML Schema: http://www.w3.org/2001/XMLSchema </li></ul>
    16. 16. Elementy i atrybuty <ul><li>< 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> </li></ul>
    17. 17. Kontrola użycia elementów i atrybutów <ul><li><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> </li></ul>
    18. 18. Typy <ul><li>Typy wg zasięgu definicji: </li></ul><ul><ul><li>typy nazwane </li></ul></ul><ul><ul><li>typy anonimowe </li></ul></ul><ul><li>Typy wg zawartości: </li></ul><ul><ul><li>typy proste </li></ul></ul><ul><ul><li>typy złożone o zawartości: </li></ul></ul><ul><ul><ul><li>prostej </li></ul></ul></ul><ul><ul><ul><li>elementowej </li></ul></ul></ul><ul><ul><ul><li>mieszanej </li></ul></ul></ul><ul><ul><ul><li>pustej </li></ul></ul></ul><ul><li>Typy wg pochodzenia: </li></ul><ul><ul><li>typy wbudowane </li></ul></ul><ul><ul><li>typy zdefiniowane w schemacie: </li></ul></ul><ul><ul><ul><li>rozszerzenia innych typów </li></ul></ul></ul><ul><ul><ul><li>ograniczenia innych typów </li></ul></ul></ul><ul><ul><ul><li>listy i unie </li></ul></ul></ul>
    19. 19. Typy nazwane i anonimowe <ul><li>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;/> </li></ul><ul><li>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> </li></ul>
    20. 20. Typy proste i złożone <ul><li>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 > </li></ul><ul><li>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> </li></ul><ul><li>Element może mieć typ prosty lub złożony </li></ul><ul><li>Atrybut może mieć wyłącznie typ prosty </li></ul>
    21. 21. Typy złożone – typy zawartości <ul><li>Zawartość elementowa: <osoba PESEL=&quot;12345678901&quot;> <imie>Jan</imie> <nazwisko>Kowalski</nazwisko> </osoba> </li></ul><ul><li>Zawartość prosta: <masa jm=&quot;kg&quot;>10.55</masa> </li></ul>
    22. 22. Typy złożone – typy zawartości <ul><li>Zawartość mieszana: </li></ul><ul><li>Zawartość pusta: <osoba PESEL=&quot;12345678901&quot;/> </li></ul>
    23. 23. Definiowanie zawartości elementowej <ul><li>Grupy deklaracji elementów: </li></ul><ul><ul><li>sequence , choice , all </li></ul></ul><ul><li>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> </li></ul>
    24. 24. Grupa all – ograniczenia <ul><li>Nie może zawierać innych grup (tylko deklaracje elementów i odwołania do elementów) </li></ul><ul><li>Każdy element może wystąpić co najwyżej raz </li></ul><ul><li>Grupa all nie może być zagnieżdżona w innej grupie </li></ul><ul><li>Zagnieżdżanie grup </li></ul><ul><li><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> </li></ul>
    25. 25. Definiowanie zawartości prostej <ul><li><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> </li></ul>
    26. 26. Definiowanie zawartości mieszanej <ul><li><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> </li></ul>
    27. 27. Definiowanie zawartości pustej <ul><li><xsd:complexType name=&quot;OsobaTyp&quot;> <xsd:attribute name=&quot;PESEL&quot; type=&quot;PESELTyp&quot;/> </xsd:complexType> </li></ul>
    28. 28. Globalne i lokalne deklaracje elementów i atrybutów - lokalne <ul><li>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> </li></ul>
    29. 29. Globalne i lokalne deklaracje elementów i atrybutów - globalne <ul><li>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> </li></ul>
    30. 30. Elementy a atrybuty <ul><li>Informacje modelowane zwykle w elementach: </li></ul><ul><ul><li>zawartość - np. nazwisko, wiek </li></ul></ul><ul><ul><li>struktura – np. akt prawny, rozdział </li></ul></ul><ul><ul><li>wyszukiwanie - indeks, słowo kluczowe </li></ul></ul><ul><ul><li>odesłania – odnośniki, przypisy </li></ul></ul><ul><li>Informacje modelowane zwykle w atrybutach: </li></ul><ul><ul><li>metainformacje – język, format liczb </li></ul></ul><ul><ul><li>identyfikatory wartości i odwołania do nich </li></ul></ul>
    31. 31. Elementy vs atrybuty <ul><li>Zalety elementów: </li></ul><ul><ul><li>mogą zawierać inne elementy i atrybuty </li></ul></ul><ul><ul><li>mogą się powtarzać </li></ul></ul><ul><ul><li>można bezpiecznie rozszerzać ich model zawartości </li></ul></ul><ul><ul><li>można dokładnie sterować sposobem ich występowania - kolejność, liczba wystąpień </li></ul></ul><ul><li>Zalety atrybutów: </li></ul><ul><ul><li>szybsze do definiowania </li></ul></ul><ul><ul><li>mogą mieć wartości domyślne </li></ul></ul>
    32. 32. Wartości domyślne i ustalone <ul><li><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;/> </li></ul><ul><li>Przykład </li></ul><ul><li><kwota waluta= &quot; EUR &quot; VAT= &quot; 16% &quot; >20</kwota> </li></ul><ul><li>powinno być bez VAT </li></ul>
    33. 33. Przestrzenie nazw <ul><li>Wykorzystanie </li></ul><ul><ul><li>Analogiczna nazwa określająca te same elementy w różnych powiązanych dokumentach - wspólnie przetwarzane, zagnieżdżenie jednego w drugim </li></ul></ul><ul><li>Koncepcja </li></ul><ul><ul><li>grupa nazw oddzielona (składniowo i semantycznie) od innych nazw </li></ul></ul><ul><li>Historia </li></ul><ul><ul><li>rekomendacja W3C ze stycznia 1999 r </li></ul></ul><ul><ul><li>XML 1.0 (również DTD) nie wspierają przestrzeni nazw </li></ul></ul><ul><ul><li>standardy XML Schema, XSL, XLink wspierają przestrzenie nazw </li></ul></ul>
    34. 34. Nazwy przestrzeni nazw <ul><li>Identyfikatory URI, np: </li></ul><ul><ul><li>http://www.w3.org/XSLT/Transform/1.0 </li></ul></ul><ul><ul><li>http://zajecia.edu.pl/osoby </li></ul></ul><ul><ul><li>urn:szz:mimuw </li></ul></ul><ul><li>Nazwy przestrzeni nazw: </li></ul><ul><ul><li>nie muszą wskazywać konkretnych zasobów </li></ul></ul><ul><ul><li>pełnią funkcję unikatowych identyfikatorów </li></ul></ul><ul><ul><li>są porównywane jako napisy - istotna wielkości liter </li></ul></ul><ul><li>Wykorzystanie w dokumentach XML: </li></ul><ul><ul><li>odwzorowanie na kilkuznakowy prefiks </li></ul></ul><ul><ul><li>poprzedzanie nazw prefiksem </li></ul></ul>
    35. 35. Użycie przestrzeni nazw XML <ul><li>< 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 > </li></ul>
    36. 36. Domyślna przestrzeń nazw <ul><li>< 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 > </li></ul>
    37. 37. Widoczność przestrzeni nazw <ul><li>< 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 > </li></ul>
    38. 38. Nazwy z prefiksem i bez <ul><li>Nazwy elementów: </li></ul><ul><ul><li>kwalifikowane – należą do pewnej przestrzeni nazw </li></ul></ul><ul><ul><ul><li>poprzedzone prefiksem </li></ul></ul></ul><ul><ul><ul><li>nie poprzedzone prefiksem, jeśli są w zasięgu deklaracji domyślnej </li></ul></ul></ul><ul><ul><li>niekwalifikowane – nie należą do żadnej przestrzeni nazw </li></ul></ul><ul><ul><ul><li>nie poprzedzone prefiksem, poza zasięgiem deklaracji domyślnej przestrzeni nazw </li></ul></ul></ul><ul><li>Nazwy atrybutów: </li></ul><ul><ul><li>poprzedzone prefiksem – należą do pewnej przestrzeni nazw </li></ul></ul><ul><ul><li>nie poprzedzone prefiksem – nie należą do żadnej przestrzeni nazw </li></ul></ul>
    39. 39. Nazwy elementów bez prefiksów <ul><li>< 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 > </li></ul>
    40. 40. Nazwy atrybutów <ul><li>< 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 > </li></ul>
    41. 41. Atrybuty - analiza <ul><li>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> </li></ul><ul><li>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> </li></ul><ul><li>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 > </li></ul>
    42. 42. Przestrzenie nazw a schematy <ul><li>Schemat zapisuje się przy pomocy jednego lub więcej dokumentów schematów </li></ul><ul><li>Schemat deklaruje nazwy należące do zero lub więcej przestrzeni nazw </li></ul><ul><li>Dokument schematu deklaruje nazwy należące do zera lub jednej przestrzeni nazw </li></ul><ul><li>Przestrzeń nazw zawiera nazwy zadeklarowane w zero lub więcej schematach </li></ul>
    43. 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. 44. Dokument schematu <ul><li>< 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 > </li></ul>
    45. 45. Łączenie schematów <ul><li>Schemat zapisuje się przy pomocy jednego lub więcej dokumentów schematów </li></ul><ul><li>Metody budowania schematu z dokumentów schematów </li></ul><ul><ul><li>instrukcje include , import i redefine </li></ul></ul><ul><ul><li>lokalizacje dokumentów schematów są określone w egzemplarzu </li></ul></ul><ul><ul><li>procesor łączy dokumenty schematów znajdujące się w zdefiniowanych lokalizacjach </li></ul></ul><ul><ul><li>lokalizacje dokumentów schematów są przekazywane jako parametry wiersza poleceń </li></ul></ul>
    46. 46. include <ul><li>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> </li></ul><ul><li>Dołączany dokument musi: </li></ul><ul><ul><li>mieć taką samą docelową przestrzeń nazw jak dokument główny, lub </li></ul></ul><ul><ul><li>nie mieć docelowej przestrzeni nazw </li></ul></ul>http://zajecia.edu.pl/osoby osoba imię nazwisko NIP osoby.xsd firma nazwa REGON inst.xsd
    47. 47. redefine <ul><li>Dołączanie dokumentu schematu do docelowej przestrzeni nazw głównego dokumentu schematu z możliwością przedefiniowania: </li></ul><ul><ul><li>typów prostych i złożonych </li></ul></ul><ul><ul><li>nazwanych grup modeli </li></ul></ul><ul><ul><li>grup atrybutów </li></ul></ul><ul><li><xsd: redefine schemaLocation=&quot;inst.xsd&quot;/> </li></ul>http://zajecia.edu.pl/osoby osoba imię nazwisko NIP NIPTyp osoby.xsd firma nazwa REGON NIPTyp inst.xsd
    48. 48. import <ul><li>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> </li></ul>http://zajecia.edu.pl/osoby osoba imię nazwisko NIP osoby.xsd firma nazwa NIP inst.xsd http://zajecia.edu.pl/instytucje
    49. 49. Wbudowane typy proste
    50. 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. 51. Wyprowadzanie typów <ul><li>Wyprowadzanie typów prostych: </li></ul><ul><ul><li>ograniczanie </li></ul></ul><ul><ul><li>tworzenie list </li></ul></ul><ul><ul><li>tworzenie unii </li></ul></ul><ul><li>Wyprowadzanie typów złożonych: </li></ul><ul><ul><li>ograniczanie </li></ul></ul><ul><ul><li>rozszerzanie: </li></ul></ul><ul><ul><ul><li>typów prostych </li></ul></ul></ul><ul><ul><ul><li>typów złożonych </li></ul></ul></ul>
    52. 52. Ograniczanie typów prostych <ul><li>Aspekty </li></ul><ul><ul><li>minExclusive , minInclusive </li></ul></ul><ul><ul><li>maxExclusive , maxInclusive </li></ul></ul><ul><ul><li>length , minLength , maxLength </li></ul></ul><ul><ul><li>totalDigits , fractionDigits </li></ul></ul><ul><ul><li>enumeration </li></ul></ul><ul><ul><li>pattern </li></ul></ul><ul><li>Tylko pattern i enumeration można użyć wielokrotnie w jednej definicji typu </li></ul>
    53. 53. Ograniczanie typów prostych – przykłady <ul><li><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> </li></ul>
    54. 54. Ograniczanie typów prostych <ul><li>Przestrzeń wartości typu wyprowadzonego musi być podzbiorem przestrzeni wartości typu bazowego </li></ul><ul><li>Typy wbudowane mają określone niektóre aspekty, byte : </li></ul><ul><ul><li>minInclusive : -128, </li></ul></ul><ul><ul><li>maxInclusive : 127. </li></ul></ul><ul><li>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> </li></ul>
    55. 55. Listy <ul><li><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> </li></ul>
    56. 56. Unie <ul><li><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> </li></ul>
    57. 57. Rozszerzenia <ul><li>Wartości typu bazowego nie muszą być poprawnymi wartościami typu wyprowadzonego </li></ul><ul><li>Rozszerzanie zawartości prostej – dodawanie atrybutów do: </li></ul><ul><ul><li>typu prostego </li></ul></ul><ul><ul><li>typu złożonego o zawartości prostej </li></ul></ul><ul><li>Rozszerzanie zawartości złożonej </li></ul><ul><ul><li>dodawanie do typu bazowego dodatkowych elementów i/lub atrybutów </li></ul></ul><ul><ul><li>elementy dodawane w rozszerzeniu występują zawsze na końcu, po elementach zadeklarowanych w typie bazowym </li></ul></ul>
    58. 58. Rozszerzanie zawartości prostej <ul><li><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> </li></ul>
    59. 59. Rozszerzanie zawartości złożonej <ul><li><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> </li></ul>
    60. 60. Ograniczanie typów złożonych <ul><li>Przestrzeń wartości typu wyprowadzonego musi być podzbiorem przestrzeni wartości typu bazowego </li></ul><ul><li>Dozwolone operacje: </li></ul><ul><ul><li>ograniczenie zawartości prostej </li></ul></ul><ul><ul><li>ograniczenie atrybutu </li></ul></ul><ul><ul><ul><li>ograniczenie typu atrybutu </li></ul></ul></ul><ul><ul><ul><li>zmiana atrybutu opcjonalnego na wymagany ( required ) lub zabroniony ( prohibited ) </li></ul></ul></ul><ul><ul><ul><li>dodanie, zmiana lub usunięcie wartości domyślnej </li></ul></ul></ul><ul><ul><ul><li>dodanie wartości ustalonej, jeśli jej nie było </li></ul></ul></ul><ul><ul><li>ograniczenie modelu zawartości </li></ul></ul><ul><ul><ul><li>ściślejsze ograniczenia liczebności ( minOccurs , maxOccurs ) </li></ul></ul></ul><ul><ul><ul><li>usunięcie elementów opcjonalnych w grupach sequence i all </li></ul></ul></ul><ul><ul><ul><li>wybranie podzbioru elementów w grupie choice </li></ul></ul></ul><ul><ul><ul><li>ograniczenie typu poszczególnych podelementów </li></ul></ul></ul>
    61. 61. Ograniczanie zawartości prostej i atrybutów <ul><li><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> </li></ul>
    62. 62. Ograniczanie zawartości złożonej <ul><li><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> </li></ul>
    63. 63. Metody modularyzacji schematów <ul><li>Grupy do wielokrotnego wykorzystania </li></ul><ul><ul><li>nazwane grupy modeli </li></ul></ul><ul><ul><li>grupy atrybutów </li></ul></ul><ul><li>Grupy zamienne </li></ul>
    64. 64. Grupy wielokrotnego wykorzystania <ul><li><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;/> </li></ul><ul><li></xsd:complexType> </li></ul>
    65. 65. Grupy zamienne <ul><li><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;/> </li></ul>
    66. 66. Grupy zamienne – wykorzystanie <ul><li><katalog> <produkt>...</produkt> <komputer>...</komputer> <ubranie>...</ubranie> <produkt>...</produkt> </katalog> </li></ul>
    67. 67. Więzy integralności <ul><li>Elementy więzów integralności </li></ul><ul><ul><li>unique – wartości w ramach określonego zakresu muszą być unikatowe </li></ul></ul><ul><ul><li>key - wartości w ramach określonego zakresu muszą być unikatowe i nie mogą być puste </li></ul></ul><ul><ul><li>keyref – odwołanie do wartości wskazanego klucza </li></ul></ul><ul><li>Zalety </li></ul><ul><ul><li>można tworzyć wiele niezależnych od siebie ograniczeń </li></ul></ul><ul><ul><li>odwołanie wskazuje konkretny klucz </li></ul></ul><ul><ul><li>więzy integralności mogą być nałożone na kombinację wartości </li></ul></ul><ul><ul><li>więzy integralności mogą być nałożone na zawartość elementów </li></ul></ul>
    68. 68. Więzy integralności <ul><li><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> </li></ul>
    69. 69. Tworzenie schematu XSD za pomocą .NET

    ×