On 9/14/17 5:08 PM, Kingsley Idehen wrote:
> On 9/14/17 4:52 PM, Kingsley Idehen wrote:
>> On 9/13/17 10:28 AM, Adam Sanchez wrote:
>>> Hi all,
>>>
>>> I am testing SPIN rules in the demo version of Virtuoso 8 but I have
>>> still no success.
>>> I wrote a simple SPIN rule to compute the area of an instance of a
>>> class Rectangle given its width and its height. In this script you can
>>> see all the queries I used. This script must be executed in the SQL
>>> console of Virtuoso 8.
>>>
>>> https://tinyurl.com/yb359owr
>>>
>>> As you can see here at the bottom,
>>>
>>> http://imageshack.com/a/img923/1182/qG4HmJ.png
>>>
>>> the rule is loaded but it does not work when I run a query
>>>
>>> http://imagizer.imageshack.us/a/img922/7629/it260O.png
>>>
>>> For you reference, I was using this output as reference to see how the
>>> loaded rule must look.
>>>
>>> https://tinyurl.com/ycm3zp6p
>>>
>>> Also, I have read these links so far
>>>
>>> https://medium.com/virtuoso-blog/virtuoso-8-0-creating-a-custom-inference-rules-using-spin-vocabulary-d7a060f859ef
>>> https://www.mail-archive.com/virtuoso-users@lists.sourceforge.net/msg07790.html
>>> https://www.linkedin.com/pulse/reasoning-inference-using-british-royal-family-part-idehen
>>> https://medium.com/virtuoso-blog/using-british-royal-family-data-snippets-to-demonstrate-sparql-query-language-based-reasoning-56626a152419
>>> http://docs.openlinksw.com/virtuoso/udt_overview/
>>>
>>> BTW, in RDF4j works. I do not need to load the rule separately, I just
>>> loaded the full ontology and that's all, the SPIN rule worked. See
>>>
>>> http://imagizer.imageshack.us/a/img924/7717/Q9JYau.png
>>> http://imagizer.imageshack.us/a/img924/9828/4dQPzg.png
>>>
>>>
>>> Any idea?
>>>
>>> Thanks in advance,
>>>
>>> Adam
>> Hi Adam,
>>
>> We don't have a problem with Virtuoso's SPIN Rules handling, once a few
>> errors (I assume typos) in your example are fixed. Here's my rendition
>> of what you shared:
>>
>> -- This a SPARQL script to test SPIN Rules in Virtuoso 8
>> --  It should compute the area of an instance of the class Rectangle
>> given its width and its height.
>> -- This script must be run in the SQL console of Virtuoso
>>
>> --  Additional commands
>>
>> SPARQL CLEAR GRAPH <http://geometry> ;
>> SPARQL CLEAR GRAPH <urn:spin:rule:geometry:lib> ;
>> SPARQL DROP SPIN LIBRARY <urn:spin:rule:geometry:lib> ;
>>
>> -- create a named graph
>>
>> -- SPARQL CREATE GRAPH <http://geometry> ;
>>
>> SPARQL
>> PREFIX shapes: <http://example.org/shapes#>
>> PREFIX rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>> PREFIX owl: <http://www.w3.org/2002/07/owl#>
>>
>> WITH <http://geometry>
>> INSERT {
>>         shapes:Rectangle
>>         rdf:type owl:Class .
>>        
>>         shapes:rectangle_1
>>         rdf:type  shapes:Rectangle ;
>>         shapes:height "5" ;
>>         shapes:width  "49" .
>>         shapes:area rdf:type owl:DatatypeProperty .
>>         shapes:height rdf:type owl:DatatypeProperty .
>>         shapes:width rdf:type owl:DatatypeProperty .
>> } ;
>>
>> --  create the rule
>> -- SPARQL CREATE GRAPH <urn:spin:rule:geometry:lib> ;
>>
>> SPARQL
>> PREFIX shapes: <http://example.org/shapes#>
>> PREFIX spin:    <http://spinrdf.org/spin#>
>> PREFIX sp: <http://spinrdf.org/sp#>
>> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
>> PREFIX owl: <http://www.w3.org/2002/07/owl#>
>>
>> WITH <urn:spin:rule:geometry:lib>
>> INSERT {
>>           shapes:Rectangle
>>         rdf:type  owl:Class;
>>         rdfs:label "Rectangle class";
>>         spin:rule [
>>                    a sp:Construct;
>>                    sp:text """ CONSTRUCT { ?this
>> <http://example.org/shapes#area> ?area . }
>>                                WHERE { ?this
>> <http://example.org/shapes#width> ?width .
>>                                           ?this
>> <http://example.org/shapes#height> ?height .
>>                                        BIND ((xsd:float(?height) *
>> xsd:float(?width)) AS ?area) .
>>                                      }
>>                           """
>>                   ] .
>> } ;
>>
>> EXEC ('SPARQL ' ||
>> SPARQL_SPIN_GRAPH_TO_DEFSPIN('urn:spin:rule:geometry:lib'));
>>
>> --  run a sparql query to test the spin rule
>>
>> SPARQL
>> DEFINE input:macro-lib <urn:spin:rule:geometry:lib>
>> PREFIX shapes: <http://example.org/shapes#>
>>
>> SELECT *
>> WHERE
>>     {
>>         ?s shapes:width ?w.
>>         ?s shapes:height ?h.
>>         OPTIONAL { ?s shapes:area  ?area }.
>>     } ;
>>
>>
>> All you have to do is copy, paste, and then run the script above  via
>> the HTM-based Admin UI (Conductor) or iSQL command-line (using LOAD
>> <{file-name}>).
>>
>> As proof, I've loaded the script above into our public URIBurner
>> instance, and have a sample SPARQL Query Result URI to share [1].
>>
>> In relation to RDF4J and SPIN, you are making the mistake of comparing a
>> RDF Data Access Layer  (what RDF4J is) and a DBMS engine (what Virtuoso
>> is). In both cases, a context for handling Custom Inference Rules needs
>> to be established. In the case of Virtuoso, why should loading an
>> Ontology imply Reasoning and Inference Context initialization for all
>> users? In our opinion that is extremely dangerous and impractical, hence
>> our use of pragmas that explicitly initialize Reasoning & Inference
>> Context per SPARQL Query.
>>
>> Links:
>>
>> [1]
>> http://linkeddata.uriburner.com/sparql?default-graph-uri=&query=DEFINE+input%3Amacro-lib+%3Curn%3Aspin%3Arule%3Ageometry%3Alib%3E%0D%0APREFIX+shapes%3A+%3Chttp%3A%2F%2Fexample.org%2Fshapes%23%3E%0D%0A%0D%0ASELECT+*%0D%0AWHERE%0D%0A++++%7B%0D%0A++++++++%3Fs+shapes%3Awidth+%3Fw.%0D%0A++++++++%3Fs+shapes%3Aheight+%3Fh.%0D%0A++++++++OPTIONAL+%7B+%3Fs+shapes%3Aarea++%3Farea+%7D.%0D%0A++++%7D&should-sponge=&format=text%2Fhtml&CXML_redir_for_subjs=121&CXML_redir_for_hrefs=&timeout=30000000
>> -- SPARQL Query Results page where solution is constructed with Custom
>> Reasoning & Inference Context enabled.
>
>
> Adam,
>
> Okay, the syntax worked, but I just realized the solution is incorrect
> i.e., it doesn't change in response to enabling or disabling inference
> context pragma.
>
> The rule itself might be suffering from an issue with BIND. Either
> way, I'll confirm in another mail.
>

