APP i zbiór APP czyli planowanie przestrzenne w plikach GML. Część 1 – analiza i parsowanie plików XML/GML.

APP i zbiór APP – co to jest i skąd je wziąć.

Pliki APP (Akt Planowania Przestrzennego) to pliki GML zawierające dane z zakresu planowania przestrzennego, których obowiązek tworzenia powstał w związku z wprowadzeniem zmian do ustawy z dnia 27 marca 2003 r. o planowaniu i zagospodarowaniu przestrzennym w postaci rozdziału 5a.

Zbiór APP to wszystkie lub kilka plików APP z obszaru gminy, które znajdują się w jednym pliku GML.

W związku z obowiązkiem publikacji danych GML w postaci APP dla nowych aktów prawnych postanowiłem przyjrzeć się spójności wytworzonych już plików GML (APP) dla planowania przestrzennego dostępnym w dziennikach województw. Pliki GML zawarte są tam w załącznikach do opublikowanych uchwał rad gmin i miast, są ogólnie dostępne i jako opublikowany załącznik do aktu prawa miejscowego powinny być niezmienne.

Analiza nie dotyczy publikowanych i zmieniających się w czasie plików GML dostępnych na stronach niektórych producentów oprogramowania lub gmin ze względu na to. że nie zachowują one niezmienności danych w czasie oraz podstawowych zasad wersjonowania (zmiana elementów XML przy niezmienności jego wersji i identyfikatora) oraz są w części niepodpisane cyfrowo. Fakt tych zmian w części prawdopodobnie wynika z dostrzeżonych usterek w wytworzonych danych lub zmieniających się wytycznych ministerstwa.

Narzędzia do analizy danych XML/GML plików APP

Do masowego pobierania, przetwarzania i analiz danych użyłem oprogramowania opensource w postaci różnego rodzaju bibliotek Pythona zintegrowanych w arkuszu Jupyter Notebook w środowisku Anacondy. Przetwarzanie i analiza pomocnicza danych odbywała się w opensourcowej bazie NoSQL, zaś wizualizacja danych w oprogramowaniu Qgis.

W celu zrozumienia opisywanych zagadnień Czytelnik do analiz na poziomie pojedynczych plików może zastosować darmowe oprogramowanie Notepad++, który otwiera pliki XML wyświetlając je w sposób umożliwiający ich łatwiejsze zrozumienie.

W celu zwiększenia możliwości analiz plików XML za pomocą tego narzędzia należy doinstalować wtyczkę XML Tools dostępną w opcji Wtyczki > Zarządzaj Wtyczkami > XML Tools.

Za pomocą wtyczki XML Tools do Notepad ++ można przeprowadzić podstawowe analizy pliku XML takie jak parsowanie danych (sprawdzanie poprawności wewnętrznej pliku) lub jego walidację jeśli poprawnie zdefiniowany jest element schemalocation w nagłówku pliku XML wskazujący ścieżkę do schematu danych app na serwerze gov.pl.

Pobranie plików APP z dzienników województw.

W ramach pozyskania danych do analizy pobrałem w sposób automatyczny wszystkie dostępne w dziennikach województw pliki APP opublikowane w załącznikach do uchwał gmin i miast.

Ze względu na to, że brak jest określonego nazewnictwa dla plików GML APP przy publikacji danych w dzienniku, pobrałem pliki z rozszerzeniem XML i GML dla każdej z uchwał, która występowała w skorowidzu ze wskazaniem że dotyczy planowania przestrzennego.

W ten sposób pozyskałem wstępnie 5743 pliki z obszaru całego kraju, które stanowiły przedmiot dalszej analizy.

Kontrola struktury plików APP w GML/XML czyli parsowanie danych.

Pliki GML są plikami XML zawierającymi dodatkowo określone w specyfikacji GML znaczniki definiujące informacje geograficzne więc muszą spełniać wszystkie wymogi plików XML.

Parsowanie to sprawdzenie ogólnych warunków poprawnego utworzenia pliku XML czyli zgodność ze specyfikacją XML (istnienie tylu samych elementów otwierających co zamykających, zagnieżdzenia elementów, istnienie elementu głównego, kodowania…..). Więcej o tym można przeczytać tutaj

Prawidłowe sparsowanie jest niezbędne żeby plik XML mógł być czytany przez programy. Jest to jednocześnie najniższa możliwa kontrola poprawności zapisu struktury i poprawności pliku XML.

