Elementy tworzenia schematów (XML Schema)


Zad 0

Zapoznaj się, jeśli to konieczne, z deklaracją schematów na w3schools

Zad 1

Znajdź błędy w podanym schemacie dla pliku xml który jest poniżej: Skorzystaj w tym celu z validatora: xmllint --schema plik.xsd plik.xml (Zwróć uwagę, że trzeba wywołać xmllint z inną opcją niż przy walidacji DTD)

 
plik.xsd:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="adres">
  
    <xsd:sequence>
      <xsd:element name="ulica" type="xsd:"/>
      <xsd:element name="miejscowosc" type="xsd:string"/>
      <xsd:element name="kod" type="xsd:string" minOccurs="0"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>



plik xml:

<adres xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="plik.xsd"> <ulica>Krotka 1</ulica> <miejscowosc>Gdansk</miejscowosc> </adres>

W poniższych zadaniach będziesz definiować
odrębne krótkie schematy, których nie można
zwalidować, gdyż są oderwane od całości dokumentu.
Dlatego zgłoś rozwiązanie, abym mógł sprawdzić czy jest ok.

Zad 2

dla fragmentu DTD napisz odpowiadający mu fragment schematu:

a) <!ELEMENT nazwa (#PCDATA)> 

b1) <!ELEMENT Adres (Ulica, miasto, kod)> 
b2) <!ATTLIST Adres domowy_lub_nie CDATA #IMPLIED>

Załóż że prefixem jest xsd. Wskazówki: Początek a) wygląda tak: < xsd:element name= ...
w b1) zdefiniuj typ złożony: < xsd:complexType name = "Adres"> ...
w b2) zacznij tak: < xsd:attribute name = ...

Zad 3 (powtarzalność: atrybuty minOccurs, maxOccurs)


dla fragmentu DTD napisz deklaracje schematu:

<!ELEMENT Właściciel (Imie, Zawód+, Adres?, Telefon*)>

Załóż że prefixem jest xsd, zobacz przykłady na w3schools

Zad 4

Napisz atrybut w Schema o nazwie liczba, typie całkowitym, który jest obowiązkowy (required) (użyj atrybutu "use").

Zad 5 (składacze: sequence, all, choice )

Zapisz następujące elementy w Schema:

a) <!ELEMENT Adres (ulica, miasto,(stan|województwo),kod)>

Wsk. użyj elementu <xsd:choice> ... </xsd:choice> zagnieżdżonego w elemencie <xsd:sequence> ... </xsd:sequence> możesz założyć, że elementy ulica, miasto stan i województwo są typu string a kod typu integer,
b) za pomocą elmentu <xsd:all> zadeklaruj w Schema

<!ELEMENT Book (Title, Author, Type, Published, Rating ?, Notes?)> 

Zad 6 (restrykcje)

Dla elementu

<nr_dowodu> ANB783456 </nr_dowodu>

napisz odopowiadający mu schemat (użyj restrykcji oraz "facet" o nazwie pattern, i odpowiednie wyrażenie regularne. Przyjmij że prefix jest postaci xsd) Tu są przykłady restrykcji

oraz wzorców (patterns) (ten link będzie działał później). W tym celu dokończ schemat:

< xsd:element name ="nr_dowodu" >
< xsd:simpleType>
...
</ xsd:simpleType> 
</xsd:element> 

Zad 7

(tworzenie własnych typów prostych za pomocą restrykcji) Napisz typ prosty o nazwie kody którego treścią może być kod programu napisany w jakimś języku programowania (użyj restrykcji whiteSpace z opcją preserved , przyjmij że prefix jest postaci xsd) Schemat będzie zawarty w:

<xsd:simpleType name= ...>
...
</xsd:simpleType>

Zad 8

Napisz typ prosty o nazwie jezyki który jest typem wyliczeniowym o wartości będącej jedną z nazw następujących języków programowania: C, C++, Java, pyton, ruby (użyj restrykcji enumeration , przyjmij że prefix jest postaci xsd)

Zad 9

Wzorując się na przykładzie pod tytułem Using Named Types napisz schemat dla dokumentu xml opisującego wyświetlenie komendy ls -l. Przyjmij że plików może być tylko 1000, wielkość jest wyświetlana w bajtach, (typ byte) oraz data utworzenia ma format YY-MM-DD, prawa dostępu potraktuj jako łańcuch który ma dokładnie 10 znaków (restrykcje: mainLength i maxLength). plik xml znajduje się tutaj schemat powinien być zawarty w elemencie

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

Uwaga: zobacz, że schemat można napisać na 3 sposoby.
Dividing Schema I dla większych plików proszę stosować metodę typów nazwanych