Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16...

26
1 Definiowanie typów dokumentów Część 2. Przestrzenie nazw, XML Schema

Transcript of Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16...

Page 1: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

1

Definiowanie typów dokumentówCzęść 2. Przestrzenie nazw, XML Schema

Page 2: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

2

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2

Globalne i lokalne deklaracjeelementów i atrybutów• Deklaracje lokalne:

<xsd:complexType name="OsobaTyp"><xsd:sequence><xsd:element name="imie" type="xsd:string"

minOccurs="1" maxOccurs="2"/><xsd:element name="nazwisko" type="xsd:string"/>

</xsd:sequence><xsd:attribute name="NIP" type="NIPTyp"

use="required"/></xsd:complexType>

Deklaracje elementów i atrybutów mogą być globalne lub lokalne. Deklaracje globalne występują na najwyŜszym poziomie w dokumencie schematu i mogą być wykorzystywane wielokrotnie (w wielu typach złoŜonych). Deklaracje lokalne występują wewnątrz definicji typu i nie mogą być uŜyte nigdzie poza miejscem swego wystąpienia.

Page 3: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

3

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 3

Globalne i lokalne deklaracjeelementów i atrybutów• Deklaracje globalne i odwołania do nich:

<xsd:element name="imie" type="xsd:string"/><xsd:element name="nazwisko" type="xsd:string"/><xsd:attribute name="NIP" type="NIPTyp"/>

<xsd:complexType name="OsobaTyp"><xsd:sequence><xsd:element ref="imie" minOccurs="1"

maxOccurs="2"/><xsd:element ref="nazwisko"/>

</xsd:sequence><xsd:attribute ref="NIP" use="required"/>

</xsd:complexType>

Do globalnych deklaracji elementów i atrybutów moŜna się odwoływać w definicjach typów złoŜonych. O tym, Ŝe mamy do czynienia z odwołaniem do deklaracji globalnej (a nie z deklaracją lokalną), świadczy atrybut ref .

W przypadku globalnych deklaracji elementów i atrybutów, ograniczenia liczebności (minOccurs , maxOccurs , use ) podaje się w odwołaniach do elementów i atrybutów. W przypadku deklaracji lokalnych, ograniczenia liczebności podaje się w miejscu deklaracji.

Page 4: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

4

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 4

Elementy czy atrybuty?

• Informacje modelowane zwykle w elementach:– zawartość (elementy semantyczne, np. nazwisko, nazwa leku, adres),

– struktura (np. rozdział, akapit, tytuł, lista),

– wyszukiwanie (np. termin do indeksu, glosariusza, a takŜe elementy dedykowane),

– odesłania (np. hiperlinki, noty, przypisy).

• Informacje modelowane zwykle w atrybutach:– metainformacje (np. jednostka miary, waluta, język, priorytet),

– identyfikatory wartości i odwołania do nich.

Zalety uŜywania atrybutów są następujące:

•Atrybuty mają bardziej zwięzłą składnię.[...]

•Atrybuty mogą być dodane do dokumentu, jeśli określimy ich wartości domyślne; elementy nie są dodawane (muszą wystąpić w dokumencie, aby zostały wstawione ich wartości domyślne).

Zalety stosowania elementów są następujące:

•Elementy są bardziej rozszerzalne, poniewaŜ moŜna do nich później dodać atrybuty, nie wpływając na działanie aplikacji przetwarzającej dokumenty. Jeśli na przykład dojdziemy do wniosku, Ŝe potrzebujemy przechowywać informację o tym, w jakiej walucie jest wyraŜona cena, moŜemy w deklaracji elementu cenazadeklarować atrybut waluta . Gdyby cena była atrybutem, nie byłoby to moŜliwe.

•Elementy mogą zawierać inne elementy. Jeśli na przykład chcemy zamieścić opis tekstowy zawierający znaczniki w języku XHTML, nie jest to moŜliwe, jeśli opis jest atrybutem.

•Elementy mogą się powtarzać. Być moŜe teraz element pojawia się raz, lecz w przyszłości moŜna rozszerzyć schemat tak, aby pojawiał się wielokrotnie. Jeśli na przykład w przyszłości zdecydujemy, Ŝe produkt moŜe mieć wiele kolorów, podelementkolor moŜe wystąpić wielokrotnie. Atrybut moŜe wystąpić tylko raz w danym elemencie.

(ciąg dalszy na następnej stronie)

