Como procedimento de teste e validação do plug-in UML2GML, foi definido o uso de um modelo conceitual de teste. Esse modelo de teste foi modelado na ferramenta Papyrus com o perfil OGC e posteriormente convertido para GML esquema, o qual finalmente foi validado por um parser XML esquema. Um parser é uma ferramenta que verifica se a sintaxe de um documento XML esquema atende aos padrões estabelecidos pela W3C. A ferramenta parser utilizada nesta dissertação foi a Altova XMLSpy 2008 Enterprise Edition30.
O modelo-teste selecionado foi o modelo conceitual exemplo proposto pelo Anexo E do documento OGC (2007). Na Figura 42, é apresentado o modelo-teste já implementado dentro da ferramenta Papyrus. Nota-se, no modelo resultante, o uso do perfil OGC através dos estereótipos <<FeatureType>>,<<DataType>>, <<Enumeration>> e <<CodeList>>.
30 http://www.altova.com/
62 Figura 42. Modelo conceitual exemplo proposto pela OGC (2007) e implementado na ferramenta Papyrus com
perfil OGC.
Também no modelo conceitual exemplo e fazendo parte do perfil OGC, estão os objetos da série ISO 19100: GM_CurveSegment, GM_Surface, Polygon, Area, DirectPosition e Vector.
A etapa subseqüente foi o processo de converter o modelo conceitual UML, produzido no Papyrus, para GML esquema. O resultado do processo de conversão pode ser visto no trecho de código abaixo. Após a etapa de conversão, foi utilizada a ferramenta parser Altova XMLSpy 2008, para efetuar a validação do GML esquema produzido. O resultado da análise da ferramenta parser retornou que o documento esquema gerado pelo plug-in UML2GML é
“válido”.
1 2 3 4 5 6 7 8 9 10
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tmp="http://www.mynamespace.com/myUMLModel"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml/3.2"
targetNamespace="http://www.mynamespace.com/myUMLModel" elementFormDefault="qualified" version="1.0">
<!--=================================================-->
<import namespace="http://www.opengis.net/gml/3.2" schemaLocation="gml/3.2.1/gml.xsd"/>
<import namespace="http://www.w3.org/1999/xlink" schemaLocation="xlink/1.0.0/xlinks.xsd"/>
<!--=================================================-->
<element name="Parcel" type="tmp:ParcelType" substitutionGroup="gml:AbstractFeature"/>
<complexType name="ParcelType">
63
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
<complexContent>
<extension base="gml:AbstractFeatureType">
<sequence>
<element name="area" type="gml:AreaType"/>
<element name="extent" type="gml:PolygonType"/>
<element name="hasBuilding" type="tmp:BuildingPropertyType" minOccurs="0"
maxOccurs="unbounded"/>
<element name="owner" type="tmp:PersonPropertyType" minOccurs="0"
maxOccurs="unbounded">
<annotation>
<appinfo>
<gml:reverseProperty>tmp:owns</gml:reverseProperty>
</appinfo>
</annotation>
</element>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="ParcelPropertyType">
<sequence minOccurs="0">
<element ref="tmp:Parcel"/>
</sequence>
<attributeGroup ref="gml:AssociationAttributeGroup"/>
<attributeGroup ref="gml:OwnershipAttributeGroup"/>
</complexType>
<element name="Person" type="tmp:PersonType" substitutionGroup="gml:AbstractFeature"/>
<complexType name="PersonType">
<complexContent>
<extension base="gml:AbstractFeatureType">
<sequence>
<element name="firstName" type="string"/>
<element name="lastName" type="string"/>
<element name="owns" type="tmp:ParcelPropertyType" maxOccurs="unbounded">
<annotation>
<appinfo>
<gml:reverseProperty>tmp:owner</gml:reverseProperty>
</appinfo>
</annotation>
</element>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="PersonPropertyType">
<sequence>
<element ref="tmp:Person"/>
</sequence>
<attributeGroup ref="gml:AssociationAttributeGroup"/>
<attributeGroup ref="gml:OwnershipAttributeGroup"/>
</complexType>
<element name="Building" type="tmp:BuildingType" substitutionGroup="gml:AbstractFeature"/>
<complexType name="BuildingType">
<complexContent>
<extension base="gml:AbstractFeatureType">
<sequence>
<element name="extent" type="gml:SurfacePropertyType"/>
<element name="address">
<complexType>
<sequence>
<element name="address" type="tmp:AddressType"/>
</sequence>
</complexType>
</element>
<element name="type" type="tmp:BuildingTypeType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="BuildingPropertyType">
<sequence minOccurs="0">
<element ref="tmp:Building"/>
</sequence>
<attributeGroup ref="gml:AssociationAttributeGroup"/>
<attributeGroup ref="gml:OwnershipAttributeGroup"/>
</complexType>
<complexType name="AddressType">
<sequence>
<element name="street" type="string" minOccurs="0"/>
<element name="houseNumber" type="string" minOccurs="0"/>
<element name="poBox" type="string" minOccurs="0"/>
64
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
<element name="city" type="string"/>
<element name="postalCode" type="string"/>
<element name="country" type="tmp:CountryCodeType" default="DE" minOccurs="0"/>
</sequence>
</complexType>
<simpleType name="BuildingTypeType">
<restriction base="string">
<enumeration value="church"/>
<enumeration value="school"/>
<enumeration value="garage"/>
<enumeration value="residentialHouse"/>
<enumeration value="unknown"/>
<enumeration value="mixed"/>
</restriction>
</simpleType>
<simpleType name="CountryCodeType">
<union memberTypes="tmp:CountryCodeEnumerationType tmp:CountryCodeOtherType"/>
</simpleType>
<simpleType name="CountryCodeEnumerationType">
<restriction base="string">
<enumeration value="DE"/>
<enumeration value="US"/>
<enumeration value="CA"/>
<enumeration value="..."/>
</restriction>
</simpleType>
<simpleType name="CountryCodeOtherType">
<restriction base="string">
<pattern value="other:\w{2,}"/>
</restriction>
</simpleType>
<element name="Elipse" type="tmp:ElipseType" substitutionGroup="gml:AbstractCurveSegment"/>
<complexType name="ElipseType">
<complexContent>
<extension base="gml:AbstractCurveSegmentType">
<sequence>
<element name="center" type="gml:DirectPositionType"/>
<element name="semiminor" type="gml:VectorType"/>
<element name="semimajor" type="gml:VectorType"/>
</sequence>
</extension>
</complexContent>
</complexType>
</schema>