• Nenhum resultado encontrado

3.2 Gerando GML esquemas a partir de modelos UML

3.2.2 Classes – Regras gerais

A OGC (2007) define algumas regras gerais para a conversão de classes UML para elementos de um documento GML esquema:

• Os seguintes estereótipos de classes UML são reconhecidos: <<FeatureType>>,

<<Type>>, <<DataType>>, <<Union>>, <<Codelist>> e <<Enumeration>>.

Todas as classes com outros estereótipos são ignoradas na conversão de UML para GML esquema. Classes sem estereótipos seguem a regra de conversão para classes com estereótipos <<Type>>;

• Cada classe é convertida para elemento, cujo atributo name é o próprio nome da classe, e o tipo é definido como sendo a concatenação do nome da classe com o sufixo “Type”;

• As operações de classe UML são ignoradas na conversão;

• Todas as classes podem ter de zero a um (1) supertipo; portanto, o recurso de herança múltipla é ignorado.

3.2.2.1 Classes – Tipos básicos

A regra de conversão dos tipos básicos transforma componentes de uma linguagem (no caso, UML) para um componente correspondente de outra linguagem (GML esquema).

Portanto, as regras de conversão UML – GML esquema devem suportar tanto elementos gerais da UML, quanto elementos específicos da série ISO 19100. A Figura 18 ilustra uma conversão trivial dos elementos UML: classe, atributos e tipo do atributo. A classe “Estrada”

é convertida para um XML esquema correspondente <complexType>. O tipo do atributo é convertido conforme o Quadro III11 em tipos ISO específicos.

Quadro III. Parte superior: tipos ISO básicos convertidos para tipos XML esquema. Parte inferior: tipos espaciais convertidos para GML. Fonte: Grønmo; Solheim; Skogan (2002).

Tipos básicos de acordo com a ISO 19103 Tipos básicos XML esquema

CharacterString string

Integer integer

Date date

Boolean boolean

Real Decimal

Tipos espaciais de acordo com a ISO 19107 Tipos básicos XML esquema

GM_Point PointPropertyType

GM_Curve LineStringPropertyType

GM_CompositeSurface PolygonPropertyType

11 Nota do autor: a versão completa se encontra no Anexo I deste trabalho.

31

1 2 3 4 5 6 7 8 9 10 11

<complexType name="EstradaType">

<complexContent>

<extension base="gml:AbstractFeatureType">

<sequence>

<element name="classificao" type="string"/>

<element name="numero" type="string"/>

<element name="linearGeometry" type="gml:LineStringPropertyType"/>

</sequence>

</extension>

</complexContent>

</complexType>

Figura 18. Exemplo trivial do mapeamento de uma classe UML para um GML esquema “Estrada”. Fonte: OGC (2007).

3.2.2.2 Classes – DataType

As classes com o estereótipo <<DataType>> seguem as seguintes regras em seu mapeamento para GML (exemplo de mapeamento na Figura 19):

• Se a classe não tem um supertipo, ela deve ser de um tipo não derivado de dentro do XML esquema. Se a classe utiliza um supertipo, este não pode ser derivado de

gml:AbstractObject” (direta ou indiretamente);

• O elemento mapeado deve ter os seguintes atributos configurados: “name” (nome da classe), “type” (nome da classe mais o sufixo Type), “abstractness” (valor

true”, se a classe for abstrata) e “substitutiongroup” (nome da superclasse ou

gml:AbstractObject”, se a classe não for uma superclasse);

• Um elemento <complexType> deve ser criado para essa classe (o atributo “name”

deve ter o valor alterado para o nome da classe, acrescentado do sufixo PropertyType). Essa regra só se aplica, caso o atributo “noPropertyType” da classe, no modelo UML original, esteja com o valor diferente de “true”.

1 2 3 4 5 6

<complexType name="ParcelNameType">

<sequence>

<element name="street" type="string" minOccurs="0" maxOccurs="1"/>

<element name="city" type="string" minOccurs="1" maxOccurs="1"/>

</sequence>

</complexType>

Figura 19. Exemplo do mapeamento de uma classe UML com o estereótipo <<DataType>>. Fonte:

adaptado de OGC (2007).

32

3.2.2.3 Classes – FeatureType

As classes com o estereótipo <<FeatureType>> seguem as seguintes regras em seu mapeamento para GML (exemplo de mapeamento na Figura 20):

• As classes devem ser derivadas direta ou indiretamente de

gml:AbstractFeatureType”. Se a classe não tem um supertipo, ela deve estender diretamente de “gml:AbstractFeatureType”. No entanto, se a classe é estendida de um supertipo, este deve ser derivado de “gml:AbstractFeatureType” (direta ou indiretamente);

• O elemento mapeado deve ter os seguintes atributos configurados: “name” (nome da classe), “type” (nome da classe mais o sufixo Type), “abstractness” (valor

true”, se a classe for abstrata) e “substitutiongroup” (nome da superclasse ou gml:AbstractFeature);

• Um elemento <complexType> deve ser criado para essa classe (o atributo “name

deve ter o valor alterado para o nome da classe, acrescentado do sufixo PropertyType). Essa regra só se aplica, caso o atributo “noPropertyType” da classe, no modelo UML original, esteja com o valor diferente de “true”.

• Um elemento <complexType> deve ser criado para essa classe (o atributo “name

deve ter o valor alterado para o nome da classe, acrescentado do sufixo

PropertyByValueType”). Essa regra só se aplica, caso o atributo