Page 5: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

5

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 5

Elementy czy atrybuty?

• Zalety elementów:– mogą zawierać inne elementy i atrybuty,

– mogą się powtarzać,

– moŜna bezpiecznie rozszerzać ich model zawartości, np. dodając atrybuty,

– moŜna dokładnie sterować sposobem ich występowania (kolejnością,liczbą wystąpień, itp.)

• Zalety atrybutów:– są bardziej zwięzłe,

– mogą być automatycznie dodawane do elementów, jeśli mają wartości domyślne.

(ciąg dalszy z poprzedniej strony)

•Mamy większą kontrolę nad regułami występowania elementów. MoŜemy na przykład określić, Ŝe element produkt ma podelementnumer lub kodProduktu . Nie jest to moŜliwe, gdy uŜywa się atrybutów.

•Elementy mogą być uŜywane w grupach zamiennych.

•Elementy mogą mieć wartości nil .

•W odniesieniu do elementów moŜna wykorzystać mechanizm zastępowania typów, uŜywając w dokumentach typów wyprowadzonych zamiast typu bazowego.

•Kolejność elementów jest znacząca, zaś kolejność atrybutów nie jest. Zwykle jest to zaleta tylko wtedy, gdy zaleŜy nam na zachowaniu kolejności.

•Gdy wartości są długie, elementy są zwykle bardziej czytelne od atrybutów.

Jak widzimy, elementy mają znacznie więcej zalet niŜ atrybuty. Jednak czasami atrybuty teŜ są przydatne. Zwykle zaleca się zapisywać metadane w atrybutach, zaś dane w elementach. Przy pomocy atrybutów moŜna na przykład zapisywać jednostki, język lub zaleŜności czasowe wartości elementów.

(Priscilla Walmsley, Wszystko o XML Schema, WNT, 2008)

Page 6: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

6

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 6

Wartości domyślne i ustalone

<xsd:element name="ilość" type="xsd:positiveInteger"default="1"/>

<xsd:element name="cena" type="xsd:positiveInteger"fixed="5"/>

<xsd:attribute name="waluta" type="xsd:string"default="PLN"/>

<xsd:attribute name="VAT" type="xsd:string"fixed="22%"/>

<kwota waluta= "EUR" VAT="22%"> 20</kwota>

<kwota waluta= "EUR">20</kwota>

<kwota waluta= "PLN" VAT="22%"> 20</kwota>

<kwota>20</kwota>

<towar><ilo ść>3</ilo ść></towar><towar><ilo ść>3</ilo ść></towar>

<towar><cena>5</cena></towar><towar><cena/></towar>

Po przetworzeniuPrzed przetworzeniem

Wartość domyślna jest wartością, która zostanie automatycznie wstawiona w dokumencie w przypadku braku wartości. Wartość ustalona pełni podobną rolę, z tym dodatkowym ograniczeniem, Ŝe jeŜeli w dokumencie jest podana wartość, to musi ona być identyczna, jak wartość ustalona.

Wartości domyślne i ustalone są obsługiwane nieco inaczej w przypadku elementów, niŜ w przypadku atrybutów. W przypadku atrybutów, wartość domyślna jest wstawiana wtedy, gdy atrybut nie występuje w dokumencie. procesor schematów dodaje wówczas atrybut wraz z wartością domyślną lub ustaloną. Natomiast w przypadku elementów, wartość domyślna jest wstawiana wtedy, gdy element istnieje w dokumencie, ale jest pusty. W przypadku, gdy element nie istnieje, nie zostanie on wstawiony do dokumentu.

W praktyce wartości domyślnych i ustalonych uŜywa się najczęściej w odniesieniu do atrybutów. Wartości domyślne deklaruje się wtedy, gdy jedna z wartości atrybutu jest wyróŜniona lub występuje częściej niŜ inne np. atrybut rodzaj elementu samochód moŜe mieć wartość domyślną osobowy ). Wówczas w większości dokumentów atrybut moŜna po prostu pominąć.

Wartości ustalone słuŜą najczęściej do umieszczania w schemacie dodatkowych informacji konfiguracyjnych dla aplikacji. Skoro i tak atrybut nie moŜe mieć innej wartości niŜ podana w deklaracji, to w dokumentach nie umieszcza się go w ogóle, zaś wartość ustaloną podaną w schemacie traktuje się jako swego rodzaju zmienną konfiguracyjną.

