All guessing files must be valid with the following XML schema, corresponding to the "standard/types/ type_guessing.xsd" file.

<?xml version="1.0" encoding="utf-8" ?>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:simpleType name="pointer-type">

    <xs:restriction base="xs:string">

      <xs:enumeration value="" />

      <xs:enumeration value="PTR" />

      <xs:enumeration value="REF" />

    </xs:restriction>

  </xs:simpleType>

  <xs:simpleType name="cli-pointer-type">

    <xs:restriction base="xs:string">

      <xs:enumeration value="" />

      <xs:enumeration value="PTR" />

      <xs:enumeration value="REF" />

      <xs:enumeration value="CLIPTR" />

    </xs:restriction>

  </xs:simpleType>

  <xs:complexType name="declaration">

    <xs:sequence>

      <xs:element minOccurs="1" maxOccurs="1" name="container" type="xs:boolean" />

      <xs:choice minOccurs="1" maxOccurs="1">

        <xs:element minOccurs="0" maxOccurs="1" name="pointer" type= "pointer-type" />

        <xs:element minOccurs="0" maxOccurs="1" name="cliPointer" type= "cli-pointer-type" />

      </xs:choice>

    </xs:sequence>

  </xs:complexType>

  <xs:complexType name="typeDef">

    <xs:sequence>

      <xs:element minOccurs="0" name="OptionalSimple" type="declaration" />

      <xs:element minOccurs="0" name="MandatorySimple" type="declaration" />

      <xs:element minOccurs="0" name="OptionalMultiple" type="declaration" />

      <xs:element minOccurs="0" name="MandatoryMultiple" type="declaration" />

      <xs:element minOccurs="0" name="Finite" type="declaration" />

    </xs:sequence>

  </xs:complexType>

  <xs:complexType name="types">

    <xs:sequence>

      <xs:element minOccurs="1" maxOccurs="unbounded" name="basicType">

        <xs:complexType>

          <xs:complexContent mixed="false">

            <xs:extension base="typeDef">

              <xs:attribute name="name" type="xs:string" use="optional" />

            </xs:extension>

          </xs:complexContent>

        </xs:complexType>

      </xs:element>

      <xs:element minOccurs="1" maxOccurs="unbounded" name="primitiveType">

        <xs:complexType>

          <xs:complexContent mixed="false">

            <xs:extension base="typeDef">

              <xs:attribute name="name" type="xs:string" use="optional" />

            </xs:extension>

          </xs:complexContent>

        </xs:complexType>

      </xs:element>

      <xs:element minOccurs="1" maxOccurs="unbounded" name="classType">

        <xs:complexType>

          <xs:complexContent mixed="false">

            <xs:extension base="typeDef">

              <xs:attribute name="name" type="xs:string" use="optional" />

            </xs:extension>

          </xs:complexContent>

        </xs:complexType>

      </xs:element>

    </xs:sequence>

  </xs:complexType>

  <xs:element name="type-guessing">

    <xs:complexType>

      <xs:sequence>

        <xs:element minOccurs="1" maxOccurs="1" name="attribute" type="types" />

        <xs:element minOccurs="1" maxOccurs="1" name="association-end" type="types" />

        <xs:element minOccurs="1" maxOccurs="1" name="in-parameter" type="types" />

        <xs:element minOccurs="1" maxOccurs="1" name="inout-parameter" type="types" />

        <xs:element minOccurs="1" maxOccurs="1" name="return-parameter" type="types" />

      </xs:sequence>

    </xs:complexType>

  </xs:element>

</xs:schema>