01.07.2013 Views

Ph.D. Thesis - Business Informatics Group

Ph.D. Thesis - Business Informatics Group

Ph.D. Thesis - Business Informatics Group

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

2.3 A DTD to Ecore Transformation Framework<br />

XML Element Type<br />

XML Attribute<br />

XOR<br />

Table 2.1: Transformation Rules from DTD to Ecore<br />

Rule DTD Concept Ecore Concept<br />

R 1 XMLElemType (ET) EClass<br />

XMLElemType. Name EClass.name<br />

(1) XMLEmptyET no additional elements required<br />

(2) XMLAnyET no additional elements required<br />

(3) XMLAtomicET add EAttribute<br />

EAttribute.name=”PCDATA”, EAttribute.eAttributeType=EString,<br />

EAttribute.defaultValue=XMLAtomicET.value<br />

(4) XMLCompositeET<br />

ElemContent<br />

If XMLSequence with<br />

cardinality=1 and nested=false<br />

If XMLChoice with cardinality=1<br />

and nested=false<br />

If XMLContentParticle with<br />

cardinality>1 or nested=true<br />

add EReference for each XMLElementType in XMLSequence<br />

EReference.name=XMLElementType.name, EReference.containment=true<br />

add EReference for each XMLElementType in XMLChoice<br />

EReference.name=XMLElementType.name, EReference.containment=true<br />

add OCL constraints restricting the alternative EReferences<br />

add helper EClasses for each XMLSequence or XMLChoice serving as containers<br />

for nested XMLContentParticles<br />

(5) XMLCompositeETMixedContent add EReference for each XMLElementType<br />

EReference.name=XMLElementType.name, EReference.containment=true<br />

add EAttribute<br />

EAttribute.name=”PCDATA”, EAttribute.eAttributeType=EString,<br />

EAttribute.defaultValue= XMLCompositeETMixedContent.value<br />

R1.1 XMLContentParticle.cardinality EReference.multiplicity<br />

(1) ? (Zero-or-one)<br />

EReference.lowerBound=0, EReference.upperBound=1<br />

(2) * (Zero-or-more)<br />

EReference.lowerBound=0, EReference.upperBound=-1<br />

(3) + (One-or-more)<br />

EReference.lowerBound=1, EReference.upperBound=-1<br />

(4) no symbol<br />

EReference.lowerBound=1, EReference.upperBound=1<br />

R2 XMLAttribute EAttribute<br />

XMLAttribute.name EAttribute.name<br />

(1) XMLStringAtt, NMTOKEN(S), IDREF(S) EAttribute.eAttributeType=EString<br />

(2) ID EAttribute.eAttributeType=EString, EAttribute.id=true<br />

(3) XMLEnumAtt add EEnum<br />

EEnum.name= XMLEnumAtt.name+”_ENUM”<br />

for each XMLEnumLiteral add EEnumLiteral<br />

EAttribute.eAttributeType=EEnum<br />

R2.1 XMLAttribute.cardinality EAttribute.multiplicity<br />

R3<br />

(1) default_value<br />

(2) #FIXED<br />

(3) #REQUIRED<br />

(4) #IMPLIED<br />

If XMLElemType is part of several<br />

XMLCompositeETElemContent<br />

Single-valued<br />

Multi-valued<br />

Single-valued<br />

Multi-valued<br />

EAttribute.lowerBound=1, EAttribute.upperBound=1,<br />

EAttribute.defaultValue=XMLAttribute.default_value<br />

EAttribute.lowerBound=1, EAttribute.upperBound=-1,<br />

EAttribute.defaultValue=XMLAttribute.default_value<br />

EAttribute.lowerBound=1, EAttribute.upperBound=1,<br />

EAttribute.defaultValue=default_value, EAttribute.unchangeable=true<br />

EAttribute.lowerBound=1, EAttribute.upperBound=-1,<br />

EAttribute.defaultValue=default_value, EAttribute.unchangeable=true<br />

Single-valued EAttribute.lowerBound=1, EAttribute.upperBound=1<br />

Multi-valued EAttribute.lowerBound=1, EAttribute.upperBound=-1<br />

Single-valued EAttribute.lowerBound=0, EAttribute.upperBound=1<br />

Multi-valued EAttribute.lowerBound=0, EAttribute.upperBound=1<br />

then add OCL constraint to contained EClass specifying that the produced<br />

EReferences are exclusive<br />

27

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!