Page 7: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

7

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 7

Przestrzenie nazw

• Problem:– ta sama nazwa oznacza dwa róŜne byty w róŜnych dokumentach,

– dokumenty te są powiązane (np. wspólnie przetwarzane, jeden zanurzony w drugim, itp.)

• Rozwiązanie: przestrzeń nazw (ang. namespace):– grupa nazw oddzielona (składniowo i semantycznie) od innych nazw.

• Status:– rekomendacja W3C z 14 stycznia 1999 r,

– XML 1.0 (w tym DTD) nie wspierają przestrzeni nazw,

– nowsze standardy (XML Schema, XSL, XLink, ...) wspierają przestrzenie nazw.

Przestrzenie nazw pełnią rolę kontenerów, w których umieszczamy nazwy uŜywane w XML-u. Nazwa typu elementu, taka jak na przykład table , moŜe mieć wiele znaczeń. W XHTML-u oznacza zupełnie co innego niŜ w języku MebleML. Przestrzenie nazw zapewniają kontekst elementom i atrybutom uŜywanym w dokumentach.

(Priscilla Walmsley, Wszystko o XML Schema, WNT, 2008)

Page 8: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

8

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 8

Nazwy przestrzeni nazw

• Identyfikatory URI, np:– http://www.w3.org/XSLT/Transform/1.0

– http://redpill.com.pl/osoby

– urn:sziolo:redpill

• Nazwy przestrzeni nazw:– nie muszą wskazywać konkretnych zasobów,

– pełnią funkcję unikatowych identyfikatorów,

– są porównywane jako napisy (istotna jest wielkość liter).

• Wykorzystanie w dokumentach XML:– odwzorowanie na kilkuznakowy prefiks,

– poprzedzanie nazw prefiksem.

Zadaniem nazwy przestrzeni nazw nie jest wskazanie lokalizacji, w której znajduje się jakiś dokument. Jest to jedynie unikatowa nazwa, być moŜe związana z konkretną osobą lub organizacją, podobnie jak nazwy pakietów w języku Java. Nie jest więc wymagane, aby nazwa przestrzeni nazw wskazywała jakikolwiek obiekt.

Prefiksy są wygodne w uŜyciu, poniewaŜ zwykle są krótsze niŜ nazwy przestrzeni nazw. Dzięki nim dokumenty są bardziej czytelne. Bardziej istotnym powodem stosowania prefiksów jest jednak fakt, Ŝe nazwy przestrzeni nazw mogą zawierać znaki, które nie są dozwolone w nazwach w XML-u.

(Priscilla Walmsley, Wszystko o XML Schema, WNT, 2008)

Page 9: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

9

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 9

UŜycie przestrzeni nazw w XML-u

<os:osobaxmlns:os="http://redpill.com.pl/osoby"xmlns:inst="http://redpill.com.pl/instytucje"xmlns:xhtml="http://www.w3.org/1999/xhtml"><os:imie>Jan</os:imie><os:nazwisko>Kowalski</os:nazwisko><os:NIP>123-456-78-90</os:NIP> <os:opis>To jest <xhtml:b>bardzo</xhtml:b> fajnyfacet!</os:opis><os:pracuje-w><inst:firma><inst:nazwa>Business Consulting</inst:nazwa><inst:NIP>987-654-32-10</inst:NIP>

</inst:firma></os:pracuje-w>

</os:osoba>

Przestrzeń nazw deklaruje się przy pomocy specjalnego atrybutu, którego nazwa zaczyna się od znaków xmlns .

Page 10: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

10

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 10

Domyślna przestrzeń nazw

<osobaxmlns="http://redpill.com.pl/osoby"xmlns:inst="http://redpill.com.pl/instytucje"xmlns:xhtml="http://www.w3.org/1999/xhtml"><imie>Jan</imie><nazwisko>Kowalski</nazwisko><NIP>123-456-78-90</NIP> <opis>To jest <xhtml:b>bardzo</xhtml:b> fajnyfacet!</opis><pracuje-w>

<inst:firma><inst:nazwa>Business

Consulting</inst:nazwa><inst:NIP>987-654-32-10</inst:NIP>

</inst:firma></pracuje-w>

</osoba>

Dokument moŜe między innymi zawierać deklarację domyślnej przestrzeni nazw (ang. default namespace), do której naleŜą nazwy typów elementów nie poprzedzone prefiksem. Domyślną przestrzeń nazw deklaruje się przy pomocy atrybutu xmlns bez dwukropka i bez prefiksu.

