Warning:
This wiki has been archived and is now read-only.
PRD Schema
From RIF
Back to Schema Index
This is the proposed schema for PRD, divided into sections.
Contents
Head
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
targetNamespace="http://www.w3.org/2007/rif#"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.w3.org/2007/rif#"
elementFormDefault="qualified">
Inclusion of Core condition part
<!-- ================================================== -->
<!-- Redefine some elements in the Core Conditions -->
<!-- Extension of some choices -->
<!-- ================================================== -->
<xs:redefine schemaLocation="CoreRule.xsd">
<xs:group name="ATOMIC">
<xs:choice>
<xs:group ref="ATOMIC"/>
<xs:element ref="Member"/>
</xs:choice>
</xs:group>
<xs:group name="FORMULA">
<xs:choice>
<xs:group ref="FORMULA"/>
<xs:element ref="NEGATEDFORMULA"/>
<!-- TODO: Check if subclass is in FORMULA -->
<xs:element ref="Subclass"/>
</xs:choice>
</xs:group>
Inclusion of Core rule body part
<!-- ================================================== -->
<!-- Redefine some elements in the Core constructs -->
<!-- ================================================== -->
<xs:complexType name="Group-contents">
<xs:complexContent>
<xs:extension base="Group-contents">
<xs:sequence>
<!-- Adds the following elements to the existing IRIMETA and sentence -->
<xs:element ref="behavior" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ================================================== -->
<!-- We have decided not to have an extension mechanism -->
<!-- Keep this just in case we changed mind -->
<!-- ================================================== -->
<!--
<xs:complexType name="Forall-premises">
<xs:complexContent>
<xs:extension base="Forall-premises">
<xs:sequence>
<xs:element name="pattern" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:group ref="FORMULA"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
-->
<xs:complexType name="then-part">
<xs:complexContent>
<xs:extension base="then-part">
<xs:choice>
<xs:element ref="Do"/>
<xs:group ref="ATOMIC"/>
</xs:choice>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:redefine>
Additional elements to the Core schema
<!-- ================================================== -->
<!-- Additional elements to the Core schema -->
<!-- ================================================== -->
<xs:element name="Subclass">
<xs:complexType>
<xs:sequence>
<xs:element name="sub">
<xs:complexType>
<xs:group ref="TERM" minOccurs="1" maxOccurs="1"/>
</xs:complexType>
</xs:element>
<xs:element name="super">
<xs:complexType>
<xs:group ref="TERM" minOccurs="1" maxOccurs="1"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:group name="NEGATEDFORMULA">
<!--
NEGATEDFORMULA ::= 'INeg' '(' FORMULA ')'
-->
<xs:sequence>
<xs:element ref="INeg"/>
</xs:sequence>
</xs:group>
<!-- Previsouly named NmNot -->
<xs:element name="INeg">
<xs:complexType>
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element ref="formula" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Definition of the actions
<!-- ============================================ -->
<!-- Definition of the actions -->
<!-- ============================================ -->
<!-- ACTION_BLOCK ::= IRIMETA? ('Do (' (Var (Frame | 'New'))* ATOMIC_ACTION+ ')' |
'And (' (Atom | Frame)* ')' | Atom | Frame) -->
<xs:group name="ACTION_BLOCK">
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:choice>
<xs:element ref="Do"/>
<xs:element ref="And"/>
<xs:element ref="Atom"/>
<xs:element ref="Frame"/>
</xs:choice>
</xs:sequence>
</xs:group>
<!-- 'Do (' (IRIMETA? Var (Frame | 'New'))* ATOMIC_ACTION+ ')'--->
<xs:element name="Do">
<xs:complexType>
<xs:sequence>
<xs:element ref="actionVar" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="actions" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="actionVar">
<xs:complexType>
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:element name="Var" minOccurs="1" maxOccurs="1"/>
<xs:element name="ACTIONVARIABLEDECLARATION" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="ordered" type="xs:string" fixed="yes"/>
</xs:complexType>
</xs:element>
<xs:element name="actions">
<xs:complexType>
<xs:sequence>
<xs:group ref="ATOMIC_ACTION" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="ordered" type="xs:string" fixed="yes"/>
</xs:complexType>
</xs:element>
<!-- The New element is always empty. -->
<xs:element name="New">
</xs:element>
<!--
<xs:group name="ACTIONVARIABLEDECLARATION">
<xs:choice>
<xs:element ref="New"/>
<xs:element ref="Frame"/>
</xs:choice>
</xs:group>
<!-- ATOMIC_ACTION ::= IRIMETA? (Assert | Retract | Modify | Execute ) -->
<xs:group name="ATOMIC_ACTION">
<xs:sequence>
<xs:group ref="IRIMETA" minOccurs="0" maxOccurs="1"/>
<xs:choice>
<xs:element ref="Assert"/>
<xs:element ref="Retract"/>
<xs:element ref="Modify"/>
<xs:element ref="Execute"/>
</xs:choice>
<xs:sequence>
</xs:group>
<!-- Assert ::= 'Assert' '(' Atom | Frame | Member ')'-->
<xs:element name="Assert">
<xs:complexType>
<xs:choice>
<xs:element name="target" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:choice>
<xs:element ref="Atom"/>
<xs:element ref="Frame"/>
<xs:element ref="Member"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<!-- Retract ::= 'Retract' '(' ( Atom | Frame | Var | Const ) ')'-->
<xs:element name="Retract">
<xs:complexType>
<xs:choice>
<xs:element name="target" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:choice>
<xs:element ref="Atom"/>
<xs:element ref="Frame"/>
<xs:group ref="TERM"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<!-- Modify ::= 'Modify' '(' Frame ')'-->
<xs:element name="Modify">
<xs:complexType>
<xs:sequence>
<xs:element name="target" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:choice>
<xs:element ref="Frame"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Execute ::= 'Execute' '(' Atom ')'-->
<xs:element name="Execute">
<xs:complexType>
<xs:sequence>
<xs:element name="target" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:choice>
<xs:element ref="Atom"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- ============================================ -->
<!-- Document and group related additions -->
<!-- ============================================ -->
<xs:element name="behavior">
<xs:complexType>
<xs:sequence>
<xs:element name="ConflictResolution" minOccurs="0" maxOccurs="1" type="xs:anyURI"/>
<xs:element name="Priority" minOccurs="0" maxOccurs="1" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>