Adam,

Fixed script (note changes made to samples queries) which has been
applied to our URIBurner instance:

-- This a SPARQL script to test SPIN Rules in Virtuoso 8
--  It should compute the area of an instance of the class Rectangle
given its width and its height.
-- This script must be run in the SQL console of Virtuoso

--  Additional commands

SPARQL CLEAR GRAPH <http://geometry> ;
SPARQL CLEAR GRAPH <urn:spin:rule:geometry:lib> ;
SPARQL DROP SPIN LIBRARY <urn:spin:rule:geometry:lib> ;

-- create a named graph

-- SPARQL CREATE GRAPH <http://geometry> ;

SPARQL
PREFIX shapes: <http://example.org/shapes#>
PREFIX rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

WITH <http://geometry>
INSERT {
        shapes:Rectangle
        rdf:type owl:Class .
       
        shapes:rectangle_1
        rdf:type  shapes:Rectangle ;
        shapes:height "5" ;
        shapes:width  "49" .
        shapes:area rdf:type owl:DatatypeProperty .
        shapes:height rdf:type owl:DatatypeProperty .
        shapes:width rdf:type owl:DatatypeProperty .
} ;

-- Test Generated Data Control Check

SPARQL

PREFIX shapes: <http://example.org/shapes#>
PREFIX spin:    <http://spinrdf.org/spin#>
PREFIX sp: <http://spinrdf.org/sp#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

# CONSTRUCT { ?this <http://example.org/shapes#area> ?area . }
SELECT ?this ?area
FROM <http://geometry>
WHERE {
        ?this <http://example.org/shapes#width> ?width .
        ?this <http://example.org/shapes#height> ?height .
        BIND ((xsd:float(?height) * xsd:float(?width)) AS ?area) .
      } ;     
   

--  create the rule
-- SPARQL CREATE GRAPH <urn:spin:rule:geometry:lib> ;

SPARQL
PREFIX shapes: <http://example.org/shapes#>
PREFIX spin:    <http://spinrdf.org/spin#>
PREFIX sp: <http://spinrdf.org/sp#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

