<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.omg.org/XMI" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:attribute name="id" type="xsd:ID"/>
  <xsd:attributeGroup name="IdentityAttribs">
    <xsd:attribute form="qualified" name="label" type="xsd:string" use="optional"/>
    <xsd:attribute form="qualified" name="uuid" type="xsd:string" use="optional"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="LinkAttribs">
    <xsd:attribute name="href" type="xsd:string" use="optional"/>
    <xsd:attribute form="qualified" name="idref" type="xsd:IDREF" use="optional"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="ObjectAttribs">
    <xsd:attributeGroup ref="xmi:IdentityAttribs"/>
    <xsd:attributeGroup ref="xmi:LinkAttribs"/>
    <xsd:attribute fixed="2.0" form="qualified" name="version" type="xsd:string" use="optional"/>
    <xsd:attribute form="qualified" name="type" type="xsd:QName" use="optional"/>
  </xsd:attributeGroup>
  <xsd:complexType name="XMI">
    <xsd:choice maxOccurs="unbounded" minOccurs="0">
      <xsd:any processContents="strict"/>
    </xsd:choice>
    <xsd:attributeGroup ref="xmi:IdentityAttribs"/>
    <xsd:attributeGroup ref="xmi:LinkAttribs"/>
    <xsd:attribute form="qualified" name="type" type="xsd:QName" use="optional"/>
    <xsd:attribute fixed="2.0" form="qualified" name="version" type="xsd:string" use="required"/>
  </xsd:complexType>
  <xsd:element name="XMI" type="xmi:XMI"/>
  <xsd:complexType name="PackageReference">
    <xsd:choice maxOccurs="unbounded" minOccurs="0">
      <xsd:element name="name" type="xsd:string"/>
      <xsd:element name="version" type="xsd:string"/>
    </xsd:choice>
    <xsd:attributeGroup ref="xmi:ObjectAttribs"/>
    <xsd:attribute name="name" type="xsd:string" use="optional"/>
  </xsd:complexType>
  <xsd:element name="PackageReference" type="xmi:PackageReference"/>
  <xsd:complexType name="Model">
    <xsd:complexContent>
      <xsd:extension base="xmi:PackageReference"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Model" type="xmi:Model"/>
  <xsd:complexType name="Import">
    <xsd:complexContent>
      <xsd:extension base="xmi:PackageReference"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Import" type="xmi:Import"/>
  <xsd:complexType name="MetaModel">
    <xsd:complexContent>
      <xsd:extension base="xmi:PackageReference"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="MetaModel" type="xmi:MetaModel"/>
  <xsd:complexType name="Documentation">
    <xsd:choice maxOccurs="unbounded" minOccurs="0">
      <xsd:element name="contact" type="xsd:string"/>
      <xsd:element name="exporter" type="xsd:string"/>
      <xsd:element name="exporterVersion" type="xsd:string"/>
      <xsd:element name="longDescription" type="xsd:string"/>
      <xsd:element name="shortDescription" type="xsd:string"/>
      <xsd:element name="notice" type="xsd:string"/>
      <xsd:element name="owner" type="xsd:string"/>
    </xsd:choice>
    <xsd:attributeGroup ref="xmi:ObjectAttribs"/>
    <xsd:attribute name="contact" type="xsd:string" use="optional"/>
    <xsd:attribute name="exporter" type="xsd:string" use="optional"/>
    <xsd:attribute name="exporterVersion" type="xsd:string" use="optional"/>
    <xsd:attribute name="longDescription" type="xsd:string" use="optional"/>
    <xsd:attribute name="shortDescription" type="xsd:string" use="optional"/>
    <xsd:attribute name="notice" type="xsd:string" use="optional"/>
    <xsd:attribute name="owner" type="xsd:string" use="optional"/>
  </xsd:complexType>
  <xsd:element name="Documentation" type="xmi:Documentation"/>
  <xsd:complexType name="Extension">
    <xsd:choice maxOccurs="unbounded" minOccurs="0">
      <xsd:any processContents="lax"/>
    </xsd:choice>
    <xsd:attributeGroup ref="xmi:ObjectAttribs"/>
    <xsd:attribute name="extender" type="xsd:string" use="optional"/>
    <xsd:attribute name="extenderID" type="xsd:string" use="optional"/>
  </xsd:complexType>
  <xsd:element name="Extension" type="xmi:Extension"/>
  <xsd:complexType name="Difference">
    <xsd:choice maxOccurs="unbounded" minOccurs="0">
      <xsd:element name="target">
        <xsd:complexType>
          <xsd:choice maxOccurs="unbounded" minOccurs="0">
            <xsd:any processContents="skip"/>
          </xsd:choice>
          <xsd:anyAttribute processContents="skip"/>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="difference" type="xmi:Difference"/>
      <xsd:element name="container" type="xmi:Difference"/>
    </xsd:choice>
    <xsd:attributeGroup ref="xmi:ObjectAttribs"/>
    <xsd:attribute name="target" type="xsd:IDREFS" use="optional"/>
    <xsd:attribute name="container" type="xsd:IDREFS" use="optional"/>
  </xsd:complexType>
  <xsd:element name="Difference" type="xmi:Difference"/>
  <xsd:complexType name="Add">
    <xsd:complexContent>
      <xsd:extension base="xmi:Difference">
        <xsd:attribute name="position" type="xsd:string" use="optional"/>
        <xsd:attribute name="addition" type="xsd:IDREFS" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Add" type="xmi:Add"/>
  <xsd:complexType name="Replace">
    <xsd:complexContent>
      <xsd:extension base="xmi:Difference">
        <xsd:attribute name="position" type="xsd:string" use="optional"/>
        <xsd:attribute name="replacement" type="xsd:IDREFS" use="optional"/>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Replace" type="xmi:Replace"/>
  <xsd:complexType name="Delete">
    <xsd:complexContent>
      <xsd:extension base="xmi:Difference"/>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:element name="Delete" type="xmi:Delete"/>
  <xsd:complexType name="Any">
    <xsd:choice maxOccurs="unbounded" minOccurs="0">
      <xsd:any processContents="skip"/>
    </xsd:choice>
    <xsd:anyAttribute processContents="skip"/>
  </xsd:complexType>
</xsd:schema>
