From: Harold Boley ([email protected])
Date: 09/30/03
Hi All,
below, please find our prefinal CONCRETE SYNTAX FOR RULES LITE
update, incorporating the only remaining change requests:
C1 Sandro's suggestion to use N3-like namespace declarations
in the PR syntax ('xmlns' is used in the XML syntax).
C2 Mike's suggestion to disallow 'data' elements as 1st args
(making RULES LITE a kind of RDF Rules).
Best,
Harold
-----------------------------------------------------------------
CONCRETE SYNTAX FOR RULES LITE
Draft 30 Sept 2003
Harold Boley and Said Tabet
Abstract
--------
A new Abridged RuleML/XML Syntax compatible with RDF and OWL-DL is
developed into the Rules Lite Concrete Syntax. This covers webized
unary and binary Datalog facts, rules, and queries. Principles,
Prolog-like and XML examples, as well as a DTD are given.
Acknowledgments
---------------
Gerd Wagner, Benjamin Grosof, and others from the RuleML Initiative
as well as Mike Dean and Sandro Hawke from the Joint Committee gave
valuable input for this document. David Hirtle from UNB has helped
validating the examples.
Introduction
============
This is our report on the Rules Lite Concrete Syntax work for
Datalog facts, rules, and queries, envisaged in recent JC telecons.
In this work all predicates are now going to be unary or binary
(compatible with OWL-DL). Certain unary predicates could also be
employed for typing some of the rule variables (the others being
of type 'any'), as discussed in an earlier series of JC telecons
(http://www.daml.org/listarchive/joint-committee/1230.html).
By allowing OWL's allValuesFrom and someValuesFrom restrictions
(http://www.w3.org/TR/owl-guide/#allValuesFrom) in Rules Lite's
bodies and (perhaps) heads, the concrete syntax could be further
adapted to the recent OWL Rules proposal:
http://www.daml.org/listarchive/joint-committee/1430.html
For preparing Webizing, the following use of "#"-prefixed
fragment identifiers is made for symbolic 'href'-attribute naming:
The earlier <ind>constant</ind> now
becomes <ind href="#constant"/>
The earlier <_opr>relation</_opr> now
becomes <_opr href="#relation"/>
While the (always empty) 'ind' element is used -- in the first or
second argument position -- for 'href'-naming individual constants,
a new 'data' element is used -- in the second argument position --
for tagging various data types as content (cf. RDF literals).
An Abridged RuleML/XML Syntax is employed except for
Herbrand Models, which are represented using Deep Markup:
*1* The earlier <_opr><rel>relation</rel></_opr> will be
abridged to <_opr href="#relation/>.
*2* The earlier <_body><and>atom1...atomK</and></_body> will be
abridged to <_body>atom1...atomK</_body> (K = 0, 1, ...).
*3* Similarly, <_head><and>atom1...atomK</and></_head> could be
abridged to <_head>atom1...atomK</_head> (for OWL Rules).
*4* Prefix form <atom><_opr href="#relation/>term1...termN</atom>
will be allowed (0 < N < 3);
Postfix form <atom>term1...termN<_opr href="#relation/></atom>
will be forbidden (0 < N < 3).
*5* The earlier <fact><_head><atom>...</atom></_head></fact> will
be further abridged to <facto>...</facto>.
While this is a concrete XML syntax, it builds on a data model
integrating the data models of XML and RDF: A role like _opr
corresponds to an RDF property (used as an arc label in its DLG
model). The concrete syntax in *4* becomes an 'atom'-rooted tree
with the operator and a sequence of the 1 or 2 argument terms as
subtrees in the abstract syntax.
In the next main sections PR-Prolog examples will be followed by
Abridged RuleML/XML syntax (except for the Deep RuleML/XML Markup
of Models):
* PR-Prolog: Uses a Prolog-like presentation syntax as proposed in
http://www.daml.org/listarchive/joint-committee/1406.html.
(The current PR syntax does not yet capture all information that
is in the XML syntax such as the new ind/data distinction or the
namespace declarations to be modeled on N3.)
* XML: Uses a version of the Abridged RuleML/XML syntax proposed in
http://www.daml.org/listarchive/joint-committee/1411.html.
The following sections discuss Facts, Rules, Queries (also usable
as 'positive' or 'negative' integrity constraints), and Models.
A general form of webizing will then be introduced for individuals
as well as for for unary and binary predicates.
The appendix will give the (DTD) syntax grammar.
Facts
=====
Since an N-ary relation can always be reduced to a conjunction of
binary predicates, we will not go beyond binary here.
For instance, the fact
"North America is flanked by the Atlantic and the Pacific"
may initially seem to express a ternary relationship, but it can,
e.g., be re-expressed using three binary facts glued together by a
new individual, Oceanics, as shown as part of the knowledge base
below.
PR-Prolog:
continent(North_America).
country(Canada).
country(USA).
province(Ontario).
oceanpair(Oceanics).
ocean(Atlantic).
ocean(Pacific).
has_as_part(North_America,Canada).
has_as_part(North_America,USA).
has_as_part(Canada,Ontario).
area(Canada,sqkm9976140).
area(USA,sqkm9629091).
flanked_by(North_America,Oceanics).
flanked_by(Canada,Oceanics).
flanked_by(USA,Oceanics).
eastern(Oceanics,Atlantic).
western(Oceanics,Pacific).
XML:
<rulebase>
<facto>
<_opr href="#continent"/>
<ind href="#North_America"/>
</facto>
<facto>
<_opr href="#country"/>
<ind href="#Canada"/>
</facto>
<facto>
<_opr href="#country"/>
<ind href="#USA"/>
</facto>
<facto>
<_opr href="#province"/>
<ind href="#Ontario"/>
</facto>
<facto>
<_opr href="#oceanpair"/>
<ind href="#Oceanics"/>
</facto>
<facto>
<_opr href="#ocean"/>
<ind href="#Atlantic"/>
</facto>
<facto>
<_opr href="#ocean"/>
<ind href="#Pacific"/>
</facto>
<facto>
<_opr href="#has_as_part"/>
<ind href="#North_America"/>
<ind href="#Canada"/>
</facto>
<facto>
<_opr href="#has_as_part"/>
<ind href="#North_America"/>
<ind href="#USA"/>
</facto>
<facto>
<_opr href="#has_as_part"/>
<ind href="#Canada"/>
<ind href="#Ontario"/>
</facto>
<facto>
<_opr href="#area"/>
<ind href="#Canada"/>
<data>sqkm 9976140</data>
</facto>
<facto>
<_opr href="#area"/>
<ind href="#USA"/>
<data>sqkm 9629091</data>
</facto>
<facto>
<_opr href="#flanked_by"/>
<ind href="#North_America"/>
<ind href="#Oceanics"/>
</facto>
<facto>
<_opr href="#flanked_by"/>
<ind href="#Canada"/>
<ind href="#Oceanics"/>
</facto>
<facto>
<_opr href="#flanked_by"/>
<ind href="#USA"/>
<ind href="#Oceanics"/>
</facto>
<facto>
<_opr href="#eastern"/>
<ind href="#Oceanics"/>
<ind href="#Atlantic"/>
</facto>
<facto>
<_opr href="#western"/>
<ind href="#Oceanics"/>
<ind href="#Pacific"/>
</facto>
</rulebase>
Rules
=====
PR-Prolog:
stretches(?x,?y) :- has_as_part(?y,?x), co-flanked(?x,?y).
co-flanked(?x,?y) :- flanked_by(?x,?z), flanked_by(?y,?z).
XML:
<rulebase>
<imp>
<_head>
<atom>
<_opr href="#stretches"/>
<var>x</var>
<var>y</var>
</atom>
</_head>
<_body>
<atom>
<_opr href="#has_as_part"/>
<var>y</var>
<var>x</var>
</atom>
<atom>
<_opr href="#co-flanked"/>
<var>x</var>
<var>y</var>
</atom>
</_body>
</imp>
<imp>
<_head>
<atom>
<_opr href="#co-flanked"/>
<var>x</var>
<var>y</var>
</atom>
</_head>
<_body>
<atom>
<_opr href="#flanked_by"/>
<var>x</var>
<var>z</var>
</atom>
<atom>
<_opr href="#flanked_by"/>
<var>y</var>
<var>z</var>
</atom>
</_body>
</imp>
</rulebase>
Conjunctive Queries (as 'Negative' Integrity Constraints)
=========================================================
PR-Prolog:
continent(x), ocean(x)
XML:
<query>
<_body>
<atom>
<_opr href="#continent"/>
<var>x</var>
</atom>
<atom>
<_opr href="#ocean"/>
<var>x</var>
</atom>
</_body>
</query>
Herbrand-like Models (as Deep Markup Ground Facts)
==================================================
Herbrand-like Models are represented using the unabridged Deep Markup
(close to the abstract syntax).
PR-Prolog:
continent(North_America).
country(Canada).
country(USA).
province(Ontario).
oceanpair(Oceanics).
ocean(Atlantic).
ocean(Pacific).
has_as_part(North_America,Canada).
has_as_part(Canada,Ontario).
has_as_part(North_America,Ontario). % from OWL
area(Canada,sqkm9976140).
area(USA,sqkm9629091).
flanked_by(North_America,Oceanics).
flanked_by(Canada,Oceanics).
flanked_by(USA,Oceanics).
flanks(Oceanics,North_America). % from OWL
flanks(Oceanics,Canada). % from OWL
flanks(Oceanics,USA). % from OWL
co-flanked(North_America,Canada).
co-flanked(Canada,North_America).
co-flanked(North_America,USA).
co-flanked(USA,North_America).
co-flanked(Canada,USA).
co-flanked(USA,Canada).
co-flanked(North_America,North_America).
co-flanked(Canada,Canada).
co-flanked(USA,USA).
stretches(Canada,North_America).
stretches(USA,North_America).
eastern(Oceanics,Atlantic).
western(Oceanics,Pacific).
XML:
<rulebase>
<fact>
<_head>
<atom>
<_opr><rel href="#continent"/></_opr>
<ind href="#North_America"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#country"/></_opr>
<ind href="#Canada"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#country"/></_opr>
<ind href="#USA"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#province"/></_opr>
<ind href="#Ontario"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#oceanpair"/></_opr>
<ind href="#Oceanics"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#ocean"/></_opr>
<ind href="#Atlantic"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#ocean"/></_opr>
<ind href="#Pacific"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#has_as_part"/></_opr>
<ind href="#North_America"/>
<ind href="#Canada"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#has_as_part"/></_opr>
<ind href="#North_America"/>
<ind href="#USA"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#has_as_part"/></_opr>
<ind href="#Canada"/>
<ind href="#Ontario"/>
</atom>
</_head>
</fact>
<fact> <!-- from OWL -->
<_head>
<atom>
<_opr><rel href="#has_as_part"/></_opr>
<ind href="#North_America"/>
<ind href="#Ontario"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#area"/></_opr>
<ind href="#Canada"/>
<data>sqkm 9976140</data>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#area"/></_opr>
<ind href="#USA"/>
<data>sqkm 9629091</data>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#flanked_by"/></_opr>
<ind href="#North_America"/>
<ind href="#Oceanics"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#flanked_by"/></_opr>
<ind href="#Canada"/>
<ind href="#Oceanics"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#flanked_by"/></_opr>
<ind href="#USA"/>
<ind href="#Oceanics"/>
</atom>
</_head>
</fact>
<fact> <!-- from OWL -->
<_head>
<atom>
<_opr><rel href="#flanks"/></_opr>
<ind href="#Oceanics"/>
<ind href="#North_America"/>
</atom>
</_head>
</fact>
<fact> <!-- from OWL -->
<_head>
<atom>
<_opr><rel href="#flanks"/></_opr>
<ind href="#Oceanics"/>
<ind href="#Canada"/>
</atom>
</_head>
</fact>
<fact> <!-- from OWL -->
<_head>
<atom>
<_opr><rel href="#flanks"/></_opr>
<ind href="#Oceanics"/>
<ind href="#USA"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#co-flanked"/></_opr>
<ind href="#North_America"/>
<ind href="#Canada"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#co-flanked"/></_opr>
<ind href="#Canada"/>
<ind href="#North_America"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#co-flanked"/></_opr>
<ind href="#North_America"/>
<ind href="#USA"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#co-flanked"/></_opr>
<ind href="#USA"/>
<ind href="#North_America"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#co-flanked"/></_opr>
<ind href="#Canada"/>
<ind href="#USA"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#co-flanked"/></_opr>
<ind href="#USA"/>
<ind href="#Canada"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#co-flanked"/></_opr>
<ind href="#North_America"/>
<ind href="#North_America"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#co-flanked"/></_opr>
<ind href="#Canada"/>
<ind href="#Canada"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#co-flanked"/></_opr>
<ind href="#USA"/>
<ind href="#USA"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#eastern"/></_opr>
<ind href="#Oceanics"/>
<ind href="#Atlantic"/>
</atom>
</_head>
</fact>
<fact>
<_head>
<atom>
<_opr><rel href="#western"/></_opr>
<ind href="#Oceanics"/>
<ind href="#Pacific"/>
</atom>
</_head>
</fact>
</rulebase>
Webizing
========
Individuals as well as unary and binary predicates can be webized
by augmenting, within the href's, their symbolic "#"-names by URIs,
so that two possibilities result:
*1* Symbolic names: In XML with "#"-prefixed fragment identifiers
(the pre-webized situation).
*2* URIs: In XML with "#"-separated fragment identifiers (cf. RDF).
PR-Prolog (with N3-like URIs and namespace declarations):
w := http://www.waters.org.
continent(<http://www.north_america.org#North_America>).
...
<http://www.pairs.org/ocean#oceanpair>(<w#Oceanics>).
...
<http://www.mereology.org#has_as_part>(North_America,Canada).
...
<http://www.direction.org#western>(<w#Oceanics>,Pacific).
XML:
<rulebase
xmlns:w="http://www.waters.org">
<facto>
<_opr href="#continent"/>
<ind href="http://www.north_america.org#North_America"/>
</facto>
...
<facto>
<_opr href="http://www.pairs.org/ocean#oceanpair"/>
<ind href="w#Oceanics"/>
</facto>
...
<facto>
<_opr href="http://www.mereology.org#has_as_part"/>
<ind href="#North_America"/>
<ind href="#Canada"/>
</facto>
...
<facto>
<_opr href="http://www.direction.org#western"/>
<ind href="w#Oceanics"/>
<ind href="#Pacific"/>
</facto>
</rulebase>
Conclusions
===========
After the definition of the Rules Lite Concrete Syntax, the next
step is to modify existing parsers (and generators), allowing this
syntax to be used for rule interchange. Possible implementations
have been envisaged for cwm, Jena 2, OWL engines, jDREW, and Jess
adaptations.
To demonstrate the extension path to N-ary relations, ternary
predicates could be added later as exemplified in
http://www.daml.org/listarchive/joint-committee/1444.html;
as an alternative or complement, the transition to full Horn logic
could be attempted, where data like sqkm9976140 could be 'analyzed'
as complex terms like sqkm[9976140].
Appendix: DTD for Rules Lite (Facts and Rules)
==============================================
<!ELEMENT rulebase ((imp | facto)*)>
<!ELEMENT imp ((_head, _body) | (_body, _head))>
<!ELEMENT facto (_opr, ind, (ind | data)?)>
<!ELEMENT _head (atom)>
<!ELEMENT _body (atom*)>
<!ELEMENT atom (_opr, (ind | var), (ind | data | var)?)>
<!ELEMENT _opr EMPTY>
<!ELEMENT ind EMPTY>
<!ELEMENT data (#PCDATA)>
<!ELEMENT var (#PCDATA)>
<!ATTLIST _opr href CDATA #REQUIRED>
<!ATTLIST ind href CDATA #REQUIRED>
<!-- The CDATA must be either
URIs with "#"-separated fragment identifiers (for URI naming) or
local, "#"-prefixed fragment identifiers (for symbolic naming) -->
This archive was generated by hypermail 2.1.4 : 09/30/03 EST