All type libraries must be valid with the following XML schema, corresponding to the "standard/types/ type_library.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="passing">
<xs:restriction base="xs:string">
<xs:enumeration value="VALUE" />
<xs:enumeration value="REF" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="storage">
<xs:restriction base="xs:string">
<xs:enumeration value="PTR" />
<xs:enumeration value="REF" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="cliStorage">
<xs:restriction base="xs:string">
<xs:enumeration value="PTR" />
<xs:enumeration value="REF" />
<xs:enumeration value="CLIPTR" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="containerKind">
<xs:restriction base="xs:string">
<xs:enumeration value="OrderedMap" />
<xs:enumeration value="UnorderedMap" />
<xs:enumeration value="OrderedMultiMap" />
<xs:enumeration value="UnorderedMultiMap" />
<xs:enumeration value="OrderedSet" />
<xs:enumeration value="UnorderedSet" />
<xs:enumeration value="OrderedCollection" />
<xs:enumeration value="UnorderedCollection" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="containerDeclaration">
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="unique" type="xs:boolean" use="required" />
<xs:attribute name="ordered" type="xs:boolean" use="required" />
</xs:complexType>
<xs:complexType name="containerRef">
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element minOccurs="1" maxOccurs="1" name="degradedKind" type="containerKind" />
<xs:element name="containerref">
<xs:complexType>
<xs:attribute name="name" type="xs:IDREF" />
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:element name="type-library">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="type">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="include">
<xs:complexType>
<xs:attribute name="path" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
<xs:element minOccurs="1" maxOccurs="1" name="declaration">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string" />
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" maxOccurs="1" name="container" type="containerDeclaration" />
<xs:element minOccurs="1" maxOccurs="1" name="decoration">
<xs:complexType>
<xs:choice minOccurs="1" maxOccurs="1">
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element minOccurs="1" maxOccurs="1" name= "parameter-passing" type="passing" />
<xs:element minOccurs="1" maxOccurs="1" name= "return-passing" type="passing" />
</xs:sequence>
<xs:choice minOccurs="1" maxOccurs="1">
<xs:element minOccurs="0" maxOccurs="1" name= "class-storage" type="storage" />
<xs:element minOccurs="0" maxOccurs="1" name="cli- class-storage" type="cliStorage" />
</xs:choice>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:ID" use="required" />
</xs:complexType>
</xs:element>
<xs:element minOccurs="1" maxOccurs="1" name="container- mapping">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="OrderedMap" type="containerRef" />
<xs:element minOccurs="1" maxOccurs="1" name="UnorderedMap" type="containerRef" />
<xs:element minOccurs="1" maxOccurs="1" name="OrderedMultiMap" type="containerRef" />
<xs:element minOccurs="1" maxOccurs="1" name="UnorderedMultiMap" type="containerRef" />
<xs:element minOccurs="1" maxOccurs="1" name="OrderedSet" type="containerRef" />
<xs:element minOccurs="1" maxOccurs="1" name="UnorderedSet" type="containerRef" />
<xs:element minOccurs="1" maxOccurs="1" name="OrderedCollection" type="containerRef" />
<xs:element minOccurs="1" maxOccurs="1" name="UnorderedCollection" type="containerRef" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>