(Priscilla Walmsley, Wszystko o XML Schema, WNT, 2008)

Page 11: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

11

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 11

Widoczność przestrzeni nazw

<os:osoba xmlns:os="http://redpill.com.pl/osoby"><os:imie>Jan</os:imie><os:nazwisko>Kowalski</os:nazwisko><os:NIP>123-456-78-90</os:NIP><os:pracuje-w><os:firmaxmlns:os="http://redpill.com.pl/instytucje"><os:nazwa>Business Consulting</os:nazwa><os:NIP>987-654-32-10</os:NIP>

</os:firma></os:pracuje-w>

</os:osoba>

Deklaracje przestrzeni nazw mogą być przesłaniane. Jeśli deklaracja przestrzeni nazw pojawia się w zasięgu innej deklaracji dla tego samego prefiksu, to ją przesłania. Podobnie jeśli deklaracja domyślnej przestrzeni nazw pojawia się w zasięgu innej deklaracji domyślnej przestrzeni nazw, to ją przesłania.

(Priscilla Walmsley, Wszystko o XML Schema, WNT, 2008)

Page 12: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

12

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 12

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 przestrzeni nazw;

– niekwalifikowane – nie naleŜą do Ŝadnej przestrzeni nazw:• nie poprzedzone prefiksem, poza zasięgiem deklaracji domyślnej przestrzeni

nazw.

• Nazwy atrybutów:– poprzedzone prefiksem (globalne) – naleŜą do pewnej przestrzeni nazw,

– nie poprzedzone prefiksem – nie naleŜą do Ŝadnej przestrzeni nazw.

To, Ŝe nazwa elementu nie posiada prefiksu, niekoniecznie oznacza, Ŝe nie naleŜy ona do Ŝadnej przestrzeni nazw. MoŜe być przecieŜ w zasięgu deklaracji domyślnej przestrzeni nazw. Dlatego zamiast mówić o nazwach elementów z prefiksem lub bez, sensowniej jest mówić o nazwach kwalifikowanych i niekwalifikowanych.

W przypadku atrybutów jest prościej – poniewaŜ domyślna przestrzeń nazw nie „dosięga” atrybutów, więc nazwy z prefiksem są zawsze kwalifikowane (tzn. naleŜą do pewnej przestrzeni nazw), zaś nazwy bez prefiksu – niekwalifikowane.

Page 13: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

13

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 13

Nazwy elementów bez prefiksów

<osoba xmlns="http://redpill.com.pl/osoby"><imie>Jan</imie><nazwisko>Kowalski</nazwisko><NIP>123-456-78-90</NIP><pracuje-w><firma xmlns=""><nazwa>Business Consulting</nazwa><NIP>987-654-32-10</NIP>

</firma></pracuje-w>

</osoba>

Deklarację domyślnej przestrzeni nazw moŜna „skasować” przy pomocy deklaracji xmlns=”” . Nazwy bez prefiksu znajdujące się w zasięgu tej deklaracji nie naleŜą do Ŝadnej przestrzeni nazw.

Page 14: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

14

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 14

Nazwy atrybutów

<osoba xmlns="http://redpill.com.pl/osoby"xmlns:xlink="http://www.w3.org/1999/xlink">

<imie>Jan</imie><nazwisko>Kowalski</nazwisko><NIP>123-456-78-90</NIP> <pracuje-w xlink:type="simple"xlink:href="..." rodzaj="etat">BusinessConsulting</pracuje-w>

</osoba>

Nazwy atrybutów nie poprzedzone prefiksem nie naleŜą bezpośrednio do Ŝadnej przestrzeni nazw, poniewaŜ deklaracje domyślnych przestrzeni nazw ich nie obejmują.

Page 15: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

15

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 15

Atrybuty: ta sama nazwa czy nie?

• Poprawne:<x xmlns:n1="http://redpill.com.pl/n1"

xmlns:n2="http://redpill.com.pl/n2"><good n1:a="1" n2:a="2"/>

</x>

• Niepoprawne:<x xmlns:n1="http://redpill.com.pl/n1"

xmlns:n2="http://redpill.com.pl/n1"><bad n1:a="1" n2:a="2"/>

</x>

• Poprawne:<x xmlns:n1="http://redpill.com.pl/n1"

