XML SHEMA.rtf

(47 KB) Pobierz
XML SHEMA

XML SHEMA

 

opracowany przez W3C standard służący do definiowania struktury dokumentu XML. XML Schema uważane jest za następcę DTD, posiada bowiem znacznie większe możliwości.

XML Schema jest aplikacją XML, w odróżnieniu od DTD nie będącego częścią standardu XML. Dokumenty zawierające definicje XML Schema zapisuje się zwykle w plikach z rozszerzeniem .xsd (od XML Schema Definition).

XSD jest potężniejszym narzędziem niż DTD - zdefiniowano w nim kilkanaście podstawowych typów, których DTD w ogóle nie posiadał np.: xs:anyURI, xs:PositiveInteger, xs:date, możemy sami także nakładać na dowolne typy restrykcje(np.: zawężając ciągi znaków do długości 100 bajtów, ograniczając liczby xs:float do 100 etc.), XSD posiada także mechanizm wyrażeń regularnych.

Przykładowy schemat xml:

Napiszmy schemat XSD zawierający definicje takiego dokumentu:

<?xml version="1.0" encoding="ISO-8859-2"?>

 

<baza>

        <osoba>

                <imie>Łukasz</imie>

                <imie>Jerzy</imie>

                <imie>Izydor</imie>

 

                <nazwisko>Nowak</nazwisko>

                <data_ur>1950-03-07</data_ur>

                <miejsce_ur>Warszawa</miejsce_ur>

                <info>szlachcic</info>

 

        </osoba>

</baza>

Dołączmy najpierw schemat do naszego dokumentu. Robi się to poprzez modyfikację głównego znacznika - w naszym przypadku baza:

<baza xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xsi:noNamespaceSchemaLocation="baza.xsd">

Tworzymy więc plik o nazwie baza.xsd. Podobnie jak dla dokumentu XML w pierwszej linii wstawiamy:

<?xml version="1.0" encoding="ISO-8859-2"?>

Tak jak już było powiedziane wcześniej XSD jest w pełni strukturalny i bazuje także na znacznikach XML. Otwieramy więc główny znacznik naszego schematu:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

   [tu zamieścimy nasze definicje, musimy pamiętać aby zamknąć ten tag,

   najlepiej zrobić to od razu]

</xs:schema>

Zacznijmy od zdefiniowania naszego głównego elementu - <baza>:

<xs:element name="baza" type="baza-type"/>

Zadeklarowaliśmy więc element <baza>, który jest typu "baza-type". "Baza-type" wygląda następująco:

<xs:complexType name="baza-type">

        <xs:sequence>

                <xs:element name="osoba" type="osoba-type" maxOccurs="unbounded"/>

 

        </xs:sequence>

</xs:complexType>

"Baza-type" jest sekwencją nieograniczonej ilości wystąpień(unbounded) elementu <osoba> typu "osoba-type".
(o sekwencjach będzie mowa jeszcze dalej, w innej części kursu)

Element <osoba> deklarujemy następująco:

<xs:element name="osoba" type="osoba-type"/>

A typ "osoba-type" jako sekwencję elementów: <imie>, <nazwisko>, <data_ur>, <miejsce_ur>, <info> tak:

<xs:complexType name="osoba-type">

        <xs:sequence>

                <xs:element ref="imie" maxOccurs="unbounded"/>

                <xs:element ref="nazwisko"/>

 

                <xs:element ref="data_ur"/>

                <xs:element ref="miejsce_ur"/>

                <xs:element ref="info"/>

        </xs:sequence>

 

</xs:complexType>

Zamiast tak jak poprzednio pisać <xs:element name="info" type="xs:string"> napisałem <xs:element ref="info"/> - czyli umieściłem referencje do elemntu <info>, który jest zadeklarowany w innej części schematu XSD.

Teraz wystarczy zdefiniować elementy: <imie>, <nazwisko>, <data_ur>, <miejsce_ur>, <info>. Znaczniki te są już zwykłymi prostymi typami(nie zawierają innych elementów), definiujemy je wprost:

<xs:element name="data_ur" type="xs:date"/>

 

<xs:element name="info" type="xs:string"/>

<xs:element name="miejsce_ur" type="xs:string"/>

<xs:element name="nazwisko" type="xs:string"/>

 

<xs:element name="imie" type="xs:string"/>

Dla porządku przedstawiam pełny schemat naszego dokumentu XSD:

<?xml version="1.0" encoding="ISO-8859-2"?>

 

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

        <!-- deklaracja znaczników -->

        <xs:element name="baza" type="baza-type"/>

        <xs:element name="data_ur" type="xs:date"/>

 

        <xs:element name="info" type="xs:string"/>

        <xs:element name="miejsce_ur" type="xs:string"/>

        <xs:element name="nazwisko" type="xs:string"/>

 

        <xs:element name="imie" type="xs:string"/>

        <!-- definicje typów złożonych -->

        <xs:complexType name="baza-type">

                <xs:sequence>

 

                        <xs:element name="osoba" type="osoba-type" maxOccurs="unbounded"/>

                </xs:sequence>

        </xs:complexType>

 

        <xs:complexType name="osoba-type">

                <xs:sequence>

                        <xs:element ref="imie" maxOccurs="unbounded"/>

                        <xs:element ref="nazwisko"/>

 

                        <xs:element ref="data_ur"/>

                        <xs:element ref="miejsce_ur"/>

                        <xs:element ref="info"/>

                </xs:sequence>

 

        </xs:complexType>

</xs:schema>

 

 

Podstawowe typy

XSD w przeciwieństwie do DTD posiada mnóstwo podstawowych typów, używa się ich np. tak:

<xs:element name="data_ur" type="xs:date"/>

typy łańcuchowe:

typ

opis

xs:string

łańcuch znaków

xs:normalizedString

łańcuch znaków bez tabulacji, nowych linii

xs:token

łańcuch znaków bez tabulacji, nowych linii oraz pustych spacji

xs:language

język według skrótów ISO np.: pl lub PL

xs:anyURI

typ do przechowywania URI włącznie ze znakami?, &, ~

xs:hexBinary

binaria(lub zwykły tekst) zakodowane szesnastkowo

xs:base64Binary

binaria(lub tekst) zakodowane systemu base_64

typy zmiennoprzecinkowe:

typ

opis

xs:float

liczba zmiennoprzecinkowa 12.1212, 10E-12

xs:double

liczba zmiennoprzecinkowa podwójne precyzji

typ stałoprzecinkowy:

typ

opis

xs:decimal

liczba w zapisie dziesiętnym, np.: -1212.12,+.1212, 12.0

typy całkowite:

typ

opis

xs:integer

liczba całkowita, np.: -121212, +000121212

xs:positiveInteger

nieujemna liczba całkowita

xs:negativeInteger

ujemna liczba całkowita

xs:byte

bajt, liczba 8 bitowa

xs:short

krótka liczba całkowita, 16 bitowa

xs:int

liczba całkowita, 32 bitowa

xs:long

długa liczba całkowita, 64 bitowa

xs:boolean

wartość logiczna 1(true) lub 0(false)

typy czasu i daty:

typ

opis

xs:dateTime

wyświetlanie daty i czasu w formacie: YYYY-MM-DDThh:mm:ss
(po literze T podajemy czas) np.: 2003-07-03T23:12:00
Można także powyższą datę podać dla innej strefy jako np.:
2003-07-03T23:12:00 -02:00(czyli dwie godziny wcześniej)

xs:date

podanie samej daty jako YYYY-MM-DD

xs:time

podanie samej godziny jako hh:mm:ss

 

 

 

...
Zgłoś jeśli naruszono regulamin