# Probleme mit Eclipse Modeling Framework (EMF)



## dafti (3. Jun 2008)

Da ich hier neu bin, anfangs mal ein großes HALLO!

und nun zu meinem Problem:

ich muss über EMF ein XML rausschreiben. Modellbildung, Code-Generation und auch rausschreiben eines XMLs hat grundsätzlich funktioniert. 
Das Modell wurde aus einer vorhandenen XSD generiert. 
Das Problem jedoch ist, dass es schon im Ecore kein simples Element ( <name> TEST </name> ) mehr gibt, sondern diese zu Attributen im übergordneten Element wurden.

Im XSD2Ecore Mapping wird beim XSD zwar noch das Element name angezeigt, im Ecore jedoch nur mehr als Attribut.

Kennt jemand das Problem? Hat jemand eine Lösung?

LG David


----------



## Wildcard (6. Jun 2008)

Liegt wohl daran wie die XSD definiert wurde. XML Schemata sind sehr vielfälltig. Kannst du das Schema hier posten?


----------



## dafti (6. Jun 2008)

Hi,
dass hab ich mir auch schon gedacht. Das Problem is zum Beispiel so:

Also es sollte eigentlich sowas auf die Art rauskommen(nur ein Beispiel):


```
<node uri="office@fh-salzburg.ac.at" type="SME" name="SUAS">
          <name>SUAS</name>
</node>
```

und nach dem rausschreiben mit dem EMF schauts dann so aus(das mit name und name1 is mal egal, aber name oder name1 sollte halt draussen stehen):


```
<node uri="office@fh-salzburg.ac.at" type="SME" name="SUAS" name1="SUAS"/>
```

das XSD sieht so aus:



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

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="networkDescription">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="nodes"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="nodes">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="node" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="node">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="name"/>
				<xs:element ref="accessMethods" minOccurs="0"/>
				<xs:element ref="location" minOccurs="0"/>
				<xs:element ref="connections"/>
				<xs:element ref="servicePool" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="type" type="xs:string" use="required"/>
			<xs:attribute name="name" type="xs:string" use="required"/>
			<xs:attribute name="uri" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="servicePool">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="service" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="type" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="localServicePool"/>
						<xs:enumeration value="onDemand"/>
						<xs:enumeration value="onOffer"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
		</xs:complexType>
	</xs:element>
	<xs:element name="service">
		<xs:complexType>
			<xs:sequence minOccurs="0">
				<xs:element ref="name"/>
				<xs:element ref="description"/>
				<xs:element ref="accessMethods" minOccurs="0"/>
			</xs:sequence>
			<xs:attribute name="uri" type="xs:string" use="optional"/>
			<xs:attribute name="name" type="xs:string" use="optional"/>
			<xs:attribute name="id" type="xs:integer" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="name" type="xs:string"/>
	<xs:element name="location">
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:attribute name="lat" type="xs:string"/>
					<xs:attribute name="lng" type="xs:string"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="description" type="xs:string"/>
	<xs:element name="connections">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="connection" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="connection">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="description" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
			<xs:attribute name="type" use="required">
				<xs:simpleType>
					<xs:restriction base="xs:string">
						<xs:enumeration value="producer"/>
						<xs:enumeration value="benchmark"/>
						<xs:enumeration value="social"/>
					</xs:restriction>
				</xs:simpleType>
			</xs:attribute>
			<xs:attribute name="to" type="xs:string" use="required"/>
			<xs:attribute name="strength" type="xs:byte" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="accessMethod">
		<xs:complexType>
			<xs:attribute name="uri" type="xs:string" use="required"/>
			<xs:attribute name="type" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:element name="accessMethods">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="accessMethod" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>
```
[/code]


----------

