Skip to content

Commit

Permalink
existential heads implemented and tested in XSD
Browse files Browse the repository at this point in the history
Note: there is a discrepancy between this schema for a "normal" form and the documents created by the Version 1.0 normalizer
in regard to the attributes with default values (material, etc.)
These attribute are not allowed in this sublanguage, yet they are made explicit by the normalizer.
  • Loading branch information
greenTara committed Mar 11, 2014
1 parent b671b8b commit 48118d6
Show file tree
Hide file tree
Showing 2 changed files with 390 additions and 0 deletions.
106 changes: 106 additions & 0 deletions exa/DatalogPlus/datalogex_min/datalogex_min_normal.ruleml
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8"?>
<RuleML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ruleml.org/spec http://deliberation.ruleml.org/1.01/xsd/datalogex_min_normal.xsd"
xmlns="http://ruleml.org/spec">
<!-- a syntactic example rulebase for testing the RuleML Existential Rules sublanguage -->
<act index="1">
<Assert>
<!-- Every manager directs at least one department. -->
<formula>
<Forall>
<declare>
<Var>M</Var>
</declare>
<formula>
<Implies>
<if>
<Atom>
<op><Rel>manager</Rel></op>
<arg index="1"><Ind>x</Ind></arg>
</Atom>
</if>
<then>
<Exists>
<declare>
<Var>P</Var>
</declare>
<formula>
<Atom>
<op><Rel>directs</Rel></op>
<arg index="1"><Var>M</Var></arg>
<arg index="2"><Var>P</Var></arg>
</Atom>
</formula>
</Exists>
</then>
</Implies>
</formula>
</Forall>
</formula>
<!-- The heads and bodies of existential rules can contain conjunctions. -->
<!-- Every employee who directs a department is a manager, and supervises at least another employee who works in the same department -->
<formula>
<Forall>
<declare>
<Var>E</Var>
</declare>
<declare>
<Var>P</Var>
</declare>
<formula>
<Implies>
<if>
<And>
<formula>
<Atom>
<op><Rel>employee</Rel></op>
<arg index="1"><Var>E</Var></arg>
</Atom>
</formula>
<formula>
<Atom>
<op><Rel>directs</Rel></op>
<arg index="1"><Var>E</Var></arg>
<arg index="2"><Var>P</Var></arg>
</Atom>
</formula>
</And>
</if>
<then>
<Exists>
<declare>
<Var>E'</Var>
</declare>
<formula>
<And>
<formula>
<Atom>
<op><Rel>manager</Rel></op>
<arg index="1"><Var>E</Var></arg>
</Atom>
</formula>
<formula>
<Atom>
<op><Rel>supervises</Rel></op>
<arg index="1"><Var>E</Var></arg>
<arg index="2"><Var>E'</Var></arg>
</Atom>
</formula>
<formula>
<Atom>
<op><Rel>works_in</Rel></op>
<arg index="1"><Var>E'</Var></arg>
<arg index="2"><Var>P</Var></arg>
</Atom>
</formula>
</And>
</formula>
</Exists>
</then>
</Implies>
</formula>
</Forall>
</formula>
</Assert>
</act>
</RuleML>
284 changes: 284 additions & 0 deletions xsd/datalogex_min_normal.xsd
Original file line number Diff line number Diff line change
@@ -0,0 +1,284 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://ruleml.org/spec" xmlns:spec="http://ruleml.org/spec">
<xs:element name="RuleML">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="spec:act"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Assert">
<xs:complexType>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="spec:formula"/>
</xs:complexType>
</xs:element>
<xs:element name="Retract">
<xs:complexType>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="spec:formula"/>
</xs:complexType>
</xs:element>
<xs:element name="Query">
<xs:complexType>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="spec:formula_2"/>
</xs:complexType>
</xs:element>
<xs:element name="Atom">
<xs:complexType>
<xs:sequence>
<xs:element ref="spec:op"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="spec:arg"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Rel">
<xs:complexType mixed="true">
<xs:attribute name="iri" type="xs:anyURI"/>
</xs:complexType>
</xs:element>
<xs:group name="And">
<xs:sequence>
<xs:element name="And">
<xs:complexType>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="spec:formula_3"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:element name="Or">
<xs:complexType>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="spec:formula_4"/>
</xs:complexType>
</xs:element>
<xs:element name="Implies">
<xs:complexType>
<xs:sequence>
<xs:element ref="spec:if"/>
<xs:element ref="spec:then"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Forall">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="spec:declare"/>
<xs:group ref="spec:formula_5"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:group name="Exists">
<xs:sequence>
<xs:element name="Exists">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="spec:declare"/>
<xs:group ref="spec:formula_6"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:element name="Data">
<xs:complexType mixed="true">
<xs:group minOccurs="0" maxOccurs="unbounded" ref="spec:_1"/>
</xs:complexType>
</xs:element>
<xs:element name="Ind">
<xs:complexType mixed="true">
<xs:attribute name="iri" type="xs:anyURI"/>
</xs:complexType>
</xs:element>
<xs:element name="Var" type="xs:string"/>
<xs:group name="formula">
<xs:sequence>
<xs:element name="formula">
<xs:complexType>
<xs:choice>
<xs:element ref="spec:Atom"/>
<xs:element ref="spec:Implies"/>
<xs:element ref="spec:Forall"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="formula_2">
<xs:sequence>
<xs:element name="formula">
<xs:complexType>
<xs:choice>
<xs:element ref="spec:Atom"/>
<xs:group ref="spec:And"/>
<xs:element ref="spec:Or"/>
<xs:group ref="spec:Exists"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:element name="op">
<xs:complexType>
<xs:sequence>
<xs:element ref="spec:Rel"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:group name="formula_3">
<xs:sequence>
<xs:element name="formula">
<xs:complexType>
<xs:choice>
<xs:element ref="spec:Atom"/>
<xs:group ref="spec:And_2"/>
<xs:element ref="spec:Or"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="formula_4">
<xs:sequence>
<xs:element name="formula">
<xs:complexType>
<xs:choice>
<xs:element ref="spec:Atom"/>
<xs:group ref="spec:And_2"/>
<xs:element ref="spec:Or"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:element name="then">
<xs:complexType>
<xs:choice>
<xs:element ref="spec:Atom"/>
<xs:group ref="spec:And_3"/>
<xs:group ref="spec:Exists_2"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="if">
<xs:complexType>
<xs:choice>
<xs:element ref="spec:Atom"/>
<xs:group ref="spec:And_2"/>
<xs:element ref="spec:Or"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="declare">
<xs:complexType>
<xs:sequence>
<xs:element ref="spec:Var"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:group name="formula_5">
<xs:sequence>
<xs:element name="formula">
<xs:complexType>
<xs:choice>
<xs:element ref="spec:Atom"/>
<xs:element ref="spec:Implies"/>
<xs:element ref="spec:Forall"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="formula_6">
<xs:sequence>
<xs:element name="formula">
<xs:complexType>
<xs:choice>
<xs:element ref="spec:Atom"/>
<xs:group ref="spec:And_2"/>
<xs:element ref="spec:Or"/>
<xs:group ref="spec:Exists"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:element name="arg">
<xs:complexType>
<xs:choice>
<xs:element ref="spec:Ind"/>
<xs:element ref="spec:Data"/>
<xs:element ref="spec:Var"/>
</xs:choice>
<xs:attribute name="index" use="required" type="xs:positiveInteger"/>
</xs:complexType>
</xs:element>
<xs:element name="act">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="spec:Assert"/>
<xs:element ref="spec:Retract"/>
<xs:element ref="spec:Query"/>
</xs:choice>
<xs:attribute name="index" use="required" type="xs:positiveInteger"/>
</xs:complexType>
</xs:element>
<xs:group name="_1">
<xs:sequence>
<xs:any processContents="lax"/>
</xs:sequence>
</xs:group>
<xs:group name="And_2">
<xs:sequence>
<xs:element name="And">
<xs:complexType>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="spec:formula_3"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="And_3">
<xs:sequence>
<xs:element name="And">
<xs:complexType>
<xs:group minOccurs="0" maxOccurs="unbounded" ref="spec:formula_7"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="Exists_2">
<xs:sequence>
<xs:element name="Exists">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="spec:declare"/>
<xs:group ref="spec:formula_8"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="formula_7">
<xs:sequence>
<xs:element name="formula">
<xs:complexType>
<xs:choice>
<xs:element ref="spec:Atom"/>
<xs:group ref="spec:And_3"/>
<xs:group ref="spec:Exists_2"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
<xs:group name="formula_8">
<xs:sequence>
<xs:element name="formula">
<xs:complexType>
<xs:choice>
<xs:element ref="spec:Atom"/>
<xs:group ref="spec:And_3"/>
<xs:group ref="spec:Exists_2"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:group>
</xs:schema>

0 comments on commit 48118d6

Please sign in to comment.