Re: SeRQL an RDF rule language: scoping Rules vs Query in W3C work

Hi Dan, Mark, and All,

> - there are not just overlaps between rdf-query and rdf-rules, but also
> potentially with XSLT, XPath and XQuery, and of course RuleML. Unfortunately
> this may not make things easier from an organizational perspective.

RuleML has acted as an umbrella keeping these approaches together.

Consider Dan's Sesame example (with another art:Painting type added):

CONSTRUCT
    {Artist} <rdf:type> {<art:Painter>};
             <art:hasPainted> {Painting} <rdf:type> {<art:Painting>}
FROM
    {Artist} <rdf:type> {<art:Artist>};
             <art:hasCreated> {Painting} <rdf:type> {<art:Painting>}

A directly corresponding version would be a (functional) query that for
successful hasCreated calls returns hasPainted terms:

<query>
  <_body>
    <atom>
      <_opr><rel>art:hasCreated</rel></_opr>
      <var rdf:type="art:Artist">Artist</var>
      <var rdf:type="art:Painting">Painting</var>
    </atom>
  </_body>
  <_foot>
    <cterm>
      <_opc><ctor>art:hasPainted</ctor></_opc>
      <var rdf:type="art:Painter">Artist</var>
      <var rdf:type="art:Painting">Painting</var>
    </cterm>
  </_foot>
</query>

This could be extended to Mark's recursive function perspective by
defining a trans[formation] rule that for hasDone calls again tests
hasCreated and on success returns hasPainted terms:

<trans>
  <_head>
    <nano>
      <_opf><fun>act:hasDone</fun></_opf>
      <var rdf:type="being:Human">Artist</var>
      <var rdf:type="act:Deed">Painting</var>
    </nano>
  </_head>
  <_body>
    <atom>
      <_opr><rel>art:hasCreated</rel></_opr>
      <var rdf:type="art:Artist">Artist</var>
      <var rdf:type="art:Painting">Painting</var>
    </atom>
  </_body>
  <_foot>
    <cterm>
      <_opc><ctor>art:hasPainted</ctor></_opc>
      <var rdf:type="art:Painter">Artist</var>
      <var rdf:type="art:Painting">Painting</var>
    </cterm>
  </_foot>
</trans>

The example can also be defined as an imp[lication] rule ('view')
that for hasCreated facts derives hasPainted facts:

<imp>
  <_body>
    <atom>
      <_opr><rel>art:hasCreated</rel></_opr>
      <var rdf:type="art:Artist">Artist</var>
      <var rdf:type="art:Painting">Painting</var>
    </atom>
  </_body>
  <_head>
    <atom>
      <_opr><rel>art:hasPainted</rel></_opr>
      <var rdf:type="art:Painter">Artist</var>
      <var rdf:type="art:Painting">Painting</var>
    </atom>
  </_head>
</imp>

This can also be used backward in the equivalent form

<imp>
  <_head>
    <atom>
      <_opr><rel>art:hasPainted</rel></_opr>
      <var rdf:type="art:Painter">Artist</var>
      <var rdf:type="art:Painting">Painting</var>
    </atom>
  </_head>
  <_body>
    <atom>
      <_opr><rel>art:hasCreated</rel></_opr>
      <var rdf:type="art:Artist">Artist</var>
      <var rdf:type="art:Painting">Painting</var>
    </atom>
  </_body>
</imp>

to reduce the (relational) query

<query>
  <_body>
    <atom>
      <_opr><rel>art:hasPainted</rel></_opr>
      <var rdf:type="art:Painter">Artist</var>
      <var rdf:type="art:Painting">Painting</var>
    </atom>
  </_body>
</query>

to another query, which might succeed via facts ('table rows'):

<query>
  <_body>
    <atom>
      <_opr><rel>art:hasCreated</rel></_opr>
      <var rdf:type="art:Artist">Artist</var>
      <var rdf:type="art:Painting">Painting</var>
    </atom>
  </_body>
</query>

The Description Logic flavor of the example could be captured
using the OWL RuleML combination currently developed in the JC
(http://www.daml.org/listarchive/joint-committee/1499.html).

Best,
Harold

Received on Monday, 3 November 2003 21:09:24 UTC