-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
existential heads implemented and tested in XSD
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
Showing
2 changed files
with
390 additions
and
0 deletions.
There are no files selected for viewing
106 changes: 106 additions & 0 deletions
106
exa/DatalogPlus/datalogex_min/datalogex_min_normal.ruleml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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> |