WITH <urn:spin:rule:geometry:lib>
INSERT {
          shapes:Rectangle
        rdf:type  owl:Class;
        rdfs:label "Rectangle class";
        spin:rule [
                   a sp:Construct;
                   sp:text """
                               CONSTRUCT { ?this
<http://example.org/shapes#area> ?area }
                               WHERE {
                                       {
                                           SELECT ?this
(xsd:float(?height) * xsd:float(?width)) AS ?area
                                           WHERE {
                                                       ?this
<http://example.org/shapes#width> ?width ;
                                                            
<http://example.org/shapes#height> ?height .
                             
                                                     # BIND
((xsd:float(?height) * xsd:float(?width)) AS ?area) .
                                                 }
                                       }
                                       }
                          """
                  ] .
        } ;

EXEC ('SPARQL ' ||
SPARQL_SPIN_GRAPH_TO_DEFSPIN('urn:spin:rule:geometry:lib'));

--  run a sparql query to test the spin rule

-- Test 1 (Reasoning & Inference Context Enabled )

SPARQL

DEFINE input:macro-lib <urn:spin:rule:geometry:lib>
PREFIX shapes: <http://example.org/shapes#>

SELECT *
FROM <http://geometry>
WHERE
    {
        ?s a shapes:Rectangle ;
           shapes:area  ?area .
    } ;

-- Test 2 (Reasoning & Inference Context Disabled )
   
SPARQL

# DEFINE input:macro-lib <urn:spin:rule:geometry:lib>
PREFIX shapes: <http://example.org/shapes#>

SELECT *
FROM <http://geometry>
WHERE
    {
        ?s a shapes:Rectangle ;
           shapes:area  ?area .
    } ;
   
-- Test 3 (Reasoning & Inference Context Enabled )

SPARQL

DEFINE input:macro-lib <urn:spin:rule:geometry:lib>
PREFIX shapes: <http://example.org/shapes#>

SELECT ?s xsd:float(?w) xsd:float(?h) xsd:float(?area)
FROM <http://geometry>
WHERE
    {
        ?s a shapes:Rectangle;
           shapes:width ?w ;
           shapes:height ?h .
        OPTIONAL { ?s shapes:area  ?area }.
    } ;

-- Test 4 (Reasoning & Inference Context Disabled )

SPARQL

# DEFINE input:macro-lib <urn:spin:rule:geometry:lib>
PREFIX shapes: <http://example.org/shapes#>

SELECT ?s xsd:float(?w) xsd:float(?h) xsd:float(?area)
FROM <http://geometry>
WHERE
    {
        ?s a shapes:Rectangle;
           shapes:width ?w ;
           shapes:height ?h .
        OPTIONAL { ?s shapes:area  ?area }.
    }

Links:

[1]
http://linkeddata.uriburner.com/sparql/?default-graph-uri=&query=DEFINE+input%3Amacro-lib+%3Curn%3Aspin%3Arule%3Ageometry%3Alib%3E%0D%0APREFIX+shapes%3A+%3Chttp%3A%2F%2Fexample.org%2Fshapes%23%3E%0D%0A%0D%0ASELECT+%3Fs+xsd%3Afloat%28%3Fw%29+xsd%3Afloat%28%3Fh%29+xsd%3Afloat%28%3Farea%29+%0D%0AFROM+%3Chttp%3A%2F%2Fgeometry%3E%0D%0AWHERE%0D%0A%09%7B%0D%0A%09%09%3Fs+a+shapes%3ARectangle%3B%0D%0A%09%09+++shapes%3Awidth+%3Fw+%3B%0D%0A%09%09+++shapes%3Aheight+%3Fh+.%0D%0A%09%09OPTIONAL+%7B+%3Fs+shapes%3Aarea++%3Farea+%7D.%0D%0A%09%7D&should-sponge=&format=text%2Fhtml&CXML_redir_for_subjs=121&CXML_redir_for_hrefs=&timeout=30000000
 
-- SPARQL Query Results Page



-- 
Regards,

Kingsley Idehen       
Founder & CEO 
OpenLink Software   (Home Page: http://www.openlinksw.com)

Weblogs (Blogs):
Legacy Blog: http://www.openlinksw.com/blog/~kidehen/
Blogspot Blog: http://kidehen.blogspot.com
Medium Blog: https://medium.com/@kidehen

Profile Pages:
Pinterest: https://www.pinterest.com/kidehen/
Quora: https://www.quora.com/profile/Kingsley-Uyi-Idehen
Twitter: https://twitter.com/kidehen
Google+: https://plus.google.com/+KingsleyIdehen/about
LinkedIn: http://www.linkedin.com/in/kidehen

Web Identities (WebID):
Personal: http://kingsley.idehen.net/public_home/kidehen/profile.ttl#i
        : 
http://id.myopenlink.net/DAV/home/KingsleyUyiIdehen/Public/kingsley.ttl#this

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Virtuoso-users mailing list
Virtuoso-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/virtuoso-users

Reply via email to