-- Clean Up SPARQL CLEAR GRAPH ; SPARQL DROP SPIN LIBRARY ; -- LOAD Rule Description SPARQL prefix sp: prefix spl: prefix spin: prefix rdf: prefix rdfs: prefix xsd: prefix foaf: prefix rel: prefix wdrs: prefix schema: prefix sioc: prefix owl: INSERT { GRAPH { sioc:Item a rdfs:Class ; rdfs:label "An Item"^^xsd:string ; spin:rule [ a sp:Construct, spin:Rule ; rdfs:label "Latitude Rule -- via SPASQL" ; rdfs:comment """Handler for different kinds of Latitude oriented fields (relations). This particular rule has been loaded into Virtuoso via SQL (using SPASQL functionality)""" ; sp:text """ CONSTRUCT { ?this <#hasLatitude> ?n. } WHERE { FILTER (contains(str(?p),"latitude") || contains(str(?p),"Latitude") ) . ?this ?p ?n } """ ] ; spin:rule [ a sp:Construct, spin:Rule; rdfs:label "Longitude Rule -- via SPASQL" ; rdfs:comment """Handler for different kinds of Longitude oriented fields (relations). This particular rule has been loaded into Virtuoso via SQL (using SPASQL functionality)""" ; sp:text """ CONSTRUCT { ?this <#hasLongitude> ?n. } WHERE { FILTER (contains(str(?p),"longitude") || contains(str(?p),"Longitude") ) . ?this ?p ?n } """ ] . } } ; -- Macro Generation -- For diagnostic for reading what's generated from SPIN descriptions -- SELECT SPARQL_SPIN_GRAPH_TO_DEFSPIN('urn:spin:rule:geospatial:lib'); -- Actual Macro Generation EXEC ('SPARQL ' || SPARQL_SPIN_GRAPH_TO_DEFSPIN('urn:spin:rule:geospatial:lib')); -- Test Queries -- Data Set #1 SPARQL DEFINE get:soft "soft" DEFINE input:macro-lib SELECT ?x ?y ?z FROM WHERE { ?x a sioc:Item . ?x <#hasLatitude> ?y. ?x <#hasLongitude> ?z. } ; -- Data Set #2 SPARQL DEFINE get:soft "soft" DEFINE input:macro-lib SELECT ?y ?z FROM FROM FROM WHERE { ?x a sioc:Item . ?x <#hasLatitude> ?y . ?x <#hasLongitude> ?z . }