Zdarza się, że nie możemy zaimportować danych z pliku GML. Powodów tego problemu może być wiele. Żeby dowiedzieć się czegoś więcej, możemy użyć najmocniejszego rozwiązania, czyli odpalić walidator i sprawdzić taki plik. Jeśli będą błędy składni XML (ojca GML) to i tak nic z tego. W tym momencie warto spojrzeć na poziom niżej, tzn. warto sprawdzić czy podstawowe wymagania odnośnie formatu zostały spełnione, a dokładnie czy struktura elementów jest poprawna. Jeśli tak, to możemy przejść do kontroli na wyższym poziomie, czyli za pomocą walidatora sprawdzić poprawność danych, relacji, itd.
W tym artykule skupię się na zależnościach między elementami, które tworzą strukturę formatu GML.
Na pewno muszą zostać spełnione warunki:
Poprawna struktura:
<?xml version="1.0" encoding="UTF-8"?>
<FeatureCollection>
<featureMember>
</featureMember>
</FeatureCollection>
Warunek 1 i 2 zostały spełnione.
Przykład z naruszeniem warunku 1, czyli niepoprawnie zamknięty.
<?xml version="1.0" encoding="UTF-8"?>
<FeatureCollection<featureMember>
</featureMember>
</FeatureCollection>
Błąd polega na tym, że element ‘<FeatureCollection’ nie został poprawnie zapisany. Powinien być zapisany następująco '<FeatureCollection>'. Nie jest to częsty błąd, jednak musi zostać omówiony, ze względu na rygor związany z otwarciem i zamknięciem ostrych nawiasów.
Kolejny przykład to naruszenie warunku 2, czyli elementy nie są poprawnie zagnieżdżone.
<?xml version="1.0" encoding="UTF-8"?>
<FeatureCollection>
<featureMember>
</FeatureCollection>
</featureMember>
Przykład z niepoprawną strukturą, która na pierwszy rzut oka wygląda dobrze, jednak po analizie zamiast wartości pojawia się kolejny element, dla którego brakuje zamknięcia.
<?xml version="1.0" encoding="UTF-8"?>
<FeatureCollection>
<featureMember>
<EGB_Instytucja>
<nazwaPelna><template></nazwaPelna>
</EGB_Instytucja>
</featureMember>
</FeatureCollection>
Problem jest z elementem '<template>'. Brakuje dla niego zamknięcia. Składnia GML pozwala na zagnieżdżanie elementów, jednak kontekst wskazuje, że powinna być już wartość elementu nazwaPelna, a nie kolejny element.
Co z tym możemy zrobić, żeby składnia była zgodna ze standardem?
1. Możemy dodać tag zamykający element.
<?xml version="1.0" encoding="UTF-8"?>
<FeatureCollection>
<featureMember>
<EGB_Instytucja>
<nazwaPelna>
<template></template>
</nazwaPelna>
</EGB_Instytucja>
</featureMember>
</FeatureCollection>
2. Możemy usunąć nawiasy z template.
<?xml version="1.0" encoding="UTF-8"?>
<FeatureCollection>
<featureMember>
<EGB_Instytucja>
<nazwaPelna>template</nazwaPelna>
</EGB_Instytucja>
</featureMember>
</FeatureCollection>
3. Możemy zmienić nawiasy dla template używając odpowiedniego kodu. Dla nawiasu otwierającego '<' będzie to '<', a dla nawiasu zamykającego '>' będzie to '>'. W ten sposób nawiasy będą w nazwie pod postacią kodu, który zrozumiały będzie dla programu odczytującego taki plik.
<?xml version="1.0" encoding="UTF-8"?>
<FeatureCollection>
<featureMember>
<EGB_Instytucja>
<nazwaPelna><template></nazwaPelna>
</EGB_Instytucja>
</featureMember>
</FeatureCollection>
Tak można radzić sobie z problemami związanymi z domknięciami.
Notepad++ i wtyczka XML Tools
Do kontroli poprawności formatu GML dobry jest program Notepad++. Jest to darmowy edytor tekstów, do którego można doinstalowywać wtyczki. Ciekawą opcją jest Wtyczka XML Tools. Dzięki niej w Notepad++ możemy robić wiele rzeczy związanych z XML (czyli z GML również), np. możemy sprawdzić poprawność struktury.
Jak zainstalować wtyczkę Xml Tools w Notepad++?
Notepad zainstaluje wtyczkę i zrestartuje się.
01 Instalacja wtyczki XML Tools w programie Notepad++
02 Instalacja wtyczki XML Tools w programie Notepad++
Jak sprawdzić GML w Notepad++
Są dwa sposoby na sprawdzenie poprawności struktury GML w Notepad++:
Komunikat o błędzie składni GML w programie Notepad++
Opracował: Szymon Szczerba