xmlns="http://redpill.com.pl/n1"><good n1:a="1" a="2"/>

</x>

Choć wiele przestrzeni nazw ma ogólnie przyjęte, tradycyjnie stosowane prefiksy (np. XML Schema –xsd ), to pamiętajmy, Ŝe postać prefiksu nie ma Ŝadnego znaczenia. Istotna jest jedynie nazwa przestrzeni nazw. Prefiks jest jedynie pośrednikiem. Dlatego właśnie drugi przykład jest niepoprawny –n1 i n2 , mimo Ŝe są róŜnymi prefiksami, oznaczają przecieŜ tą samą przestrzeń nazw. Zatem n1:a i n2:a to tak na prawdę ten sam atrybut.

Page 16: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

16

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 16

Przestrzenie nazw i schematy

• Schematzapisuje się przy pomocy jednego lub więcej dokumentów schematów.

• Schematdeklaruje nazwy naleŜące do zero lub więcej przestrzeni nazw.

• Dokument schematudeklaruje nazwy naleŜące do zero lub jednej przestrzeni nazw.

• Przestrzeń nazwzawiera nazwy zadeklarowane w zero lub więcej schematach.

osoba imię

nazwisko NIP

http://redpill.com.pl/osobyfirma

nazwaNIP

http://redpill.com.pl/instytucje

osoby.xsd

inst.xsd

import

Pliki z rozszerzeniem .xsd często nazywamy schematami. Nie jest to do końca poprawne, bo taki plik (dokument schematu) moŜe być tylko częścią większego schematu, uzupełnianą przez inne dokumenty schematów. KaŜdy z tych dokumentów schematów moŜe (choć nie musi) deklarować nazwy w pewnej przestrzeni nazw.

Page 17: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

17

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 17

Dokument schematu (1)

<xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns="http://redpill.com.pl/osoby"targetNamespace="http://redpill.com.pl/osoby">

<xsd:complexType name="OsobaTyp">...

</xsd:complexType>

<xsd:element name="osoba" type="OsobaTyp"/><xsd:element name="numer" type="xsd:integer"/>

...

</xsd:schema>

XML Schema takŜe ma swoją przestrzeń nazw. Musimy ją zadeklarować w dokumencie schematu. Zwykle odwzorowuje się ją na prefiks xsd , choć oczywiście moŜliwe jest jej odwzorowanie na dowolny inny prefiks, lub zadeklarowanie jako domyślnej przestrzeni nazw.

W atrybucie targetNamespace określa się tzw. docelową przestrzeń nazw dokumentu schematu, czyli przestrzeń nazw, do której naleŜą komponenty (tzn. elementy, atrybuty i typy) zadeklarowane i zdefiniowane w tym dokumencie schematu. Brak tego atrybutu oznacza, Ŝe zadeklarowane i zdefiniowane komponenty nie naleŜą do Ŝadnej przestrzeni nazw.

W tym przykładzie przestrzeń nazw XML Schema jest odwzorowana na prefiks xsd , natomiast docelowa przestrzeń nazw dokumentu schematu jest domyślną przestrzenią nazw.

Page 18: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

18

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 18

Dokument schematu (2)

<schemaxmlns="http://www.w3.org/2001/XMLSchema"xmlns:os="http://redpill.com.pl/osoby"targetNamespace="http://redpill.com.pl/osoby">

<complexType name="OsobaTyp">...

</complexType>

<element name="osoba" type="os:OsobaTyp"/><element name="numer" type="integer"/>

...

</schema>

W tym przykładzie przestrzeń nazw XML Schema jest domyślną przestrzenią nazw, natomiast docelowa przestrzeń nazw dokumentu schematu jestodwzorowana na prefiks os . ZauwaŜmy, Ŝe w deklaracjach elementów i atrybutów, w wartości atrybutu name, nie uŜywamy prefiksu. Deklarowane elementy i atrybuty i tak automatycznie naleŜą do docelowej przestrzeni nazw dokumentu schematu.

Page 19: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

19

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 19

Łączenie dokumentów schematów

• Schematzapisuje 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 predefiniowanych (skonfigurowanych) lokalizacjach,

– lokalizacje dokumentów schematów są przekazywane jako parametry wiersza poleceń.

Rekomendacja XML Schema oferuje trzy metody łączenia dokumentów schematów (include , import i redefine ), lecz nie wymusza ich stosowania. Dopuszczalne jest więc określanie, które dokumenty schematów naleŜy połączyć i gdzie je znaleźć, takŜe dowolnymi innymi technikami.