byValuePropertyType” da classe, no modelo UML original, esteja com o valor

true”.

33

1 2 3 4 5 6 7 8 9 10 11 12 13

<complexType name="BuildingType">

<complexContent>

<extension base="gml:AbstractFeatureType">

<sequence>

<element name="extent" type="gml:SurfacePropertyType"/>

<element name="address" type="pcl:AddressPropertyType"/>

<element name="type" type="pcl:BuildingTypeType"/>

</sequence>

</extension>

</complexContent>

</complexType>

<element name="Building" type="pcl:BuildingType" substitutionGroup="gml:AbstractFeature"/>

Figura 20. Exemplo do mapeamento de uma classe UML com o estereótipo <<FeatureType>>. Fonte: OGC (2007).

3.2.2.4 Classes – Type

As classes sem estereótipo ou com o estereótipo <<Type>> seguem as seguintes regras em seu mapeamento para GML (exemplo de mapeamento na Figura 21):

• Classes com o estereótipo <<Type>> devem ser derivadas direta ou indiretamente de “gml:AbstractGMLType”. Se a classe não tem um supertipo, ela deve estender diretamente de “gml:AbstractGMLType”. Porém, se a classe é estendida de um supertipo, este deve ser derivado de “gml:AbstractGMLType” (novamente direta ou indiretamente). Neste caso, a classe não pode ser estendida de

gml:AbstractFeatureType”, seja direta ou indiretamente;

• Um elemento <complexType> deve ser criado para essa classe (o atributo “name

deve ter o valor alterado para o nome da classe, acrescentado do sufixo

PropertyType”). Essa regra só se aplica, caso o atributo “noPropertyType” da classe, no modelo UML original, esteja com o valor diferente de “true”.

<<FeatureType>>

Bulding +extent: GM_Surface +adress: Adress +type: BuldingType

34

Elipse

+center: DirectPosition +semiminor: Vector +semimajor: Vector

<<Abstract>>

GM_CurveSegment

1 2 3 4 5 6 7 8 9 10 11 12 13

<element name="Ellipse" type="ex:EllipseType"

substitutionGroup="gml:AbstractCurveSegment"/>

<complexType name="EllipseType">

<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>

Figura 21. Exemplo do mapeamento de uma classe UML com estereótipo <<Type>> ou sem estereótipo. Fonte: OGC (2007).

3.2.2.5 Classes – Enumerations

As classes com o estereótipo <<Enumeration>> são mapeadas como <simpleType> no XML esquema. O atributo “base” é do tipo “string”, sendo que o domínio dos valores é restringido por um conjunto de valores literais que são especificados pelos nomes dos atributos da classe (exemplo de mapeamento pode ser visto na Figura 22).

1 2 3 4 5 6 7 8 9 10

<simpleType name="BuildingTypeType">

<restriction base="string">

<enumeration value="church"/>

<enumeration value="school"/>

<enumeration value="garage"/>

<enumeration value="residential houses"/>

<enumeration value="unknown"/>

<enumeration value="mixed"/>

</restriction>

</simpleType>

Figura 22. Exemplo do mapeamento de uma classe UML com o estereótipo <<Enumeration>>. Fonte: OGC (2007).

35

3.2.2.6 Classes – CodeList

A OGC (2007) define que uma classe UML com um estereótipo <<CodeList>> e sem o atributo “asDictionary” da classe no modelo UML original com o valor “true” deve ser mapeada como uma classe com estereótipo <<Enumerations>>, mas com algumas diferenças (exemplo de mapeamento na Figura 23):

• Devem-se utilizar padrões de restrições (facets), tais como “<pattern value=’other:\w{2}’/>”, para estabelecer valores pré-definidos na lista. Utilizam- se expressões regulares nas descrições das restrições;

• Se um código for especificado como um valor de “code list”, somente o código pode ser utilizado no elemento <enumeration>;

• Um código pode ser qualificado com o uso de uma anotação <appinfo>, com um elemento <gml:description> especificando um valor texto para os valores dos elementos <enumeration>.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

<simpleType name="ParcelUsageType">

<union memberTypes="pcl:ParcelUsageEnumerationType pcl:ParcelUsageOtherType"/>

</simpleType>

<simpleType name="ParcelUsageEnumerationType">

<restriction base="string">

<enumeration value="1">

<annotation>

<appinfo><gml:description>factory</gml:description></appinfo>

</annotation>

</enumeration>

<enumeration value="2">

<annotation>

<appinfo><gml:description>road</gml:description></appinfo>

</annotation>

</enumeration>

<enumeration value="3">

<annotation>

<appinfo><gml:description>residential</gml:description></appinfo>

</annotation>

</enumeration>

<enumeration value="4">

<annotation>

<appinfo>< gml:description>offices</gml:description></appinfo>

</annotation>

</enumeration>

</restriction>

</simpleType>

<simpleType name="ParcelUsageOtherType">

<restriction base="string">

<pattern value="other: \w{2,}"/>

</restriction>

</simpleType>

Figura 23. Exemplo do mapeamento de uma classe UML com o estereótipo <<CodeList>>. Fonte: OGC (2007).

36

3.2.2.7 Classes – Union

As classes com o estereótipo <<Union>> são mapeadas como <complexType> no XML esquema. Os atributos da classe são mapeados como elementos que compõem a tag

<choice>. Os tipos dos atributos são mapeados de forma usual. Um exemplo de mapeamento pode ser visto na Figura 24.

Documentos relacionados