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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Wyklad2 - XSD

345

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
345
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
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 <ul><li>Struktura XML </li></ul><ul><li>DTD </li></ul><ul><li>XML Schema </li></ul>
    • 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=&amp;quot;1313/2001&amp;quot; …
    • 5. Składnia XML <ul><li>Deklaracja XML: </li></ul><ul><ul><li>&lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot;?&gt; </li></ul></ul><ul><li>Znaczniki: </li></ul><ul><ul><li>&lt;tag attributename=&amp;quot;attribute value&amp;quot;&gt; &lt;/tag&gt; </li></ul></ul><ul><li>Znaczniki elementu pustego: </li></ul><ul><ul><li>&lt;br&gt;&lt;/br&gt; &lt;br/&gt; </li></ul></ul><ul><li>Komentarz: </li></ul><ul><ul><li>&lt;!-- komentarz --&gt; </li></ul></ul><ul><li>Instrukcja przetwarzania: </li></ul><ul><ul><li>&lt;?target processing-instruction-body?&gt; </li></ul></ul><ul><li>Sekcja CDATA: </li></ul><ul><ul><li>&lt;![CDATA[dowolny &lt;tekst &amp;quot; nieprzetwarzany &amp; przez [ parser]]&gt; </li></ul></ul>
    • 6. Encje predefiniowane <ul><li>&amp;amp; &amp; </li></ul><ul><li>&amp;lt; &lt; </li></ul><ul><li>&amp;gt; &gt; </li></ul><ul><li>&amp;apos; &apos; </li></ul><ul><li>&amp;quot; &amp;quot; </li></ul>
    • 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>&amp;# kod ; - kod dziesiętny znaku </li></ul></ul><ul><ul><li>&amp;# x kod ; - kod szesnastkowy znaku </li></ul></ul>
    • 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. 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. 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. Projektowanie struktury dokumentów wiersz autor tytuł zwrotka * ? wers *
    • 12. DTD – prosty przykład &lt;!DOCTYPE wiersz [ &lt;!ELEMENT wiersz (autor, tytul?, zwrotka*)&gt; &lt;!ATTLIST wiersz bialy (tak|nie) &amp;quot;nie&amp;quot;&gt; &lt;!ELEMENT autor (#PCDATA)&gt; &lt;!ELEMENT tytul (#PCDATA)&gt; &lt;!ELEMENT zwrotka (wers)*&gt; &lt;!ELEMENT wers (#PCDATA)&gt; ]&gt; element główny zawartość elementów atrybuty wyrażenia regularne
    • 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. 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. 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. Elementy i atrybuty <ul><li>&lt; xsd:element name=&amp;quot;osoba&amp;quot;&gt; &lt;xsd:complexType&gt; &lt;xsd:sequence&gt; &lt;xsd:element name=&amp;quot;imie&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;nazwisko&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;plec&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;wiek&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;/xsd:sequence&gt; &lt; xsd:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xsd:ID&amp;quot;/&gt; &lt;xsd:attribute name=&amp;quot;NIP&amp;quot; type=&amp;quot;NIPTyp&amp;quot;/&gt; &lt;/xsd:complexType&gt; &lt;/xsd:element&gt; </li></ul>
    • 17. Kontrola użycia elementów i atrybutów <ul><li>&lt;xsd:element name=&amp;quot;osoba&amp;quot;&gt; &lt;xsd:complexType&gt; &lt;xsd:sequence&gt; &lt;xsd:element name=&amp;quot;imie&amp;quot; type=&amp;quot;xsd:string&amp;quot; minOccurs=&amp;quot;1&amp;quot; maxOccurs=&amp;quot;2&amp;quot; /&gt; &lt;xsd:element name=&amp;quot;nazwisko&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;plec&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;wiek&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;/xsd:sequence&gt; &lt;xsd:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xsd:ID&amp;quot; use=&amp;quot;required&amp;quot; /&gt; &lt;xsd:attribute name=&amp;quot;NIP&amp;quot; type=&amp;quot;NIPTyp&amp;quot;/&gt; &lt;/xsd:complexType&gt; &lt;/xsd:element&gt; </li></ul>
    • 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. Typy nazwane i anonimowe <ul><li>Typy nazwane : &lt;xsd: complexType name =&amp;quot;OsobaTyp&amp;quot;&gt; &lt;xsd:sequence&gt; &lt;xsd:element name=&amp;quot;imie&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;nazwisko&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;/xsd:sequence&gt; &lt;/xsd: complexType &gt; &lt;xsd:element name=&amp;quot;osoba&amp;quot; type =&amp;quot;OsobaTyp&amp;quot;/&gt; </li></ul><ul><li>Typy anonimowe: &lt; xsd:element name=&amp;quot;osoba&amp;quot;&gt; &lt;xsd: complexType &gt; &lt;xsd:sequence&gt; &lt;xsd:element name=&amp;quot;imie&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;nazwisko&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;/xsd:sequence&gt; &lt;/xsd: complexType &gt; &lt;/xsd:element&gt; </li></ul>
    • 20. Typy proste i złożone <ul><li>Typy proste: &lt;xsd: simpleType name=&amp;quot;NIPTyp&amp;quot;&gt; &lt;xsd:restriction base=&amp;quot;xsd:string&amp;quot;&gt; &lt;xsd:pattern value=&amp;quot;d{3}-d{3}-d{2}-d{2}&amp;quot;/&gt; &lt;/xsd:restriction&gt; &lt;/xsd: simpleType &gt; </li></ul><ul><li>Typy złożone: &lt;xsd: complexType name=&amp;quot;OsobaTyp&amp;quot;&gt; &lt;xsd:sequence&gt; &lt;xsd:element name=&amp;quot;imie&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;nazwisko&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;/xsd:sequence&gt; &lt;/ xsd:complexType&gt; </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. Typy złożone – typy zawartości <ul><li>Zawartość elementowa: &lt;osoba PESEL=&amp;quot;12345678901&amp;quot;&gt; &lt;imie&gt;Jan&lt;/imie&gt; &lt;nazwisko&gt;Kowalski&lt;/nazwisko&gt; &lt;/osoba&gt; </li></ul><ul><li>Zawartość prosta: &lt;masa jm=&amp;quot;kg&amp;quot;&gt;10.55&lt;/masa&gt; </li></ul>
    • 22. Typy złożone – typy zawartości <ul><li>Zawartość mieszana: </li></ul><ul><li>Zawartość pusta: &lt;osoba PESEL=&amp;quot;12345678901&amp;quot;/&gt; </li></ul>
    • 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: &lt;xsd:complexType name=&amp;quot;OsobaTyp&amp;quot;&gt; &lt;xsd: sequence &gt; &lt;xsd:element name=&amp;quot;imie&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element ref=&amp;quot;nazwisko&amp;quot;/&gt; &lt;xsd: choice &gt; &lt;xsd:element name=&amp;quot;nr-dowodu&amp;quot; type=&amp;quot;DowódTyp&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;nr-paszportu&amp;quot; type=&amp;quot;PaszportTyp&amp;quot;/&gt; &lt;/xsd: choice &gt; &lt;/xsd: sequence &gt; &lt;/xsd:complexType&gt; </li></ul>
    • 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>&lt;xsd:complexType name=&amp;quot;OsobaTyp&amp;quot;&gt; &lt;xsd: all &gt; &lt;xsd:element name=&amp;quot;imie&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;drugie-imie&amp;quot; type=&amp;quot;xsd:string&amp;quot; minOccurs=&amp;quot;0&amp;quot;/&gt; &lt;xsd:element ref=&amp;quot;nazwisko&amp;quot;/&gt; &lt;/xsd: all &gt; &lt;/xsd:complexType&gt; </li></ul>
    • 25. Definiowanie zawartości prostej <ul><li>&lt;xsd:complexType name=&amp;quot;MasaTyp&amp;quot;&gt; &lt;xsd: simpleContent &gt; &lt;xsd:extension base=&amp;quot;xsd:decimal&amp;quot;&gt; &lt;xsd:attribute name=&amp;quot;jm&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;/xsd:extension&gt; &lt;/xsd: simpleContent &gt; &lt;/xsd:complexType&gt; </li></ul>
    • 26. Definiowanie zawartości mieszanej <ul><li>&lt;xsd:complexType name=&amp;quot;ZeznanieTyp&amp;quot; mixed=&amp;quot;true&amp;quot; &gt; &lt;xsd:sequence&gt; &lt;xsd:element name=&amp;quot;data&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;godzina&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;dzien-tygodnia&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;poszkodowany&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;/xsd:sequence&gt; &lt;/xsd:complexType&gt; </li></ul>
    • 27. Definiowanie zawartości pustej <ul><li>&lt;xsd:complexType name=&amp;quot;OsobaTyp&amp;quot;&gt; &lt;xsd:attribute name=&amp;quot;PESEL&amp;quot; type=&amp;quot;PESELTyp&amp;quot;/&gt; &lt;/xsd:complexType&gt; </li></ul>
    • 28. Globalne i lokalne deklaracje elementów i atrybutów - lokalne <ul><li>Deklaracje lokalne &lt;xsd:complexType name=&amp;quot;OsobaTyp&amp;quot;&gt; &lt;xsd:sequence&gt; &lt;xsd: element name =&amp;quot;imie&amp;quot; type=&amp;quot;xsd:string&amp;quot; minOccurs=&amp;quot;1&amp;quot; maxOccurs=&amp;quot;2&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;nazwisko&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;/xsd:sequence&gt; &lt;xsd: attribute name =&amp;quot;NIP&amp;quot; type=&amp;quot;NIPTyp&amp;quot; use=&amp;quot;required&amp;quot;/&gt; &lt;/xsd:complexType&gt; </li></ul>
    • 29. Globalne i lokalne deklaracje elementów i atrybutów - globalne <ul><li>Deklaracje globalne i odwołania &lt;xsd: element name =&amp;quot;imie&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;nazwisko&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd: attribute name =&amp;quot;NIP&amp;quot; type=&amp;quot;NIPTyp&amp;quot;/&gt; &lt;xsd:complexType name=&amp;quot;OsobaTyp&amp;quot;&gt; &lt;xsd:sequence&gt; &lt;xsd: element ref =&amp;quot;imie&amp;quot; minOccurs=&amp;quot;1&amp;quot; maxOccurs=&amp;quot;2&amp;quot;/&gt; &lt;xsd:element ref=&amp;quot;nazwisko&amp;quot;/&gt; &lt;/xsd:sequence&gt; &lt;xsd: attribute ref =&amp;quot;NIP&amp;quot; use=&amp;quot;required&amp;quot;/&gt; &lt;/xsd:complexType&gt; </li></ul>
    • 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. 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. Wartości domyślne i ustalone <ul><li>&lt;xsd:element name=&amp;quot;ilość&amp;quot; type=&amp;quot;xsd:positiveInteger&amp;quot; default =&amp;quot;1&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;cena&amp;quot; type=&amp;quot;xsd:positiveInteger&amp;quot; fixed =&amp;quot;5&amp;quot;/&gt; &lt;xsd:attribute name=&amp;quot;waluta&amp;quot; type=&amp;quot;xsd:string&amp;quot; default =&amp;quot;PLN&amp;quot;/&gt; &lt;xsd:attribute name=&amp;quot;VAT&amp;quot; type=&amp;quot;xsd:string&amp;quot; fixed =&amp;quot;22%&amp;quot;/&gt; </li></ul><ul><li>Przykład </li></ul><ul><li>&lt;kwota waluta= &amp;quot; EUR &amp;quot; VAT= &amp;quot; 16% &amp;quot; &gt;20&lt;/kwota&gt; </li></ul><ul><li>powinno być bez VAT </li></ul>
    • 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. 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. Użycie przestrzeni nazw XML <ul><li>&lt; os:osoba xmlns:os=&amp;quot;http://zajecia.edu.pl/osoby&amp;quot; xmlns:inst=&amp;quot;http://zajecia.edu.pl/instytucje&amp;quot; xmlns:xhtml=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; &gt; &lt; os:imie &gt;Adam&lt;/ os:imie &gt; &lt; os:nazwisko &gt;Leski&lt;/ os:nazwisko &gt; &lt; os:NIP &gt;123-456-78-90&lt;/ os:NIP &gt; &lt; os:opis &gt;&lt; xhtml:b &gt; Prezes firmy&lt;/ xhtml:b &gt; &lt;/ os:opis &gt; &lt; os:pracuje-w &gt; &lt; inst:firma &gt; &lt; inst:nazwa &gt;WinPol&lt;/ inst:nazwa &gt; &lt; inst:NIP &gt;987-654-32-10&lt;/ inst:NIP &gt; &lt;/ inst:firma &gt; &lt;/ os:pracuje-w &gt; &lt;/ os:osoba &gt; </li></ul>
    • 36. Domyślna przestrzeń nazw <ul><li>&lt; osoba xmlns=&amp;quot;http://zajecia.edu.pl/osoby&amp;quot; xmlns:inst=&amp;quot;http://zajecia.edu.pl/instytucje&amp;quot; xmlns:xhtml=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; &gt; &lt; imie &gt;Adam&lt;/ imie &gt; &lt; nazwisko &gt;Leski&lt;/ nazwisko &gt; &lt; NIP &gt;123-456-78-90&lt;/ NIP &gt; &lt; opis &gt;&lt; xhtml:b &gt; Prezes firmy&lt;/ xhtml:b &gt; &lt; pracuje-w &gt; &lt; inst:firma &gt; &lt; inst:nazwa &gt;WinPol&lt;/ inst:nazwa &gt; &lt; inst:NIP &gt;987-654-32-10&lt;/ inst:NIP &gt; &lt;/ inst:firma &gt; &lt;/ pracuje-w &gt; &lt;/ osoba &gt; </li></ul>
    • 37. Widoczność przestrzeni nazw <ul><li>&lt; os:osoba xmlns:os=&amp;quot;http://zajecia.edu.pl/osoby&amp;quot; &gt; &lt; os:imie &gt;Adam&lt;/ os:imie &gt; &lt; os:nazwisko &gt;Leski&lt;/ os:nazwisko &gt; &lt; os:NIP &gt;123-456-78-90&lt;/ os:NIP &gt; &lt; os:pracuje-w &gt; &lt; os:firma xmlns:os=&amp;quot;http://zajecia.edu.pl/instytucje&amp;quot; &gt; &lt; os:nazwa &gt;WinPol&lt;/ os:nazwa &gt; &lt; os:NIP &gt;987-654-32-10&lt;/ os:NIP &gt; &lt;/ os:firma &gt; &lt;/ os:pracuje-w &gt; &lt;/ os:osoba &gt; </li></ul>
    • 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. Nazwy elementów bez prefiksów <ul><li>&lt; osoba xmlns=&amp;quot;http://zajecia.edu.pl/osoby&amp;quot; &gt; &lt; imie &gt;Adam&lt;/ imie &gt; &lt; nazwisko &gt;Leski&lt;/ nazwisko &gt; &lt; NIP &gt;123-456-78-90&lt;/ NIP &gt; &lt; pracuje-w &gt; &lt;firma xmlns=&amp;quot;&amp;quot; &gt; &lt;nazwa&gt;WinPol&lt;/nazwa&gt; &lt;NIP&gt;987-654-32-10&lt;/NIP&gt; &lt;/firma&gt; &lt;/ pracuje-w &gt; &lt;/ osoba &gt; </li></ul>
    • 40. Nazwy atrybutów <ul><li>&lt; osoba xmlns=&amp;quot;http://zajecia.edu.pl/osoby&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot; &gt; &lt; imie &gt;Jan&lt;/ imie &gt; &lt; nazwisko &gt;Kowalski&lt;/ nazwisko &gt; &lt; NIP &gt;123-456-78-90&lt;/ NIP &gt; &lt; pracuje-w xlink:type =&amp;quot;simple&amp;quot; xlink:href =&amp;quot;...&amp;quot; rodzaj=&amp;quot;etat&amp;quot;&gt;Business Consulting&lt;/ pracuje-w &gt; &lt;/ osoba &gt; </li></ul>
    • 41. Atrybuty - analiza <ul><li>Poprawne &lt;x  xmlns:n1=&amp;quot;http://zajecia.edu.pl/n1 &amp;quot;      xmlns:n2=&amp;quot;http://zajecia.edu.pl/n2&amp;quot; &gt;    &lt;good  n1:a =&amp;quot;1&amp;quot;  n2:a =&amp;quot;2&amp;quot;/&gt; &lt;/x&gt; </li></ul><ul><li>Niepoprawne &lt;x  xmlns:n1=&amp;quot;http://zajecia.edu.pl/n1 &amp;quot;      xmlns:n2=&amp;quot;http://zajecia.edu.pl/n1 &amp;quot;&gt;   &lt;bad  n1:a =&amp;quot;1&amp;quot;  n2:a =&amp;quot;2&amp;quot;/&gt; &lt;/x&gt; </li></ul><ul><li>Poprawne &lt; x   xmlns:n1=&amp;quot;http://zajecia.edu.pl/n1 &amp;quot;      xmlns=&amp;quot;http://zajecia.edu.pl/n1&amp;quot; &gt;   &lt; good   n1:a =&amp;quot;1&amp;quot; a=&amp;quot;2&amp;quot;/&gt; &lt;/ x &gt; </li></ul>
    • 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. 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 <ul><li>&lt; xsd:schema xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns=&amp;quot;http://zajecia.edu.pl/osoby&amp;quot; targetNamespace=&amp;quot;http://zajecia.edu.pl/osoby&amp;quot;&gt; &lt; xsd:complexType name=&amp;quot; OsobaTyp &amp;quot;&gt; ... &lt;/ xsd:complexType &gt; &lt; xsd:element name=&amp;quot; osoba &amp;quot; type=&amp;quot; OsobaTyp &amp;quot;/&gt; &lt; xsd:element name=&amp;quot; numer &amp;quot; type=&amp;quot; xsd:integer &amp;quot;/&gt; ... &lt;/ xsd:schema &gt; </li></ul>
    • 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. include <ul><li>Dołączanie dokumentu schematu do docelowej przestrzeni nazw głównego dokumentu schematu &lt;xsd:schema xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns=&amp;quot;http://zajecia.edu.pl/osoby&amp;quot; targetNamespace=&amp;quot;http://zajecia.edu.pl/osoby&amp;quot;&gt; &lt;xsd: include schemaLocation=&amp;quot;inst.xsd&amp;quot;/&gt; ... &lt;/xsd:schema&gt; </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. 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>&lt;xsd: redefine schemaLocation=&amp;quot;inst.xsd&amp;quot;/&gt; </li></ul>http://zajecia.edu.pl/osoby osoba imię nazwisko NIP NIPTyp osoby.xsd firma nazwa REGON NIPTyp inst.xsd
    • 48. import <ul><li>Odwołanie do komponentów w innej przestrzeni nazw &lt;xsd:schema xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns=&amp;quot;http://zajecia.edu.pl/osoby&amp;quot; xmlns:inst=&amp;quot;http://zajecia.edu.pl/instytucje&amp;quot; targetNamespace=&amp;quot;http://zajecia.edu.pl/osoby&amp;quot;&gt; &lt;xsd: import schemaLocation=&amp;quot;inst.xsd&amp;quot; namespace=&amp;quot;http://zajecia.edu.pl/instytucje&amp;quot;/&gt; ... &lt;/xsd:schema&gt; </li></ul>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 <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. 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. Ograniczanie typów prostych – przykłady <ul><li>&lt;xsd:simpleType name=&amp;quot;OcenaTyp&amp;quot;&gt; &lt;xsd:restriction base=&amp;quot;xsd:integer&amp;quot;&gt; &lt;xsd: minInclusive value=&amp;quot;2&amp;quot;/&gt; &lt;xsd: maxInclusive value=&amp;quot;5&amp;quot;/&gt; &lt;/xsd:restriction&gt; &lt;/xsd:simpleType&gt; &lt;xsd:simpleType name=&amp;quot;OrganizacjaTyp&amp;quot;&gt; &lt;xsd:restriction base=&amp;quot;xsd:token&amp;quot;&gt; &lt;xsd: enumeration value=&amp;quot;Firma&amp;quot;/&gt; &lt;xsd: enumeration value=&amp;quot;Instytucja publiczna&amp;quot;/&gt; &lt;/xsd:restriction&gt; &lt;/xsd:simpleType&gt; &lt;xsd:simpleType name=&amp;quot;NIPTyp&amp;quot;&gt; &lt;xsd:restriction base=&amp;quot;xsd:string&amp;quot;&gt; &lt;xsd: pattern value=&amp;quot;d{3}-d{3}-d{2}-d{2}&amp;quot;/&gt; &lt;xsd: pattern value=&amp;quot;d{3}-d{2}-d{2}-d{3}&amp;quot;/&gt; &lt;/xsd:restriction&gt; &lt;/xsd:simpleType&gt; </li></ul>
    • 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 &lt;xsd:simpleType name=&amp;quot;ExtendedByte&amp;quot;&gt; &lt;xsd:restriction base=&amp;quot;xsd:byte&amp;quot;&gt; &lt;xsd:minInclusive value=&amp;quot; -256 &amp;quot;/&gt; &lt;xsd:maxInclusive value=&amp;quot; 255 &amp;quot;/&gt; &lt;/xsd:restriction&gt; &lt;/xsd:simpleType&gt; </li></ul>
    • 55. Listy <ul><li>&lt;xsd:simpleType name=&amp;quot;OcenaTyp&amp;quot;&gt; &lt;xsd:restriction base=&amp;quot;xsd:integer&amp;quot;&gt; &lt;xsd:minInclusive value=&amp;quot;2&amp;quot;/&gt; &lt;xsd:maxInclusive value=&amp;quot;5&amp;quot;/&gt; &lt;/xsd:restriction&gt; &lt;/xsd:simpleType&gt; &lt;xsd:simpleType name=&amp;quot;OcenySTDTyp&amp;quot;&gt; &lt;xsd: list itemType=&amp;quot;OcenaTyp&amp;quot;/&gt; &lt;/xsd:simpleType&gt; &lt;xsd:simpleType name=&amp;quot;StudentSTDTyp&amp;quot;&gt; &lt;xsd:restriction base=„OcenySTDTyp&amp;quot;&gt; &lt;xsd: length value=&amp;quot;2&amp;quot;/&gt; &lt;/xsd:restriction&gt; &lt;/xsd:simpleType&gt; </li></ul>
    • 56. Unie <ul><li>&lt;xsd:simpleType name=&amp;quot;RozmiarLiczbowyTyp&amp;quot;&gt; &lt;xsd:restriction base=&amp;quot;xsd:integer&amp;quot;&gt; &lt;xsd:minInclusive value=&amp;quot;2&amp;quot;/&gt; &lt;xsd:maxInclusive value=&amp;quot;18&amp;quot;/&gt; &lt;/xsd:restriction&gt; &lt;/xsd:simpleType&gt; &lt;xsd:simpleType name=&amp;quot;RozmiarSMLTyp&amp;quot;&gt; &lt;xsd:restriction base=&amp;quot;xsd:token&amp;quot;&gt; &lt;xsd:enumeration value=&amp;quot;S&amp;quot;/&gt; &lt;xsd:enumeration value=&amp;quot;M&amp;quot;/&gt; &lt;xsd:enumeration value=&amp;quot;L&amp;quot;/&gt; &lt;/xsd:restriction&gt; &lt;/xsd:simpleType&gt; &lt;xsd:simpleType name=&amp;quot;RozmiarTyp&amp;quot;&gt; &lt;xsd: union memberTypes =&amp;quot;RozmiarLiczbowyTyp RozmiarSMLTyp&amp;quot;/&gt; &lt;/xsd:simpleType&gt; </li></ul>
    • 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. Rozszerzanie zawartości prostej <ul><li>&lt;xsd:complexType name=&amp;quot;CenaTyp&amp;quot;&gt; &lt;xsd: simpleContent &gt; &lt;xsd: extension base=&amp;quot;xsd:decimal&amp;quot;&gt; &lt;xsd:attribute name=&amp;quot;waluta&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;/xsd: extension &gt; &lt;/xsd: simpleContent &gt; &lt;/xsd:complexType&gt; &lt;xsd:complexType name=&amp;quot;CenaKlientWaznyTyp&amp;quot;&gt; &lt;xsd: simpleContent &gt; &lt;xsd: extension base=&amp;quot;CenaKlientTyp&amp;quot;&gt; &lt;xsd:attribute name=&amp;quot;rabat&amp;quot; type=&amp;quot;xsd:decimal&amp;quot;/&gt; &lt;/xsd: extension &gt; &lt;/xsd: simpleContent &gt; &lt;/xsd:complexType&gt; </li></ul>
    • 59. Rozszerzanie zawartości złożonej <ul><li>&lt;xsd:complexType name=&amp;quot;pracownikTyp&amp;quot;&gt; &lt;xsd:sequence&gt; &lt;xsd:element name=&amp;quot;imieNazwisko&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;stanowisko&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;/xsd:sequence&gt; &lt;/xsd:complexType&gt; &lt;xsd:complexType name=&amp;quot;pracownikTymczasowyTyp&amp;quot;&gt; &lt;xsd: complexContent &gt; &lt;xsd: extension base=&amp;quot;pracownikTyp&amp;quot;&gt; &lt;xsd:choice&gt; &lt;xsd:element name=&amp;quot;kontrakt&amp;quot; type=&amp;quot;KontraktTyp&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;zlecenie&amp;quot; type=&amp;quot;ZlecenieTyp&amp;quot;/&gt; &lt;/xsd:choice&gt; &lt;/xsd: extension &gt; &lt;/xsd: complexContent &gt; &lt;/xsd:complexType&gt; </li></ul>
    • 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. Ograniczanie zawartości prostej i atrybutów <ul><li>&lt;xsd:complexType name=&amp;quot;MasaNiedokladnaTyp&amp;quot;&gt; &lt;xsd:simpleContent&gt; &lt;xsd:extension base=&amp;quot;xsd:decimal&amp;quot;&gt; &lt;xsd:attribute name=&amp;quot;jm&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:attribute name=&amp;quot;dokładność&amp;quot; type=&amp;quot;xsd:decimal&amp;quot;/&gt; &lt;/xsd:extension&gt; &lt;/xsd:simpleContent&gt; &lt;/xsd:complexType&gt; &lt;xsd:complexType name=&amp;quot;MasaDoUniesieniaTyp&amp;quot;&gt; &lt;xsd: simpleContent &gt; &lt;xsd: restriction base=&amp;quot;MasaNiedokladnaTyp&amp;quot;&gt; &lt;xsd:minInclusive value=&amp;quot;0&amp;quot;/&gt; &lt;xsd:maxInclusive value=&amp;quot;50&amp;quot;/&gt; &lt;xsd:attribute name=&amp;quot;dokładność&amp;quot; use=&amp;quot;prohibited&amp;quot;/&gt; &lt;xsd:attribute name=&amp;quot;jm&amp;quot; fixed=&amp;quot;kg&amp;quot;/&gt; &lt;/xsd: restriction &gt; &lt;/xsd: simpleContent &gt; &lt;/xsd:complexType&gt; </li></ul>
    • 62. Ograniczanie zawartości złożonej <ul><li>&lt;xsd:complexType name=&amp;quot;BazowyTyp&amp;quot;&gt; &lt;xsd:sequence&gt; &lt;xsd:element name=&amp;quot;a&amp;quot; type=&amp;quot;xsd:string&amp;quot; minOccurs=&amp;quot;3&amp;quot; maxOccurs=&amp;quot;7&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;b&amp;quot; type=&amp;quot;xsd:string&amp;quot; minOccurs=&amp;quot;0&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;c&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;/xsd:sequence&gt; &lt;/xsd:complexType&gt; &lt;xsd:complexType name=&amp;quot;OgraniczonyTyp&amp;quot;&gt; &lt;xsd: complexContent &gt; &lt;xsd: restriction base=&amp;quot;BazowyTyp&amp;quot;&gt; &lt;xsd:sequence&gt; &lt;xsd:element name=&amp;quot;a&amp;quot; type=&amp;quot;xsd:string&amp;quot; minOccurs=&amp;quot;4&amp;quot; maxOccurs=&amp;quot;6&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;c&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;/xsd:sequence&gt; &lt;/xsd: restriction &gt; &lt;/xsd: complexContent &gt; &lt;/xsd:complexType&gt; </li></ul>
    • 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. Grupy wielokrotnego wykorzystania <ul><li>&lt;xsd: group name=&amp;quot;ImięNazwisko&amp;quot;&gt; &lt;xsd:sequence&gt; &lt;xsd:element name=&amp;quot;imie&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;nazwisko&amp;quot; type=&amp;quot;xsd:string&amp;quot;/&gt; &lt;/xsd:sequence&gt; &lt;/xsd: group &gt; &lt;xsd: attributeGroup name= &amp;quot;DaneUrzedowe&amp;quot;&gt; &lt;xsd:attribute name=&amp;quot;NIP&amp;quot; type=&amp;quot;NIPTyp&amp;quot;/&gt; &lt;xsd:attribute name=&amp;quot;PESEL&amp;quot; type=&amp;quot;PESELTyp&amp;quot;/&gt; &lt;/xsd: attributeGroup &gt; &lt;xsd:complexType name=&amp;quot;OsobaTyp&amp;quot;&gt; &lt;xsd:sequence&gt; &lt;xsd: group ref=&amp;quot;ImięNazwisko&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;obywatelstwo&amp;quot; type=&amp;quot;xsd:token&amp;quot;/&gt; &lt;/xsd:sequence&gt; &lt;xsd: attributeGroup ref= &amp;quot;DaneUrzedowe&amp;quot;/&gt; </li></ul><ul><li>&lt;/xsd:complexType&gt; </li></ul>
    • 65. Grupy zamienne <ul><li>&lt;xsd:element name=&amp;quot;katalog&amp;quot;&gt; &lt;xsd:complexType&gt; &lt;xsd:sequence&gt; &lt;xsd:element ref=&amp;quot;produkt&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot;/&gt; &lt;xsd:sequence&gt; &lt;xsd:complexType&gt; &lt;/xsd:element&gt; &lt;xsd:element name=&amp;quot;produkt&amp;quot; type=&amp;quot;ProduktTyp&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;komputer&amp;quot; type=&amp;quot;KomputerTyp&amp;quot; substitutionGroup =&amp;quot;produkt&amp;quot;/&gt; &lt;xsd:element name=&amp;quot;ubranie&amp;quot; type=&amp;quot;UbranieTyp&amp;quot; substitutionGroup =&amp;quot;produkt&amp;quot;/&gt; </li></ul>
    • 66. Grupy zamienne – wykorzystanie <ul><li>&lt;katalog&gt; &lt;produkt&gt;...&lt;/produkt&gt; &lt;komputer&gt;...&lt;/komputer&gt; &lt;ubranie&gt;...&lt;/ubranie&gt; &lt;produkt&gt;...&lt;/produkt&gt; &lt;/katalog&gt; </li></ul>
    • 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. Więzy integralności <ul><li>&lt;xsd:element name=&amp;quot;zamówienia-i-faktury&amp;quot; type=&amp;quot;ZamówieniaFakturyTyp&amp;quot;&gt; &lt;xsd: unique name=&amp;quot;fakturaId&amp;quot;&gt; &lt;xsd: selector xpath=&amp;quot;faktury/faktura&amp;quot;/&gt; &lt;xsd: field xpath=&amp;quot;@nr&amp;quot;/&gt; &lt;xsd: field xpath=&amp;quot;rok&amp;quot;/&gt; &lt;/xsd: unique &gt; &lt;xsd: keyref name=&amp;quot;zamówienieRef&amp;quot; refer =&amp;quot;zamówienieId&amp;quot;&gt; &lt;xsd: selector xpath=&amp;quot;faktury/faktura/do-zamówienia&amp;quot;/&gt; &lt;xsd: field xpath=&amp;quot;@nr&amp;quot;/&gt; &lt;/xsd: keyref &gt; &lt;xsd: key name=&amp;quot;zamówienieId&amp;quot;&gt; &lt;xsd: selector xpath=&amp;quot;zamówienia/zamówienie&amp;quot;/&gt; &lt;xsd: field xpath=&amp;quot;numer&amp;quot;/&gt; &lt;/xsd: key &gt; &lt;/xsd:element&gt; </li></ul>
    • 69. Tworzenie schematu XSD za pomocą .NET

    ×