9.4 The Feature XML Schema of the AADL Meta Model
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http:///AADL/feature" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:feature="http:///AADL/feature" xmlns:core="http:///AADL/core">
      <xsd:import namespace="http:///AADL/core" schemaLocation="core.xsd"/>
      <xsd:simpleType name="PortDirection">
            <xsd:restriction base="xsd:NCName">
                  <xsd:enumeration value="in"/>
                  <xsd:enumeration value="out"/>
                  <xsd:enumeration value="inout"/>
            </xsd:restriction>
      </xsd:simpleType>
      <xsd:simpleType name="AccessDirection">
            <xsd:restriction base="xsd:NCName">
                  <xsd:enumeration value="provided"/>
                  <xsd:enumeration value="required"/>
            </xsd:restriction>
      </xsd:simpleType>
      <xsd:complexType name="Subprogram">
            <xsd:complexContent>
                  <xsd:extension base="core:Feature">
                        <xsd:attribute name="refines" type="xsd:string"/>
                        <xsd:attribute name="subprogramClassifier" type="xsd:string"/>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="Subprogram" type="feature:Subprogram"/>
      <xsd:complexType name="ServerSubprogram">
            <xsd:complexContent>
                  <xsd:extension base="core:Feature">
                        <xsd:attribute name="refines" type="xsd:string"/>
                        <xsd:attribute name="subprogramClassifier" type="xsd:string"/>
                        <xsd:attribute name="subprogram" type="xsd:string"/>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="ServerSubprogram" type="feature:ServerSubprogram"/>
      <xsd:complexType name="DataAccess">
            <xsd:complexContent>
                  <xsd:extension base="feature:ComponentAccess">
                        <xsd:attribute name="refines" type="xsd:string"/>
                        <xsd:attribute name="dataClassifier" type="xsd:string"/>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="DataAccess" type="feature:DataAccess"/>
      <xsd:complexType name="BusAccess">
            <xsd:complexContent>
                  <xsd:extension base="feature:ComponentAccess">
                        <xsd:attribute name="refines" type="xsd:string"/>
                        <xsd:attribute name="busClassifier" type="xsd:string"/>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="BusAccess" type="feature:BusAccess"/>
      <xsd:complexType name="Port">
            <xsd:complexContent>
                  <xsd:extension base="feature:AbstractPort">
                        <xsd:attribute name="direction" type="feature:PortDirection"/>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:complexType name="DataPort">
            <xsd:complexContent>
                  <xsd:extension base="feature:Port">
                        <xsd:attribute name="refines" type="xsd:string"/>
                        <xsd:attribute name="dataClassifier" type="xsd:string"/>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="DataPort" type="feature:DataPort"/>
      <xsd:complexType name="EventPort">
            <xsd:complexContent>
                  <xsd:extension base="feature:Port">
                        <xsd:attribute name="refines" type="xsd:string"/>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="EventPort" type="feature:EventPort"/>
      <xsd:complexType name="EventDataPort">
            <xsd:complexContent>
                  <xsd:extension base="feature:Port">
                        <xsd:attribute name="refines" type="xsd:string"/>
                        <xsd:attribute name="dataClassifier" type="xsd:string"/>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="EventDataPort" type="feature:EventDataPort"/>
      <xsd:complexType name="Parameter">
            <xsd:complexContent>
                  <xsd:extension base="feature:AbstractPort">
                        <xsd:attribute name="direction" type="feature:PortDirection" default="in"/>
                        <xsd:attribute name="refines" type="xsd:string"/>
                        <xsd:attribute name="dataClassifier" type="xsd:string"/>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="Parameter" type="feature:Parameter"/>
      <xsd:complexType name="PortGroupType">
            <xsd:complexContent>
                  <xsd:extension base="core:Classifier">
                        <xsd:sequence>
                              <xsd:element name="features" type="feature:PortGroupFeatures" minOccurs="0"/>
                        </xsd:sequence>
                        <xsd:attribute name="extend" type="xsd:string"/>
                        <xsd:attribute name="inverseOf" type="xsd:string"/>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="PortGroupType" type="feature:PortGroupType"/>
      <xsd:complexType name="PortGroup">
            <xsd:complexContent>
                  <xsd:extension base="feature:AbstractPort">
                        <xsd:attribute name="portGroupType" type="xsd:string"/>
                        <xsd:attribute name="refines" type="xsd:string"/>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="PortGroup" type="feature:PortGroup"/>
      <xsd:complexType name="DataFeatures">
            <xsd:complexContent>
                  <xsd:extension base="core:Features">
                        <xsd:sequence>
                              <xsd:element name="features" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                        </xsd:sequence>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="DataFeatures" type="feature:DataFeatures"/>
      <xsd:complexType name="SubprogramFeatures">
            <xsd:complexContent>
                  <xsd:extension base="core:Features">
                        <xsd:sequence>
                              <xsd:element name="features" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                        </xsd:sequence>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="SubprogramFeatures" type="feature:SubprogramFeatures"/>
      <xsd:complexType name="SoftwareFeatures">
            <xsd:complexContent>
                  <xsd:extension base="core:Features">
                        <xsd:sequence>
                              <xsd:element name="features" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                        </xsd:sequence>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:complexType name="ThreadFeatures">
            <xsd:complexContent>
                  <xsd:extension base="feature:SoftwareFeatures"/>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="ThreadFeatures" type="feature:ThreadFeatures"/>
      <xsd:complexType name="ThreadGroupFeatures">
            <xsd:complexContent>
                  <xsd:extension base="feature:SoftwareFeatures"/>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="ThreadGroupFeatures" type="feature:ThreadGroupFeatures"/>
      <xsd:complexType name="ProcessFeatures">
            <xsd:complexContent>
                  <xsd:extension base="feature:SoftwareFeatures"/>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="ProcessFeatures" type="feature:ProcessFeatures"/>
      <xsd:complexType name="ProcessorFeatures">
            <xsd:complexContent>
                  <xsd:extension base="core:Features">
                        <xsd:sequence>
                              <xsd:element name="features" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                        </xsd:sequence>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="ProcessorFeatures" type="feature:ProcessorFeatures"/>
      <xsd:complexType name="MemoryFeatures">
            <xsd:complexContent>
                  <xsd:extension base="core:Features">
                        <xsd:sequence>
                              <xsd:element name="busAccess" type="feature:BusAccess" minOccurs="0" maxOccurs="unbounded"/>
                        </xsd:sequence>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="MemoryFeatures" type="feature:MemoryFeatures"/>
      <xsd:complexType name="BusFeatures">
            <xsd:complexContent>
                  <xsd:extension base="core:Features">
                        <xsd:sequence>
                              <xsd:element name="busAccess" type="feature:BusAccess" minOccurs="0" maxOccurs="unbounded"/>
                        </xsd:sequence>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="BusFeatures" type="feature:BusFeatures"/>
      <xsd:complexType name="DeviceFeatures">
            <xsd:complexContent>
                  <xsd:extension base="core:Features">
                        <xsd:sequence>
                              <xsd:element name="features" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                        </xsd:sequence>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="DeviceFeatures" type="feature:DeviceFeatures"/>
      <xsd:complexType name="SystemFeatures">
            <xsd:complexContent>
                  <xsd:extension base="feature:SoftwareFeatures"/>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="SystemFeatures" type="feature:SystemFeatures"/>
      <xsd:complexType name="ComponentAccess">
            <xsd:complexContent>
                  <xsd:extension base="core:Feature">
                        <xsd:attribute name="direction" type="feature:AccessDirection"/>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:complexType name="PortGroupFeatures">
            <xsd:complexContent>
                  <xsd:extension base="core:AObject">
                        <xsd:sequence>
                              <xsd:element name="features" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                        </xsd:sequence>
                  </xsd:extension>
            </xsd:complexContent>
      </xsd:complexType>
      <xsd:element name="PortGroupFeatures" type="feature:PortGroupFeatures"/>
      <xsd:complexType name="AbstractPort">
            <xsd:complexContent>
                  <xsd:extension base="core:Feature"/>
            </xsd:complexContent>
      </xsd:complexType>
</xsd:schema>