XML, XSD, GML – jak się w tym wszystkim odnaleźć ? – część II

XSD jest to w skrócie i dużym uproszczeniu plik zawierający schemat danych służący sprawdzeniu czy plik XML z danymi zawiera strukturę i typ danych jaką powinien mieć. Na stronie GUGiK opublikowano w formie min. XSD załączniki do niektórych rozporządzeń mówiące o wymaganej strukturze plików.

Jak plik XSD czytać ? Można oczywiście wprost otwierając go za pomocą notatnika czy dowolnego tekstowego edytora. Proponuję jednak na razie zrozumieć zasadę działania używając programu do wizualizacji zawartości XSD. Dużo szybciej sprawa stanie się jasna, a unikniemy przynajmniej na początku wgłębiania się w składnię elementów XSD.

Najprościej uczyć się na przykładach z życia, od tego więc zacznijmy.

Czego będziemy używać ?
Załącznika do rozporządzenia Rady Ministrów z dnia 17 stycznia 2013 r. w sprawie zintegrowanego systemu informacji o nieruchomościach czyli schematu do XML za pomocą którego następuje zawiadomienie o zmianach danych dokonanych w ewidencji gruntów i budynków adresowane do sądu rejonowego prowadzącego księgi wieczyste.
Schemat w wersji elektronicznej można znaleźć tutaj.

Program:
XSD diagram – program pozwalający wizualizować zawartość schematów – jest to bardzo prosty program w wersji deweloperskiej, ale do nauki najzupełniej wystarczy. Nie wymaga instalowania, a licencje pozwalają na użycie go w celach komercyjnych. Możesz go pobrać tutaj.

1. Rozpakowujemy i otwieramy program XSD Diagram i wczytujemy schemat zsin_1013.xsd

2. Z pola po prawej strony u góry przeciągamy pole zawiadomienie i za pomocą plusów rozwijamy maksymalnie wszystkie pola – widok całości schematu w pliku jpg dostępny jest tutaj.

Będziemy analizować część schematu jak na obrazku poniżej:widok schematu danych zsin

Ze schematu XSD widocznym w diagramie wynika, że głównym elementem pierwszym z lewej obejmującym wszystkie inne elementy jest zawiadomienie. Plik XML zawierać więc będzie znacznik główny jakim jest zawiadomienie.

<zawiadomienie>
……
</zawiadomienie>

Pierwszym elementem odchodzącym od zawiadomienia na samej górze schematu jest tytul.

<zawiadomienie>
<tytul></tytul>
…..
</zawiadomienie>

Następny element to nadawca – w którym znajdują się kolejne elementy takie jak nazwa, siedziba, skrzynka_podawcza, telefon – zwróćcie uwagę na to że znacznik nadawca obejmuje wszystkie znaczniki podrzędne od niego odchodzące

<zawiadomienie>
<tytul></tytul>
<nadawca>
<nazwa></nazwa>
<siedziba></siedziba>
<skrzynka_podawcza></skrzynka_podawcza>
<telefon></telefon>
</nadawca>
……
</zawiadomienie>

Następnie za elementem nadawca znajduje się element adresat

<zawiadomienie>
<tytul></tytul>
<nadawca>
<nazwa></nazwa>
<siedziba></siedziba>
<skrzynka_podawcza></skrzynka_podawcza>
<telefon></telefon>
</nadawca>
<adresat>
<sad_rejonowy></sad_rejonowy>
<siedziba_sadu></siedziba_sadu>
<kod_wydzialu></kod_wydzialu>
<numer_wydzialu></numer_wydzialu>
<nazwa_wydzialu></nazwa_wydzialu>
</adresat>
……
</zawiadomienie>

Myślę ze sposób tworzenia struktury XML na podstawie takiego schematu jest już mniej więcej jasny.

Kilka objaśnień do schematu wyświetlonego przez program xsd diagram.

widok relacji danych w schemacie xsd w programie xsd diagram
– linią przerywaną obrysowane są elementy, które mogą lecz nie muszą występować
– linią ciągłą obrysowane są elementy wymagane
– obiekty, które mogą występować wielokrotnie pokazane są jako nałożone na siebie – opis na dole 0..oo – oznacza że w strukturze może być wiele takich obiektów lub żaden. Np. wiele dokumentów może stanowić podstawę zmiany, jeśli jest 1..oo oznacza to że musi występować co najmniej jeden element do ich nieskończonej ilości.
– tak samo traktowane są relacje czyli obiekty wskazujące na połączenie z innym obiektem np. w adresie działki może być wiązanie do wielu ulic i id_teryt lub ponieważ jest to linia przerywana może nie być ich wcale.

Mamy strukturę, ale co z wartościami ? Popatrzmy na XSD Diagram i nasz schemat, po prawej stronie ekranu – w zakładce element znajduje się pole type. Informuje nas ono jaki typ danych jest oczekiwany przez plik XSD. Definicja tych danych dotyczy jednak tylko tych obiektów, które są na wykresie maksymalnie z prawej strony, czyli tych które nie posiadają potomków.

widok pola type w xsd diagram

I tak klikając pole tytul wyświetla się typ XMLSchema:String – oznaczający tekst, zaś pole powierzchnia budynku to XMLSchema:integer czyli liczba całkowita.

Wykaz najczęściej używanych typów danych :

decimal, liczby zmiennoprzecinkowe – 999.50,+999.45,-999.13,0,14
integer, liczby stałe 0,9,123,-12
long, liczby stałe powyżej 32 tyś
boolean – prawda/fałsz – true , false
date – data
string – wartość tekstowa

Domyślnie stworzony początek xml na podstawie xsd wyglądałby z danymi tak :

<zawiadomienie>
<tytul>wartość tekstowa</tytul>
<nadawca>
<nazwa>wartość tekstowa</nazwa>
<siedziba>wartość tekstowa</siedziba>
<skrzynka_podawcza>wartość tekstowa</skrzynka_podawcza>
<telefon>wartość tekstowa</telefon>
</nadawca>
<adresat>
<sad_rejonowy>wartość tekstowa</sad_rejonowy>
<siedziba_sadu>wartość tekstowa</siedziba_sadu>
<kod_wydzialu>wartość tekstowa</kod_wydzialu>
</adresat>
……
<powierzchnia>123</powierzchnia>
……
</zawiadomienie>

Ćwiczenie :
Spróbuj na podstawie xsd zbudować cały plik xml, który będzie zgodny z podanym wcześniej XSD. W następnym odcinku spróbujemy go zwalidować, czyli sprawdzić jego poprawność z plikiem XSD, oraz powiem nieco więcej o elementach języka XSD.

Zobacz także:

Część I – pliki XML

Część II – schematy XSD

Część III – walidacja XML

Część IV – BDOT500 i GML