Page 20: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

20

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 20

include

• Dołączanie dokumentu schematu do docelowej przestrzeni nazw głównego dokumentu schematu.<xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns="http://redpill.com.pl/osoby"targetNamespace="http://redpill.com.pl/osoby"><xsd:include schemaLocation="inst.xsd"/>...

</xsd:schema>

• Dołączany dokument musi:– mieć taką samą docelową

przestrzeń nazw jakdokument główny, lub

– nie mieć docelowejprzestrzeni nazw.

http://redpill.com.pl/osoby

osobaimięnazwiskoNIP

osoby.xsd

firmanazwaREGON

inst.xsd

Instrukcji include uŜywa się, aby dołączyć (ang. include) do dokumentu schematu inne dokumenty schematów mające tę samą docelową przestrzeń nazw. Dzięki temu jest moŜliwa modularyzacja dokumentów schematów.

Gdy dołączamy dokument schematu, musi być spełniony jeden z warunków:

•oba dokumenty schematów mają tę samą docelową przestrzeń nazw,

•oba dokumenty schematów nie mają docelowej przestrzeni nazw,

•dokument schematu, do którego dołączamy, ma docelową przestrzeń nazw, zaś dołączany dokument schematu nie ma docelowej przestrzeni nazw.

W trzecim przypadku wszystkie komponenty dołączanego dokumentu schematu przechodzą do przestrzeni nazw dokumentu schematu, do którego są dołączane. Komponenty te nazywamy czasami kameleonami (ang. chameleon components), poniewaŜ ich przestrzeń nazw zmienia się w zaleŜności od tego, do którego dokumentu schematu są dołączane.

(Priscilla Walmsley, Wszystko o XML Schema, WNT, 2008)

Page 21: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

21

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 21

redefine

• Dołączanie dokumentu schematu do docelowej przestrzeni nazw głównego dokumentu schematu z moŜliwością przedefiniowania:– typów prostych i złoŜonych,

– nazwanych grup modeli,

– grup atrybutów.

<xsd:redefine schemaLocation="inst.xsd"/>

http://redpill.com.pl/osoby

osobaimięnazwiskoNIPNIPTyp

osoby.xsd

firmanazwaREGONNIPTyp

inst.xsd

Instrukcja redefine jest podobna do include , lecz daje dodatkową moŜliwość określenia nowych definicji niektórych lub wszystkich komponentów dokumentu schematu, który przedefiniowujemy.

(Priscilla Walmsley, Wszystko o XML Schema, WNT, 2008)

Page 22: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

22

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 22

import

• Odwołanie do komponentów w innej przestrzeni nazw.<xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns="http://redpill.com.pl/osoby"xmlns:inst="http://redpill.com.pl/instytucje" targetNamespace="http://redpill.com.pl/osoby">

<xsd:import schemaLocation="inst.xsd" namespace="http://redpill.com.pl/instytucje"/>

...</xsd:schema>

http://redpill.com.pl/osoby

osobaimięnazwiskoNIP

osoby.xsd

firmanazwaNIP

inst.xsd

http://redpill.com.pl/instytucje

Importowania (ang. import) uŜywamy, aby powiedzieć procesorowi, Ŝe będziemy odwoływać się do komponentów naleŜących do innej przestrzeni nazw. Jeśli na przykład w naszej definicji typu złoŜonego chcemy wykorzystać atrybut z innej przestrzeni nazw, lub wyprowadzić własny typ z typu naleŜącego do innej przestrzeni nazw, musimy tę przestrzeń nazw importować.

Importowanie róŜni się od dołączania w dwóch waŜnych aspektach. Po pierwsze, dołączanie ma miejsce wyłącznie w ramach jednej przestrzeni nazw, zaś importowanie działa w poprzek przestrzeni nazw. Druga, bardziej subtelna róŜnica, dotyczy przeznaczenia obu konstrukcji. Zadaniem dołączania jest „wciągnięcie” innego dokumentu schematu, zaś celem importowania jest zaznaczenie zaleŜności od innej przestrzeni nazw, niekoniecznie od innego dokumentu schematu. Importowanie pozwala określić lokalizację dokumentu schematu tej przestrzeni nazw, lecz procesor nie musi jej interpretować.

