10 Kubik GML w wolnym oprogramowaniu

background image

GML w wolnym oprogramowaniu

Tomasz Kubik

Politechnika Wrocławska

Warszawa, 12 kwietnia 2012

background image

T.Kubik: GML w wolnym oprogramowani

2/32

Plan prezentacji

• Narz

ę

dzia do transformacji UML/XMI do

XSD

• Programowe przetwarzanie dokumentów

XSD/XML

• Biblioteki i narz

ę

dzia wspieraj

ą

ce

XSD/XML/GML

• Przykład: WFS (GML) + PostGIS

background image

T.Kubik: GML w wolnym oprogramowani

3/32

Transformacja UML-XSD

background image

T.Kubik: GML w wolnym oprogramowani

4/32

HollowWorld

Szablon UML, w którym uwgl

ę

dniono standardy zwi

ą

zane z geoinformacj

ą

– Główne komponenty ISO 19100 pochodz

ą

z ISO/TC 211 "Harmonized Model"

(http://www.isotc211.org/hmmg/HTML/root.html), rozszerzone o UML-ow

ą

reprezentacj

ą

komponentów GML (z ISO 19136, których nie ma w modelu

zharmonizowanym) oraz kilka drobnych rozszerze

ń

modelu Coverages (wg

OGC 06-188r1), wspiera komponenty SWE

Umo

ż

liwia definiowanie własnych szablonów oraz wspierane formaty

– EAP (projektu Enterprise Architect)
– XMI 1.1 z rozszerzeniami ED (import pakietów do modeli EA) + XML plik dla

profilu aplikacyjnego GML (do konfiguracji EA)

– XMI 1.0 – bez diagramów (do importu pakietów do innych narz

ę

dzi UML)

Posiada profil UML dla EA zawieraj

ą

cy standardowe stereotypy oraz

otagowane warto

ś

ci z SO 19136

Mo

ż

liwa weryfikacja zgodno

ś

ci z profilem UML ISO 19136 w

ś

rodowisku

FullMoon
(
https://www.seegrid.csiro.au/wiki/bin/view/AppSchemas/FullMoon)

Wi

ę

cej informacji o szablonie schematu aplikacyjnego GML:

– https://www.seegrid.csiro.au/wiki/AppSchemas/HollowWorld

Ź

ródła do pobrania:

– https://www.seegrid.csiro.au/subversion/HollowWorld/trunk/

background image

T.Kubik: GML w wolnym oprogramowani

5/32

ShapeChange

Wymaga/wspiera profil UML

– Schemat aplikacji powinien by

ć

zgodny z ISO 19109:2005, oraz GML 3.2 (ISO

19136) Annex E, GML 3.3 oraz ISO/TS 19139.

– Obsługuje zdefiniowane w specyfikacji UML oraz standardach ISO serii 19100

(ISO/TS 19103:2005, ISO 19109:2005 oraz GML 3.2/ISO 19136:2007).

Format wej

ś

cia

– Pliki projektów Enterprise Architect, dokumenty XMI 1.0, GSIP Microsoft Access

Database

Format wyj

ś

cia (XML Schema)

– GML 3.2 Encoding Rule, GML 3.3 Encoding Rule, ISO/TS 19139 Encoding Rule
– Wspiera generowanie reguł schematrnu z ogranicze

ń

OCL

– SWE Common Data Model 2.0 Encoding Rule (w przygotowaniu)
– Inne: GSIP, INSPIRE, CityGML ADEs, ISO 19115 metadata profiles, OKSTRA

Uruchamiany z linii komend:

http://shapechange.net/

java -jar ShapeChange-2.0.0-SNAPSHOT.jar
-Dfile.encoding=UTF-8 -c http://shapechange.net/resources/test/testXMI.xml

background image

T.Kubik: GML w wolnym oprogramowani

6/32

UML/INTERLIS-Editor oraz
INTERLIS-compiler

Eksport diagramów (JPEG, WMF, SVG), import modeli (w tym XMI)

GUI dla wi

ę

kszo

ś

ci elementów ze składni

ą

INTERLIS

Odczyt/zapis w składni INTERLIS 2

– (bie

żą

ca wersja to 2.3, standard szwajcarski SN612031)

Odczyt w składni INTERLIS 1

– Standard szwajcarski SN612030

Wieloj

ę

zykowy interfejs (de,en,fr)

Wbudowany weryfikator modelu

Zapis schematów GML 3.2

Zapis katalogów cech w HTML i XML

API do budowania rozszerze

ń

(Java, LGPL)

http://www.umleditor.org/

background image

T.Kubik: GML w wolnym oprogramowani

7/32

Schematy i pliki GML

• Schemat GML

zapisany jako XSD

• Dane GML zapisane

jako XML

• Model danych

wewn

ą

trz aplikacji

background image

T.Kubik: GML w wolnym oprogramowani

8/32

Metody programowego przetwarzania
dokumentów XML

DOM – Document Object Model

– Ładowanie do pami

ę

ci

– Du

ż

e koszty (czas i zasoby)

– Pełny dost

ę

p (dost

ę

p do całego drzewa)

– Odczyt/zapis

SAX – Simple API for XML

– Przetwarzanie wsadowe
– Du

ż

a wydajno

ść

(czas i zasoby)

– Sekwencyjno

ść

, selektywno

ść

(dost

ę

p do wybranych elementów)

– Tylko odczyt

XML data binding wi

ą

zanie XML-a

– Reprezentowanie danych zawartych w dokumentach XML jako obiektów w

pami

ę

ci komputera

– Intuicyjno

ść

interfejsu, ale ograniczenie mo

ż

liwo

ś

ci modyfikacji struktury i

warto

ś

ci (dotyczy dokumentów o tym samym schemacie XSD)

– Mniejsze koszty ni

ż

przy DOM

Pull parsing – przetwarzanie strumieniowe

– Aplikacja kontroluje przetwarzanie, „wyci

ą

gaj

ą

c” zdarzenia z parsera

– Działanie parsera podobne do iteratora, kursora lub strumienia danych
– du

ż

a wydajno

ść

, alternatywa do SAX

background image

T.Kubik: GML w wolnym oprogramowani

9/32

DOM i SAX

background image

T.Kubik: GML w wolnym oprogramowani

10/32

Standardy i implementacje Java

• Java API for XML Processing (JAXP)

– JSR 63 (JAXP 1.1 and 1.2)
– JSR 5 (JAXP 1.0)
– W3C Recomendation: Document Object

Model (DOM) Level 2 Core Specification

• Java Architecture for XML Binding (JAXB)

– Java SE 7: JAXB 2.2.3 (JSR 222,

maintenance release 2)

– Java SE 6: JAXB 2.0 (JSR 222)

background image

T.Kubik: GML w wolnym oprogramowani

11/32

Działanie parsera DOM

http://docs.oracle.com/cd/B19306_01/appdev.102/b14252/adx_j_parser.htm

background image

T.Kubik: GML w wolnym oprogramowani

12/32

Działanie pasera SAX

http://docs.oracle.com/cd/B19306_01/appdev.102/b14252/adx_j_parser.htm

background image

T.Kubik: GML w wolnym oprogramowani

13/32

Parsowanie XML z JAXP

http://docs.oracle.com/cd/B19306_01/appdev.102/b14252/adx_j_parser.htm

background image

T.Kubik: GML w wolnym oprogramowani

14/32

XML data binding: korzystanie z JAXB

background image

T.Kubik: GML w wolnym oprogramowani

15/32

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:complexType name="KontaktType">

<xs:sequence>

<xs:element name="Imie" type="xs:string"></xs:element>
<xs:element name="Email" type="xs:string"></xs:element>

</xs:sequence>

</xs:complexType>
<xs:element name="Kontakt"

type="KontaktType"></xs:element>

</xs:schema>

Korzystanie z JAXB

JAXBContext jc = JAXBContext.newInstance("generated" );

Unmarshaller u = jc.createUnmarshaller();

FileInputStream f = new FileInputStream("mojeDane.xml");

JAXBElement<generated.KontaktType> k =

(JAXBElement<generated.KontaktType>) u.unmarshal(f);

System.out.println(k.getValue().getImie());

System.out.println(k.getEmail ().getEmail());

> xjc dane.xsd

<?xml version="1.0" encoding="UTF-8"?>
<Kontakt>

<Imie>Jan</Imie>
<Email>jan@ex.com</Email>
</Kontakt>

background image

T.Kubik: GML w wolnym oprogramowani

16/32

CodeSynthesis XSD

Kompilator schematów XML do C++, open-source, cross-platform

Generuje klasy C++ pozwalaj

ą

ce na parsowanie plików XML oraz

serializowanie danych do plików XML (file-per-schema, file-per-type)

Nazwy wyst

ę

puj

ą

ce w wygenerowanych automatycznie klasach

odzwierciedlaj

ą

nazwy ze schematu

U

ż

ywa statycznego typowania, co pozwala wychwytywa

ć

ę

dy na

etapie kompilacji

Bazuje na bibliotece Xerces-C++

Wspiera dwa mapowania:

in-memory C++/Tree (podobnie do DOM)
stream-oriented C++/Parser (podobnie do SAX)

http://www.codesynthesis.com/products/xsd/

auto_ptr<Kontakt> k = Kontakt ("c.xml");

cout << k->imie () << ", "

<< k->email () << endl;

<?xml version="1.0" encoding="UTF-8"?>
<Kontakt>

<Imie>Jan</Imie>
<Email>jan@ex.com</Email>
</Kontakt>

background image

T.Kubik: GML w wolnym oprogramowani

17/32

CodeSynthesis XSD
- ró

ż

nice w przetwarzaniu XML

// XML Binding: C++/Tree
Kontakt k = ...

cout << k.imie () << ", "
<< k.email () << endl;

// DOM
DOMElement* k = ...
DOMNodeList* l;
l = k->getElementsByTagName ("Imie");
DOMNode* imie = l->item (0);
l = c->getElementsByTagName ("Email");
DOMNode* email = l->item (0);
cout << name->getTextContent () << ", „
<< email->getTextContent () << endl;

<?xml version="1.0" encoding="UTF-8"?>
<Kontakt>

<Imie>Jan</Imie>
<Email>jan@ex.com</Email>
</Kontakt>

background image

T.Kubik: GML w wolnym oprogramowani

18/32

CodeSynthesis XSD
- ró

ż

nice w przetwarzaniu XML

// XML Binding: C++/Parser
class KontaktParser: ... {
virtual void imie (const string& n){

cout << n << ", "; }

virtual void email (const string& e){

cout << e << endl; }

};

// SAX
class KontaktParser: ... {

virtual void endElement (const string& name) {

if (name == "Imie")

cout << ", " else

if (name == "Email")

cout << endl; }

virtual void characters (const string& s) {

cout << s; }

};

<?xml version="1.0" encoding="UTF-8"?>
<Kontakt>

<Imie>Jan</Imie>
<Email>jan@ex.com</Email>
</Kontakt>

background image

T.Kubik: GML w wolnym oprogramowani

19/32

CodeSynthesis XSD
- wspierane standardy i schematy

RSS 2.0

XML Metadata Interchange (XMI)

Dimensional Markup Language (DML)

Deployment and Configuration (DnC)

XML Schema Standard Type Library (XSSTL)

XML-Signature Syntax and Processing (XMLDSIG)

Open Vulnerability and Assessment Language (OVAL)

Financial products Markup Language (FpML)

ACORD Insurance Standard

CoT (Cursor On Target)

COLLADA (COLLAborative Design Activity)

FpML (Financial products Markup Language)

NIST-ITL (Interchange of Fingerprint, Facial, & Other Biometric Information)

RailML (Data exchange format for railway applications)

SMIL (Synchronized Multimedia Integration Language)

UDDI (Universal Description, Discovery & Integration)

X3D (Integrated 3D graphics and multimedia framework)

3D XML (3D data sharing)

background image

T.Kubik: GML w wolnym oprogramowani

20/32

CodeSynthesis XSD
- GML

• GML (Geography Markup Language)

– 3.1.1 (C++/Tree mapping, file-per-schema)

• rozwi

ą

zano problem zap

ę

tlenia zale

ż

no

ś

ci smil20.xsd and

smil20-language.xsd

– 3.2.0 (C++/Tree mapping, file-per-type)

• pliki w jednym katalogu lub podkatalogach

– http://wiki.codesynthesis.com/Schemas/GML

• CityGML (Virtual 3D city and landscape models)

– CityGML 1.0.0 (C++/Tree mapping)

• Problem z wykorzystaniem grup podstawie

ń

– http://wiki.codesynthesis.com/Schemas/CityGML

background image

T.Kubik: GML w wolnym oprogramowani

21/32

FDO - Feature Data Object

• API do manipulowania,

definiowania i
analizowania
informacji
przestrzennej o

ż

nym pochodzeniu

• Korzysta z modelu

bazuj

ą

cego na

„dostawcach”

• (C++/.NET, LGPL)
Pakiet

OSGeo::FDO::Xml

FDO 3.5 wspiera GML 2.1.2

FDO 3.6 wspiera GML 3.0

http://fdo.osgeo.org/

background image

T.Kubik: GML w wolnym oprogramowani

22/32

GeoTools

Dostarcza metod do przetwarzania danych przestrzennych

– Obsługuje geometri

ę

poprzez Java Topology Suite (JTS)

– Wspiera obsług

ę

atrybutów i filtrów przestrzennych zgodnie z OGC Filter

Encoding

Umo

ż

liwia dost

ę

p transakcyjny i wielow

ą

tkowych

Obsługuje

– bazy danych (db2, h2, mysql, oracle, postgis, spatialite, sqlserver)
– pliki ró

ż

nych formatów

Rastry (arcsde, arcgrid, geotiff, grassraster, gtopo30, image (JPEG, TIFF, GIF, PNG),
imageio-ext-gdal, imagemoasaic, imagepyramid, JP2K, matlab)

Wektory (app-schema, arcsde, csv, dxf, edigeo, excel, geojson, org, property, shapefile,
wfs)

Biblioteka Java (LGPL)

http://www.osgeo.org/geotools

background image

T.Kubik: GML w wolnym oprogramowani

23/32

GeoTools

Wspiera ró

ż

ne układy współrz

ę

dnych i transformacje

Obsługuje ró

ż

ne projekcje

Pozwala filtrowa

ć

atrybuty przestrzenne i nieprzestrzenne

Pozwala parsowa

ć

dokumenty XML z wykorzystaniem schematów

– Dostarcza dowi

ą

zania do GML, FE, KML, SLD, and SE.

Pozwala na tworzenie i wykorzystanie rozszerze

ń

OGC Style Layer Descriptor

/ Symbology Encoding data structures and rendering engine

Wspiera standardy:

– OGC General Feature Model oraz Simple Feature
– OGC Grid Coverage
– OGC Filter and Common Constraint Language (CQL)
– Stron

ę

klientów WFS, WMS, WPS (eksperymentalnie)

– ISO 19107 Geometry

background image

T.Kubik: GML w wolnym oprogramowani

24/32

GeoTools – wykorzystywane parsery

Schema assisted parsing backed by Eclipse

XSD to represent schema.

Easier to trace through but still not straight

forward

Allows streaming for large GIS data volumnes.

Filter GML SLD WMS

WFS1.0 WFS1.1
WPS XSD

xml

dom

sax

GTXML

Proof of concept of schema assisted parsing

allowing streaming into Java Objects.
Code is fast and well tested but is hard to
trace through

Filter GML SLD WMS

WFS1.0 XSD

xml

dom

sax

XDO

Should combine the ease of DOM with the

streaming performance of XDO and
GTXML

n/a

dom

sax

Pull

Fast but not suitable for dynamic data,

precomplied

n/a

xml

dom

sax

JABX

Easy to trace through and debug, difficult to

configure for specific data

Filter GML2 SLD

xml

Transform

Forgiving and easy to trace through and debug,

memory limitation for GIS data

Filter GLM SLD

dom

DOM

Hard to trace through, parse not easily

extended

Filter GML SLD

dom

sax

SAX

Notes

Support

Encode

DOM

SAX

Technology

background image

T.Kubik: GML w wolnym oprogramowani

25/32

GML Parser for Java

• Lekki parser GML

– Plik GML do geometrii JTS

– Geometrie JTS do pliku GML

• Wspiera GML 3.1.1

• Distrybucja z repozytorium Maven

http://confluence.highsource.org/display/OGCS/Home

JAXBContext context =

JAXBContext.newInstance("org.jvnet.ogc.gml.v_3_1_1.jts");

WKTWriter wktWriter = new WKTWriter();

Unmarshaller unmarshaller = context.createUnmarshaller();

Geometry geometry = (Geometry) unmarshaller.unmarshal(resource);

System.out.println(wktWriter.write(geometry));

background image

T.Kubik: GML w wolnym oprogramowani

26/32

GDAL

• biblioteka słu

żą

ca do odczytu i zapisu rastrowych danych

geoprzestrzennych, korzystaj

ą

ca z Xerces lub Expat

• GDAL u

ż

ywa OGR do odczytu i zapisu wektorowych

danych

• OGR posiada sterownik GML

– http://www.gdal.org/ogr/drv_gml.html

http://www.gdal.org

GML 2.1.2

GML2 i ograniczony GML3

OGR < 1.8.0

GML 2.1.2 lub GML 3 SF-0

(GML 3.1.1 Compliance level SF-0)

GML2 i GML3 które mogą być

przetłumaczone na model SF

OGR >= 1.8.0

Zapis

Odczyt

Wersja

background image

T.Kubik: GML w wolnym oprogramowani

27/32

Narz

ę

dzia wspieraj

ą

ce GML

(odczyt/zapis)

• Ka

ż

dy serwis WFS musi umie

ć

zapisa

ć

GML, przy czym

serwis transakcyjny musi czyta

ć

GML

• Klienci serwisów WFS powinny wspiera

ć

obsług

ę

plików

GML (przynajmniej cz

ęś

ciowo)

• List

ę

narz

ę

dzi wspieraj

ą

cych GML i WFS mo

ż

na znale

źć

pod adresem:

– http://www.opengeospatial.org/resource/products/byspec

background image

T.Kubik: GML w wolnym oprogramowani

28/32

Narz

ę

dzia wspieraj

ą

ce GML

Carbon Tools GAIA – platforma zbudowana na bazie CarbonTools PRO pozwalaj

ą

ca na

dost

ę

p i przegl

ą

danie wielu

ź

ródeł naych przestrzennych (usługi OGC: WMS, WMTS,

WCS, WFS, obsługa FE; inne usługi: Microsoft Bing Maps, Yahoo! Maps, OSM; pliki w
formacie SHP, KML/KMZ, DXF, MIF, GML oraz GML Simple Features) (Microsoft .NET >=
2.0)

Snowflake GML Viewer - pozwala m.in. odczyta

ć

i zobrazowa

ć

dane o schemacie GML2

lub GML3, posiada predefiniowane style dla OS MasterMap (Wielka Brytania), IMRO2006
(Holandia), TOP10NL (Holandia) and AAA-NAS (Niemcy)

gvSIG 1.1 – aplikacja, która obsługuje m.in. WFS 1.1 oraz pozwala na odczyt/zapis
plików GML 3.1.1. (Java, GPL).

QGIS (Quantum GIS) – aplikacja wspieraj

ą

ca obsług

ę

GML (odczyt/zapis) za

po

ś

rednictwem biblioteki OGR (C++/Python; GPL)

uDig (User-friendly Desktop Internet GIS) - aplikacja pozwalaj

ą

ca obsługiwa

ć

ż

ne

ź

ródła

danych przestrzennych (usługi WMS, WFS; pliki w ró

ż

nych formatach) (Java, EPL oraz

BSD)

OpenLayers (wersje 2.12 – stabilna, 3 – rozwojowa) – biblioteka pozwalaj

ą

ca na

wy

ś

wietlanie map w przegl

ą

darkach internetowycha (strona klienta). Obsługuje profil GML

simple feature przy zapisie i odczycie (JavaScript, FreeBSD)

uDig 1.4: GML files in udig can currently only be supported if they meet two very strict restrictions:
filename.xsd - an xml schema document defining the “data product” being loaded
filename.gml - an xml document defined against the schema provided above
We only support GML2 based schemas with simple content at this time. There is improved GML support for WFS 1.1 access; this has not been
packaged for offline use at this time.

background image

T.Kubik: GML w wolnym oprogramowani

29/32

PostgreSQL + PostGIS

• System zarz

ą

dzania relacyjno-obiektow

ą

baz

ą

danych z

rozszerzenie pozwalaj

ą

cym na zapisywanie danych

geograficznych wprost do bazy danych zgodnie ze
specyfikacj

ą

OpenGIS Simple Features dla profilu SQL

• Wspiera:

– GML 3.2.1 Namespace
– GML 3.1.1 Simple Features profile SF-2 (with GML 3.1.0 and 3.0.0

backward compatibility)

– GML 2.1.2

geometry ST_GeomFromGML(text geomgml);

geometry ST_GeomFromGML(text geomgml, integer srid);

text ST_AsGML(geometry g1);

text ST_AsGML(geometry g1, integer precision);

text ST_AsGML(integer version, geometry g1);

text ST_AsGML(integer version, geometry g1, integer precision);

text ST_AsGML(integer version, geometry g1,

integer precision, integer options);

background image

T.Kubik: GML w wolnym oprogramowani

30/32

Przykład zastosowania PostGIS

Utworzenie bazy danych przestrzennych

# createdb -U postgres -h localhost -W -T postgistemplate

mojaBD

Zapytanie do PRNG wybieraj

ą

ce wszystkie nazwy zaczynaj

ą

ce si

ę

na A:

http://sdi.geoportal.gov.pl/wfsg_prng/wfservice.as

px?service=WFS&request=GetFeature&version=1.1.0&typena
me=gmgml:Polska&namespace=xmlns(gmgml=http://www.inter
graph.com/geomedia/gml)&filter=<ogc:Filter
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/gml"
xmlns:gmgml="http://www.intergraph.com/geomedia/gml"><
ogc:PropertyIsLike wildCard="*"
singleChar="."escapeChar="!"><ogc:PropertyName>NAZWA</
ogc:PropertyName><ogc:Literal>A*</ogc:Literal></ogc:Pr
opertyIsLike></ogc:Filter>

background image

T.Kubik: GML w wolnym oprogramowani

31/32

Pobieranie danych z serwisów WFS

• Powy

ż

sze produkuje GML, w którym nale

ż

y odwróci

ć

współrz

ę

dne (ze wzgl

ę

du na ró

ż

nice pomi

ę

dzy wersjami

GML-a)

# export FORMAT=GML3

# export GML3_LONGSRS=YES

# export GML_INVERT_AXIS_ORDER_IF_LAT_LONG=YES

# ogr2ogr -nlt POINT -f "GML" Aout.gml A.gml

• Załadowanie pliku GML do bazy danych

ogr2ogr -f "PostgreSQL" PG:"dbname=mojaBD

host=localhost port=5432 user=postgres
password=******" Aout.gml

background image

T.Kubik: GML w wolnym oprogramowani

32/32

Koniec

• Dzi

ę

kuj

ę

za uwag

ę


Wyszukiwarka

Podobne podstrony:
4 Systemy Operacyjne 26 10 2010 Ogólna budowa oprogramowania systemowego
2007 10 Extreme Programming (XP) i CMMI – Kreatywność, czy Dyscyplina [Inzynieria Oprogramowania]
MIKROEKONOMIA WYKŁAD 3 (29 10 2011) Wybór między czasem wolnym a konsumpcją
2006 10 Przegląd modeli cyklu życia oprogramowania [Inzynieria Oprogramowania]
2006 10 Łączenie kodu C z zarządzanym kodem NET [Inzynieria Oprogramowania]
10. Legalność Oprogramowania (15.12.08), LEGALNOŚĆ OPROGRAMOWANIA
10 ZRZ Lista oprogramowania wsp ORZ [v2]
Rekompensowanie nadgodzin czasem wolnym – 10 wskazówek z przykładami
2012 10 04 Firma zapłaci za brak licencji na oprogramowanie
W4 Proces wytwórczy oprogramowania
10 Metody otrzymywania zwierzat transgenicznychid 10950 ppt
10 dźwigniaid 10541 ppt

więcej podobnych podstron