Miguel,

not exactly sure, but maybe SPIN rules could help you?
http://spinrdf.org/spin.html#spin-rules

Martynas

On Fri, Dec 6, 2013 at 1:20 AM, Miguel Bento Alves
<[email protected]> wrote:
> Is it possible call a Sparql command in a rule? Can we do that with a custom
> built-in function?
>
> An example:
>
> let's consider that I have the classes Student, Course and Lesson. Lesson is
> related with Course. I have an ObjectProperty wasFailedBy that defines that
> a given student fails to a given lesson (I list my schema and my data
> example below). I want to define an ObjectProperty isDiligent that defines
> that a given student is diligent to a given course. I consider that a given
> student is diligent to a given course if he didn't fails more than a given
> number of lessons (let's consider 1). I can't get this information with OWL
> or OWL2 inference, I only can get with a Sparql command.
>
> I'm thinking to define my rule in this way:
>
> (?Student ex:isDiligent ?Course) <-
> (?Student rdf:type ex:Student),
> (?Course rdf:type ex:Course),
> execSparql('
> prefix exa: <http://www.example.org/example#>
> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
> SELECT (COUNT(1) AS ?nCount)
> WHERE {
> ?V1_Student ex:failsTo ?Lesson .
> ?Lesson exa:isLessonOf ?V2_Course .
> }', ?Student, ?Course, ?NCount),
> le(?NCount, 1).
>
> In my idea, the custom built-in function execSparql receives as parameters a
> string with a Sparql command, a list of instanced variables to be replaced
> inside the function and will return the result in the last variable passed
> as parameter. I didn't implemented yet because I have doubts if this is the
> better approach. My main doubts is:
> Can I execute a Sparql command inside a custom built-in function using de
> RuleContext?
> Can I use a custom built-in function only to be an external access from the
> rule and call the Sparql command, for instance via Web Service, to my
> inference engine? Any better ideas?
>
>
> <?xml version="1.0"?>
>
>
> <!DOCTYPE rdf:RDF [
>     <!ENTITY owl "http://www.w3.org/2002/07/owl#"; >
>     <!ENTITY exa "http://www.example.org/example#"; >
>     <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#"; >
>     <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#"; >
>     <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#"; >
> ]>
>
>
> <rdf:RDF xmlns="http://www.example.org/example#";
>      xml:base="http://www.example.org/example#";
>      xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#";
>      xmlns:owl="http://www.w3.org/2002/07/owl#";
>      xmlns:xsd="http://www.w3.org/2001/XMLSchema#";
>      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
>      xmlns:exa="http://www.example.org/example#";>
>
>
>
>     <!--
>
> ////////////////////////////////////////////////////////////////////////////
> ///////////
>     //
>     // Object Properties
>     //
>
> ////////////////////////////////////////////////////////////////////////////
> ///////////
>      -->
>
> <owl:ObjectProperty rdf:about="&exa;isLessonOf">
>         <rdfs:label>wasFailedBy</rdfs:label>
>         <rdfs:domain rdf:resource="&exa;Lesson"/>
>         <rdfs:range rdf:resource="&exa;Course"/>
>     </owl:ObjectProperty>
>
>
> <owl:ObjectProperty rdf:about="&exa;wasFailedBy">
>         <rdfs:label>wasFailedBy</rdfs:label>
>         <rdfs:domain rdf:resource="&exa;Lesson"/>
>         <rdfs:range rdf:resource="&exa;Student"/>
>     </owl:ObjectProperty>
>
>     <owl:ObjectProperty rdf:about="&exa;failsTo">
>         <rdfs:label>failsTo</rdfs:label>
>         <owl:inverseOf rdf:resource="&exa;wasFailedBy"/>
>     </owl:ObjectProperty>
>
>
>     <!--
>
> ////////////////////////////////////////////////////////////////////////////
> ///////////
>     //
>     // Classes
>     //
>
> ////////////////////////////////////////////////////////////////////////////
> ///////////
>      -->
>
>    <owl:Class rdf:about="&exa;Student">
>         <rdfs:label>Student</rdfs:label>
>     </owl:Class>
>
>    <owl:Class rdf:about="&exa;Course">
>         <rdfs:label>Course</rdfs:label>
>     </owl:Class>
>
>    <owl:Class rdf:about="&exa;Lesson">
>         <rdfs:label>Lesson</rdfs:label>
>     </owl:Class>
>
>
>
>     <!--
>
> ////////////////////////////////////////////////////////////////////////////
> ///////////
>     //
>     // Individuals
>     //
>
> ////////////////////////////////////////////////////////////////////////////
> ///////////
>      -->
>
>
>     <owl:Thing rdf:about="&exa;Databases">
>         <rdfs:label>Databases</rdfs:label>
>         <rdf:type rdf:resource="&exa;Course"/>
>     </owl:Thing>
>
>
>
>     <owl:Thing rdf:about="&exa;ComputerProgramming">
>         <rdfs:label>Computer Programming</rdfs:label>
>         <rdf:type rdf:resource="&exa;Course"/>
>     </owl:Thing>
>
>
> <owl:Thing rdf:about="&exa;Michael">
>         <rdfs:label>Michael</rdfs:label>
>         <rdf:type rdf:resource="&exa;Student"/>
>     </owl:Thing>
>
> <owl:Thing rdf:about="&exa;Richard">
>         <rdfs:label>Richard</rdfs:label>
>         <rdf:type rdf:resource="&exa;Student"/>
>     </owl:Thing>
>
> <owl:Thing rdf:about="&exa;LessonDB1">
>         <rdf:type rdf:resource="&exa;Lesson"/>
>         <isLessonOf rdf:resource="&exa;Databases"/>
>     <wasFailedBy rdf:resource="&exa;Michael"/>
>     </owl:Thing>
>
> <owl:Thing rdf:about="&exa;LessonDB2">
>         <rdf:type rdf:resource="&exa;Lesson"/>
>         <isLessonOf rdf:resource="&exa;Databases"/>
>     <wasFailedBy rdf:resource="&exa;Michael"/>
>     <wasFailedBy rdf:resource="&exa;Richard"/>
>     </owl:Thing>
>
>     <owl:Thing rdf:about="&exa;LessonCP1">
>         <rdf:type rdf:resource="&exa;Lesson"/>
>         <isLessonOf rdf:resource="&exa;ComputerProgramming"/>
>     <wasFailedBy rdf:resource="&exa;Richard"/>
>     </owl:Thing>
>
>     <owl:Thing rdf:about="&exa;LessonCP2">
>         <rdf:type rdf:resource="&exa;Lesson"/>
>         <isLessonOf rdf:resource="&exa;ComputerProgramming"/>
>         <wasFailedBy rdf:resource="&exa;Michael"/>
>     <wasFailedBy rdf:resource="&exa;Richard"/>
>     </owl:Thing>
>
> </rdf:RDF>
>
>
>

Reply via email to