<xs:complexType name="elementType">
  <xs:choice maxOccurs="unbounded">
    <xs:element ref="dx:name">
      <xs:annotation>
        <xs:documentation>Used to provide the name of the corresponding element or attribute The name may be used in other items such as usage, constraints...</xs:documentation>
      </xs:annotation>
    </xs:element>
    <xs:element ref="dx:summary" minOccurs="0"/>
    <xs:element ref="dx:type" minOccurs="0"/>
    <xs:element ref="dx:occurance">
      <xs:annotation>
        <xs:documentation>cardinality is mandatory for the generic usage. It may be present more than once in case it changes for different usages, implementations or targets</xs:documentation>
      </xs:annotation>
    </xs:element>
    <xs:element name="composition" minOccurs="0">
      <xs:annotation>
        <xs:documentation>to express the fact that the element is in fact a group of elements linked with the composition expressed in the is</xs:documentation>
      </xs:annotation>
      <xs:complexType>
        <xs:attribute name="is">
          <xs:simpleType>
            <xs:restriction base="xs:token">
              <xs:enumeration value="all"/>
              <xs:enumeration value="choice"/>
              <xs:enumeration value="interleave"/>
              <xs:enumeration value="sequence"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="name" type="xs:string"/>
      </xs:complexType>
    </xs:element>
    <xs:element ref="dx:introduction"/>
    <xs:element ref="dx:body" minOccurs="0">
      <xs:annotation>
        <xs:documentation>cardinality is mandatory for the generic usage. It may be present more than once in case it changes for different usages, implementations or targets</xs:documentation>
      </xs:annotation>
    </xs:element>
    <xs:element ref="dx:description" minOccurs="0">
      <xs:annotation>
        <xs:documentation>Complete element description, split by html elements, translated from wiki textile syntax and possibly limited to certain usage, target or implementation</xs:documentation>
      </xs:annotation>
    </xs:element>
    <xs:element ref="dx:usage" minOccurs="0" maxOccurs="unbounded">
      <xs:annotation>
        <xs:documentation>Usage is used to restrict the parent information to a specific usage</xs:documentation>
      </xs:annotation>
    </xs:element>
    <xs:element ref="dx:priority" minOccurs="0"/>
    <xs:element ref="dx:element" minOccurs="0"/>
    <xs:element ref="dx:constraint" minOccurs="0"/>
  </xs:choice>
  <xs:attribute name="mixed" type="xs:boolean">
    <xs:annotation>
      <xs:documentation>to express whether the element can have mixed cotnent or not (element, attribute and text or just elements and attributes)</xs:documentation>
    </xs:annotation>
  </xs:attribute>
  <xs:attribute name="name" use="required">
    <xs:annotation>
      <xs:documentation>The actual element tag name</xs:documentation>
    </xs:annotation>
  </xs:attribute>
  <xs:attribute ref="dx:href" use="optional">
    <xs:annotation>
      <xs:documentation>To provide a link to the element definition in case the information is coming from an external file. The link would correpsond to a xlink.</xs:documentation>
    </xs:annotation>
  </xs:attribute>
  <xs:attribute ref="dx:sinceVersion" use="optional"/>
  <xs:attribute name="class" type="xs:string" use="optional">
    <xs:annotation>
      <xs:appinfo source="§Todo">§todo+xxxdf: possibly link with all the classes from XFT (list generated from schema)</xs:appinfo>
      <xs:documentation xml:lang="en">defines what is the parent class used to validate the content of this element. Additional information may be used to limit the scope of the element, like actual values</xs:documentation>
    </xs:annotation>
  </xs:attribute>
  <xs:attribute name="type" type="dx:element_typeType" use="required">
    <xs:annotation>
      <xs:documentation xml:lang="en">the type of element can be element, attribute or value at present. In case of value, the dx:name element would correspond to the actual value</xs:documentation>
      <xs:appinfo source="§Todo">§Todo+xxx: validate the assumption that dx:name would contain the value or add another item</xs:appinfo>
    </xs:annotation>
  </xs:attribute>
</xs:complexType> |