blob: ba9a59157331460e654d43e6bb5adece4ff1c3d4 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:rules="http://drools.org/rules" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
targetNamespace="http://drools.org/rules">
<xs:element name="rule-set">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="rules:abstractImport"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="rules:application-data"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="rules:abstractFunctions"/>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="rules:rule"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="description" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="rule">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="parameter">
<xs:complexType>
<xs:choice>
<xs:element ref="rules:abstractClass"/>
<xs:element ref="rules:class-field"/>
<xs:element ref="rules:semaphore"/>
</xs:choice>
<xs:attribute name="identifier" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" ref="rules:abstractCondition"/>
<xs:element minOccurs="0" name="duration">
<xs:complexType>
<xs:attribute name="days" type="xs:nonNegativeInteger"/>
<xs:attribute name="hours" type="xs:nonNegativeInteger"/>
<xs:attribute name="minutes" type="xs:nonNegativeInteger"/>
<xs:attribute name="seconds" type="xs:nonNegativeInteger"/>
</xs:complexType>
</xs:element>
<xs:element ref="rules:abstractConsequence"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="salience" type="xs:integer"/>
<xs:attribute name="no-loop" type="xs:boolean"/>
<xs:attribute name="xor-group" type="xs:string"/>
<xs:attribute name="description" type="xs:string"/>
</xs:complexType>
<!-- All rules must have unique names -->
<xs:key name="ruleName">
<xs:selector xpath="rules:rule"/>
<xs:field xpath="@name"/>
</xs:key>
</xs:element>
<xs:element name="class" substitutionGroup="rules:abstractClass" type="xs:string"/>
<xs:element name="class-field">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="field" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="import" substitutionGroup="rules:abstractImport" type="xs:string"/>
<xs:element name="semaphore">
<xs:complexType>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="String"/>
<xs:enumeration value="Integer"/>
<xs:enumeration value="Long"/>
<xs:enumeration value="Boolean"/>
<xs:enumeration value="Char"/>
<xs:enumeration value="Short"/>
<xs:enumeration value="Float"/>
<xs:enumeration value="Double"/>
<xs:enumeration value="List"/>
<xs:enumeration value="Map"/>
<xs:enumeration value="Set"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="application-data">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="identifier" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<!-- Abstract Definitions for sementic to create concrete implementations -->
<xs:element abstract="true" name="abstractImport" type="xs:anyType"/>
<xs:element abstract="true" name="abstractFunctions" type="xs:anyType"/>
<xs:element abstract="true" name="abstractClass" type="xs:anyType"/>
<xs:element abstract="true" name="abstractClassField" type="xs:anyType"/>
<xs:element abstract="true" name="abstractCondition" type="xs:anyType"/>
<xs:element abstract="true" name="abstractConsequence" type="xs:anyType"/>
</xs:schema>