Thanks Kingsley! It is working now. Regards, Adam On Fri, Sep 15, 2017 at 2:16 AM, Kingsley Idehen <kide...@openlinksw.com> wrote: > 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 >
------------------------------------------------------------------------------ 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