How to declare XML Schemas

How to declare XML Schemas

There are three different ways to declare your XSDs. It does not matter which way you choose, or how you combine them, as long as the XSD Adapter can find all needed schemas.

  1. Within the Workflow: org.eclipse.xtend.typesystem.xsd.XSDMetaModel can have any amount of schemaFile elements.

    <component class="org.eclipse.xtend.typesystem.xsd.XMLReader">
      <modelSlot value="model" />
      <uri value="${file}" />
      <metaModel id="mm" class="org.eclipse.xtend.typesystem.xsd.XSDMetaModel">
        <schemaFile value="model/loadcurve.xsd" />
        <schemaFile value="model/device.xsd" />
      </metaModel>
    </component>
  2. Within the XML file: XML files can contain schemaLocation attributes which associate the schema's namespace with the schema's filename. If the schema is created using WTP like described in the section called “Step 3: Create a Model using XML” , the schemaLocation attribute is created automatically.

    <?xml version="1.0" encoding="UTF-8"?>
    <device:Device
      xmlns:device="http://www.eclipse.org/modeling/xpand/example/model/device"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.eclipse.org/modeling/xpand/example/model/device device.xsd">
      <device:Name>MyLaptop</device:Name>
    </device:Device>
  3. Within an XSD: If one schema imports another, the import element can have a schemaLocation attribute, too.

    <?xml version="1.0" encoding="UTF-8"?>
    <schema
      targetNamespace="http://www.eclipse.org/modeling/xpand/example/model/device"
      elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema"
      xmlns:tns="http://www.eclipse.org/modeling/xpand/example/model/device"
      xmlns:lc="http://www.eclipse.org/modeling/xpand/example/model/loadcurve"
      xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore">
    
      <import
        namespace="http://www.eclipse.org/modeling/xpand/example/model/loadcurve"
        schemaLocation="loadcurve.xsd">
      </import>
    
      <complexType name="Device">
        <sequence>
          <element name="Name" type="string" />
          <element name="LoadCurve" type="lc:LoadCurve" />
        </sequence>
      </complexType>
    
      <element name="Device" type="tns:Device"></element>
    </schema>