(Priscilla Walmsley, Wszystko o XML Schema, WNT, 2008)

Page 23: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

23

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 23

Egzemplarz

• Przestrzeń nazw egzemplarzy XML Schema:http://www.w3.org/2001/XMLSchema-instancezawiera atrybuty:– nil ,

– type ,

– schemaLocation ,

– noNamespaceSchemaLocation .

Przez egzemplarz (ang. instance) rozumiemy pojedynczy dokument XML, którego poprawność względem schematu moŜemy weryfikować.

Przestrzeń nazw egzemplarzy XML Schema jest osobą przestrzenią nazw (odrębną od przestrzeni nazw XML Schema), do której naleŜą cztery atrybuty związane ze schematami, które umieszcza się w egzemplarzach.

Page 24: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

24

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 24

schemaLocation

<?xml version="1.0"?><osobaxmlns="http://redpill.com.pl/osoby"xmlns:inst="http://redpill.com.pl/instytucje"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://redpill.com.pl/osoby

osoby.xsdhttp://redpill.com.pl/instytucjeinst.xsd">

<imie>Jan</imie><nazwisko>Kowalski</nazwisko><pracuje-w><inst:firma><inst:nazwa>Business Consulting</inst:nazwa><inst:NIP>987-654-32-10</inst:NIP>

</inst:firma></pracuje-w>

</osoba>

Przy pomocy atrybutu xsi:schemaLocation moŜna określić listę nazw przestrzeni nazw i odpowiadających im lokalizacji dokumentów schematów.

Page 25: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

25

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 25

noNamespaceSchemaLocation

<?xml version="1.0"?><osobaxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="osoby.xsd">

<imie>Jan</imie><nazwisko>Kowalski</nazwisko>

</osoba>

Przy pomocy atrybutu xsi:noNamespaceSchemaLocation moŜna określić lokalizację dokumentu schematu, który nie ma docelowej przestrzeni nazw. Wartością tego atrybutu nie jest lista identyfikatorów, jak w przypadku atrybutu xsi:schemaLocation , lecz tylko jedna lokalizacja.

Page 26: Cz ęść 2. Przestrzenie nazw, XML Schemaczarnik/zajecia/xml08/W03_Schema2.pdf · 2 2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 2 Globalne

26

2008-10-16 Definiowanie typów dokumentów – część 2: Przestrzenie nazw, XML Schema 26

Wartości puste w egzemplarzach

• Sposoby oznaczenia braku wartości:– brak elementu/atrybutu,

– element/atrybut występuje, ale jest pusty,– element/atrybut występuje i zawiera specjalną wartość, np. N/A ,

– element ma wartość nil .

<?xml version="1.0"?><osobaxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><imie>Jan</imie><drugie-imie xsi:nil="true"/><nazwisko>Kowalski</nazwisko>

</osoba>

• Dopuszczenie wartości nil w deklaracji elementu:<xsd:element name="drugie-imie" type="xsd:string"

nillable="true"/>

Jak oznaczyć w dokumencie XML brak pewnej wartości? MoŜemy stosować róŜne sposoby, w zaleŜności od przyczyny braku wartości. Na przykład jeśli wartość nie istnieje (np. osoba nie ma drugiego imienia), moŜemy pomijać element. Jeśli wartość istnieje, lecz jest pusta, moŜemy uŜywać elementu o pustej zawartości. Jeśli zaś wartość nie ma zastosowania w danej sytuacji (np. parasol nie ma rozmiaru), moŜemy uŜywać specjalnej wartości N/A . To tylko przykłady konwencji, jakie moŜna stosować – wybór sposobu oznaczania braku wartości zawsze naleŜy do nas – XML Schema w Ŝaden sposób tego nie narzuca.

W XML Schema jest dostępny jeszcze jeden bardzo ciekawy sposób oznaczenia braku wartości – wartość nil . Nadajemy ją elementowi, umieszczając w nim atrybut xsi:nil o wartości true . Dzięki temu jawnie oznaczamy, Ŝe element nie ma wartości. Jeśli element ma wartość nil , to nie moŜe mieć Ŝadnej zawartości, nawet jeśli zgodnie ze schematem zawartość jest wymagana.

Wartości nil nie moŜna przypisać do atrybutu.

Aby w danym elemencie moŜna było uŜywać wartości nil , trzeba zezwolić na to w deklaracji tego elementu w schemacie. SłuŜy do tego atrybutnillable .