W wyniku analizy parsowania z pobranych plików wyodrębniłem z pobranych danych kilkadziesiąt plików o nieprawidłowej strukturze, które nie będą mogły być czytane przez programy przetwarzające dane XML w sposób bezpośredni ze względu na brak zgodności ze specyfikacją XML czyli błędy utworzenia pliku.

Do szczegółowej analizy wyodrębniłem automatycznie 36 plików nie parsujących się, które posiadały unikalne kody błędów z których niektóre opiszę poniżej.

Błędy w plikach APP – czyli dlaczego nie da się ich czytać prawidłowo.

Problem 1 – Błędne kodowanie znaków.

W nagłówku pliku XML znajduje się deklaracja kodowania znaków w postaci wskazania na UTF-8 jako zawartość pliku.

Nagłówek XML z kodowaniem

Umożliwia to oprogramowaniu czytanie polskich znaków zawartych w pliku o ile są zgodne z tą deklaracją. W części plików znajdowała się zawartość z użyciem kodowania niezgodnego z nagłówkiem XML. Efektem tego błędu jest zazwyczaj brak widoczności polskich znaków lub widoczność dodatkowych znaków w miejscach gdzie nie ma tekstu. Po otwarciu takiego pliku XML/GML w Notepad++ będzie to wyglądało podobnie jak poniżej:

Błędy kodowania polskich znaków
Problem 2 – Brak zastosowania encji dla XML – najczęściej znak &

W wartościach elementu XML nie mogą występować znaki, które w XML są elementami języka. Tak więc znaki <,>,& i inne należy w wartościach zamienić na tzw. encje. W przypadku znaku & często występującego w linkach do stron internetowych należy zamienić go na &amp; w tekście zawartym w XML.

Błąd ten sygnalizowany jest w Notepad++ z uruchomioną wtyczką XML Tools następująco:

Brak encji w XML - oczekiwano znaku średnika.
Problem 3 – Niepoprawnie sformatowane pliki.

Element otwierający znacznika XML nie ma elementu zamykającego lub jest on zagnieżdżony w nieprawidłowym porządku. Widok tego typu błędów w notepad++ wygląda następująco.

Nieprawidłowe zamknięcie elementów w XML - następujące tagi nie zostały zamknięte:
Brak tagu kończącego element w XML - Tag końcowy nie odpowiada tagowi początkowemu app:DokumentFormalny
Problem 4 – Dodanie elementów redakcyjnych do załącznika.

Podczas publikacji plików XML/GML do niektórych z nich dodano redakcyjne opisy tekstowe, które opisywały je jako załącznik. Spowodowało to zniszczenie struktury wewnętrznej pliku przez co nie da się go użyć w żadnym programie obsługującym XML/GML.

Przykładowy widok tego typu błędów:

Dodany nieprawidłowy element redakcyjny do XML
Problem 5 – Nieprawidłowo umieszczona deklaracja XML.

Deklaracja XML musi znajdować się w pierwszej linii XML, jeśli tak nie będzie część programów uzna, że nie ma do czynienia z XML i nie będzie go czytać. Widok tego typu błędów w Notepad++

Nieprawidłowa deklaracja XML
Problem 6 – Błędy programistyczne.

Błędy objawiające się wstawieniem kodu binarnego, kawałków kodu lub elementów nie będących częścią XML jako elementu XML.

Błędy kodowania XML
This XML file does not appear any style - błąd w XML
Problem 7 – Pliki ZIP jako załączniki APP GML.

Załączone pliki posiadają rozszerzenie pliku GML mimo, że w istocie są plikami ZIP. Pliki tego typu rozpoznajemy po otwarciu w Notepad++ przez litery PK na początku pliku binarnego.

Plik ZIP jako plik GML
Problem 8 – . Umieszczenie jako załącznika o rozszerzeniu GML pliku HTML z linkiem do dropboxa.

W tego typu plikach html zapisanych w plikach o rozszerzeniu GML znajdują się zewnętrzne biblioteki javascript o nieustalonym pochodzeniu więc przestrzegam przed wczytywaniem takich plików do przeglądarek internetowych ze względu na bezpieczeństwo systemów informatycznych. Należy wyodrębnić element serwujący dane zazwyczaj w postaci href=”link” i pobrać z tej ścieżki plik.

Dropbox jako plik GML w APP

Koniec części pierwszej.

Uwaga: Całość tego wpisu objęta jest prawem autorskim. Artykuł i jego zawartość może być publikowany i reprodukowany w dowolnym celu z wyłączeniem komercyjnych szkoleń pod warunkiem wskazania źródła strony (geoinformatyka.com.pl) z której pochodzi wraz z aktywnym linkiem do tego artykułu.