|
Dokument XML, jako dokument poprawny strukturalnie powinien być wyposażony w formalny opis jego części składowych (nie jest to konieczne ale zalecane). Taki opis w dużej mierze pozwala na uzyskanie pełnej kontroli nad powstającymi w oparciu o niego, wypełnionym treścia egzemplarzami dokumenu (instancjami dokumentu). Klasyfikacja dokumentów pod względem typów, ułatwia też ich przetważanie.
Obecnie wzorce struktur, opisujące typy dokumentów możemy definiować na dwa sposoby: używając odziedziczonego po SGML'u mechanizmu określanego jako DTD (Document Type Definition) lub nowszego, rozszerzającego możliwości DTD zapisu XML Schema.
DTD:
Składnia:
<!ELEMENT nazwa (model_zawartości)> - wzorzec definicji elementu;
model_zawartości:
Oznaczenie | informacja |
* | 0 lub wiecej wystąpień |
+ | 1 lub wiecej wystąpień |
? | 0 lub 1 wystąpienie |
, | sekwencja |
| | alternatywa |
- oznaczenia stosowane w modelu zawartości
#PCDATA - zawartość tekstowa
EMPTY - barak dalszego rozbicia struktury i brak zawartości znakowej
ANY - zawartość dowolna
<!ATTLIST nazwa_elementu typ_atrybutu kwalifikator_wartości wartość_domyślna>
typ_atrybutu:
ID -unikatowa (w ramach dokumentu) wartość identyfikatora
IDREF - wskaźnik do innego elementu (identyfikowanego z wykorzystaniem atrybutu rypu ID)
NMTOKEN - ciąg dozwolonych znaków
NMTOKENS - ciag wartości NMTOKEN oddzielonych spacjami
(a | b | c) - jedna z podanych watości
kwalifikator_wartości:
#REQUIRED - wartość wymagana, musi zostać podana
#IMPLIED - wartość nie musi zostać podana
#FIXED - wartość stała
Przykład:
<!ELEMENT ARTYKUL (TYTUL, TRESC)>
<!ELEMENT TYTUL (EMPTY)>
<!ELEMENT TRESC (EMPTY)>
<!ELEMENT ARTYKUL (TYTUL, TRESC)>
<!ELEMENT TYTUL (#PCDATA)>
<!ELEMENT TRESC (#PCDATA)>
<!ELEMENT ARTYKUL (TYTUL, TRESC)>
<!ATTLIST ARTYKUL
dataPubl NMTOKEN #REQUIERD
autor ID #REQUIERD>
<!ELEMENT TYTUL (#PCDATA)>
<!ELEMENT TRESC (#PCDATA)>
<!KSIAZKA (AUTOR, TYTUL, TRESC, OPIS, OPINIE)>
<!AUTOR (IMIE, NAZWISKO, EMAIL, OPISDZIALALNOSCI)>
...
<!ELEMENT OPINIE (OPINIA | ODNOSNIK)*>
Związanie DTD z instancją dokumentu, wymaga poprzedzenia jej deklaracja DOCTYPE. Deklaracja taka zawiera wskazanie elementu głównego (root element), stanowiącego korzeń dzewa struktury oraz właściwą definicję struktury, lub odwołanie do zawierającej ja encji zewnętrznej:
<!DOCTYPE ARTYKUL PUBLIC "-" "">
XML Schema:
Do definicji typu dokumentu wykorzystuje się tu standardową składnie XML, a dla uniknięcia konfliktów nazw, składniki definicji należą do przestrzeni nazw XML Schema, wyróżnionej zywkle prefiksem xsd. Definicja dokumentu zawarta jest w elemencie głównym xsd:schema, zaś odpowiednikami deklaracji elementów i atrybutów z DTD są elementy xsd:element i xsd:attribute
xsd:element:
prosty (simple type):
Definiuje zbiory wartości atomowych (typy wbudowane: string, boolean, integer, float, dateTime (w postaci 2001-01-03T12:56)).
<xsd:element name="NAZWISKO"
type="xsd:string">
złożony (complex type):
Są to definicje modeli zawartości xsd:sequence (tworzy sekwencje wystąpień elementów), xsd:choice (alternatywa elementów), xsd:group (grupowanie elementów). Do okreslenia liczby wystąpień elementów używane są atrybuty minOccurs i maxOccurs, przyjmujące wartości całkowite oraz wartość unbound, oznaczając nieograniczona liczbę wystąpień. Kontrola użycia atrybutów realizowana jest przy pomocy atrybutu use o wartościach: requierd, optional oraz prohibited.
<xsd:schema>
<xsd:element name="ARTYKUL" type="modelArtykulu">
<xsd:complexType name="modelArtykulu">
<xsd:sequence>
<xsd:element ref="TYTUL"
minOccurs="1"
maxOccurs="1"/>
<xsd:element ref="TRESC"
minOccurs="1"
maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="dataPubl"
type="xsd:date"/>
<xsd:attribute name="autor"
type="xsd:string"/>
</xsd:complexType>
<xsd:element name="TYTUL"
type="xsd:string"/>
<xsd:slement name="TRESC"
type="xsd:string/">
</xsd:schema>
wlasne typy danych:
Możemy tworzyć własne typy danych na podstawie typów prostych, narzucając z góry pewne aspekty:
minInclusive, maxInclusive, minExlusive, maxExlusive - ograniczenie wartości liczbowych, włączając lub wyłączając wartości brzegowe
pattern - wzorzec wartości zgodny z podanym wyrażeniem regularnym
enumeration - ogranicza typ do wartości wyliczeniowych
list - listy wartości typu prostego
length, minLength, maxLength - wymagana, minimalna, maksymalna dlugość napisu
<xsd:simpleType name="prawdopodobienstwo">
<xsd:restriction base="xsd:float">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="1"/>
</xsd:restriction>
<xsd:simpleType>
<xsd:simpleType name="kodPocztowy">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{2}-\d{3}"/>
</xsd:restriction>
</xsd:simpleType>
Narzedzia:
XSV (XML Schema Validator)
Xerces
XML Spy
|