XML schema for ACT entities

 

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

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

   <xs:element name="act">

        <xs:complexType>

              <xs:choice maxOccurs="unbounded">

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

                        <xs:complexType>

                             <xs:choice minOccurs="0" maxOccurs="unbounded">

                                  <xs:element ref="template"/>

                                  <xs:element ref="map"/>

                                  <xs:element ref="type"/>

                                  <xs:element ref="pattern"/>

                             </xs:choice>

                             <xs:attribute name="id" type="xs:string"/>

                             <xs:attribute name="name-prefix" type="xs:string"/>

                        </xs:complexType>

                   </xs:element>

                   <xs:element name="template-library">

                        <xs:complexType>

                             <xs:choice minOccurs="0" maxOccurs="unbounded">

                                  <xs:element ref="template"/>

                                  <xs:element ref="map"/>

                                  <xs:element ref="type"/>

                                  <xs:element ref="pattern"/>

                             </xs:choice>

                             <xs:attribute name="id" type="xs:string"/>

                        </xs:complexType>

                   </xs:element>

                   <xs:element name="platform-definition">

                        <xs:complexType>

                             <xs:choice minOccurs="0" maxOccurs="unbounded">

                                  <xs:element ref="template"/>

                                  <xs:element ref="map"/>

                                  <xs:element ref="type"/>

                                  <xs:element ref="pattern"/>

                             </xs:choice>

                             <xs:attribute name="id" type="xs:string"/>

                        </xs:complexType>

                   </xs:element>

              </xs:choice>

        </xs:complexType>

   </xs:element>

   <xs:element name="template">

        <xs:complexType>

              <xs:sequence>

                   <xs:choice>

                        <xs:element name="body" type="template-body"/>

                        <xs:element name="j-code" type="xs:string"/>

                   </xs:choice>

                   <xs:element name="define" minOccurs="0" maxOccurs="unbounded">

                        <xs:complexType>

                             <xs:complexContent>

                                  <xs:extension base="template-body">

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

                                        <xs:attribute name="expr" type="xs:string"/>

                                  </xs:extension>

                             </xs:complexContent>

                        </xs:complexType>

                   </xs:element>

              </xs:sequence>

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

        </xs:complexType>

   </xs:element>

   <xs:element name="map">

        <xs:complexType>

              <xs:sequence minOccurs="0" maxOccurs="unbounded">

                   <xs:element name="key">

                        <xs:complexType>

                             <xs:attribute name="id" type="xs:string"/>

                             <xs:attribute name="value" type="xs:string"/>

                        </xs:complexType>

                   </xs:element>

              </xs:sequence>

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

        </xs:complexType>

   </xs:element>

   <xs:element name="type">

        <xs:complexType>

              <xs:sequence>

                   <xs:element name="include" minOccurs="0" maxOccurs="unbounded">

                        <xs:complexType>

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

                        </xs:complexType>

                   </xs:element>

                   <xs:element ref="template"/>

              </xs:sequence>

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

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

              <xs:attribute name="kind">

                   <xs:simpleType>

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

                             <xs:enumeration value="attribute"/>

                             <xs:enumeration value="container"/>

                        </xs:restriction>

                   </xs:simpleType>

              </xs:attribute>

              <xs:attribute name="container-kind">

                   <xs:simpleType>

                        <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:attribute>

              <xs:attribute name="decoration-hint">

                   <xs:simpleType>

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

                             <xs:enumeration value="map"/>

                             <xs:enumeration value="coll"/>

                        </xs:restriction>

                   </xs:simpleType>

              </xs:attribute>

        </xs:complexType>

   </xs:element>

   <xs:complexType name="template-body" mixed="true">

        <xs:choice minOccurs="0" maxOccurs="unbounded">

              <xs:element name="if">

                   <xs:complexType>

                        <xs:complexContent>

                             <xs:extension base="template-body">

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

                             </xs:extension>

                        </xs:complexContent>

                   </xs:complexType>

              </xs:element>

              <xs:element name="br"/>

              <xs:element name="indent" type="template-body"/>

              <xs:element name="unindent"/>

              <xs:element name="header" type="template-body"/>

              <xs:element name="footer" type="template-body"/>

              <xs:element name="subst"/>

              <xs:element name="foreach">

                   <xs:complexType>

                        <xs:complexContent>

                             <xs:extension base="template-body">

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

                                  <xs:attribute name="reverse" type="xs:boolean"/>

                             </xs:extension>

                        </xs:complexContent>

                   </xs:complexType>

              </xs:element>

              <xs:element name="include">

                   <xs:complexType>

                        <xs:attribute name="tpl" type="xs:string"/>

                   </xs:complexType>

              </xs:element>

              <xs:element name="tab"/>

              <xs:element name="separator" type="template-body"/>

        </xs:choice>

   </xs:complexType>

   <xs:element name="pattern">

        <xs:complexType>

              <xs:all>

                   <xs:element name="body">

                        <xs:complexType>

                             <xs:sequence maxOccurs="unbounded">

                                  <xs:element name="event">

                                        <xs:complexType>

                                             <xs:sequence>

                                                  <xs:element name="j-code" type="xs:string"/>

                                             </xs:sequence>

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

                                        </xs:complexType>

                                  </xs:element>

                             </xs:sequence>

                        </xs:complexType>

                   </xs:element>

              </xs:all>

              <xs:attribute name="kind" type="xs:string"/>

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

        </xs:complexType>

   </xs:element>

</xs:schema>