-- Cleanup -- Inference Basis: schema:SoftwareApplication owl:disjointWith oplprod:ProductRelease . -- Named Graphs SPARQL CLEAR GRAPH ; SPARQL CLEAR GRAPH ; SPARQL CLEAR GRAPH ; -- Built-in Inference Rule DELETE FROM sys_rdf_schema WHERE rs_name = 'urn:website:new2018:rules'; -- Define the rules SPARQL PREFIX owl: PREFIX oplfeat: PREFIX oplben: PREFIX oplsoft: PREFIX oplprod: PREFIX schema: PREFIX rdfs: PREFIX virtuoso: PREFIX cs: PREFIX rs: PREFIX rsn: PREFIX v70: PREFIX v80: PREFIX vrscloud: PREFIX vrscloudss: INSERT DATA { GRAPH { rdfs:subPropertyOf a owl:TransitiveProperty . rdfs:subClassOf a owl:TransitiveProperty . oplprod:ProductRelease rdfs:subClassOf schema:SoftwareApplication . } GRAPH { # oplprod:ProductRelease rdfs:subClassOf schema:SoftwareApplication . cs:this a oplprod:ProductRelease . rs:this a oplprod:ProductRelease . rsn:this a oplprod:ProductRelease . v70:this a oplprod:ProductRelease . v80:this a oplprod:ProductRelease . vrscloud:this a oplprod:ProductRelease . vrscloudss:this a oplprod:ProductRelease . virtuoso:this a schema:SoftwareApplication ; oplprod:hasRelease cs:this, rs:this, rsn:this, v70:this, v80:this, vrscloud:this, vrscloudss:this . } }; COMMIT WORK; SPARQL PREFIX owl: PREFIX oplfeat: PREFIX oplben: PREFIX oplsoft: PREFIX oplprod: INSERT { GRAPH { ?s a oplprod:ProductRelease ; oplfeat:hasFeature ?feat . } } WHERE { SELECT ?s ?feat FROM WHERE { ?s a oplprod:ProductRelease ; oplfeat:hasFeature ?feat . } } ; COMMIT WORK ; -- Ensuring there are no schema:SoftwareApplication instances -- as these are to be materialized via inference rule invocation SPARQL WITH DELETE { ?s a schema:SoftwareApplication . } ; COMMIT WORK; -- Rules Setup RDFS_RULE_SET ('urn:website:new2018:rules', 'urn:website:new2018:rules:def') ; COMMIT work; -- Confirm Rule Creation SELECT * FROM sys_rdf_schema WHERE rs_name = 'urn:website:new2018:rules'; -- Test Query 1 SPARQL DEFINE input:inference 'urn:website:new2018:rules' PREFIX owl: PREFIX oplfeat: PREFIX oplben: PREFIX oplsoft: PREFIX oplprod: SELECT DISTINCT COUNT(*) AS ?count ## SELECT DISTINCT ?prod oplfeat:hasFeature ?feat FROM FROM # FROM WHERE { ?app a schema:SoftwareApplication . }; -- Test Query 2 SPARQL # DEFINE input:inference 'urn:website:new2018:rules' PREFIX owl: PREFIX oplfeat: PREFIX oplben: PREFIX oplsoft: PREFIX oplprod: SELECT DISTINCT COUNT(*) AS ?count ## SELECT DISTINCT ?prod oplfeat:hasFeature ?feat FROM FROM # FROM WHERE { ?app a schema:SoftwareApplication . }; -- Test Query 3 SPARQL DEFINE input:inference 'urn:website:new2018:rules' PREFIX owl: PREFIX oplfeat: PREFIX oplben: PREFIX oplsoft: PREFIX oplprod: ## SELECT DISTINCT COUNT(*) AS ?count SELECT DISTINCT ?app oplfeat:hasFeature as ?relation ?feat FROM FROM # FROM WHERE { ?app a schema:SoftwareApplication ; oplfeat:hasFeature ?feat . } ; -- Test Query 4 SPARQL # DEFINE input:inference 'urn:website:new2018:rules' PREFIX owl: PREFIX oplfeat: PREFIX oplben: PREFIX oplsoft: PREFIX oplprod: ## SELECT DISTINCT COUNT(*) AS ?count SELECT DISTINCT ?app oplfeat:hasFeature as ?relation ?feat FROM FROM # FROM WHERE { ?app a schema:SoftwareApplication ; oplfeat:hasFeature ?feat . } ; -- Test Query 5 SPARQL DEFINE input:inference 'urn:website:new2018:rules' PREFIX oplfeat: PREFIX oplben: PREFIX oplsoft: PREFIX oplprod: PREFIX schema: SELECT sample(?app) as ?sample count(1) as ?count ?type FROM FROM # FROM WHERE { ?app a ?type. filter (?type in (schema:SoftwareApplication, oplprod:ProductRelease)) } GROUP BY ?type ORDER BY desc(?count) ; -- Test Query 6 SPARQL # DEFINE input:inference 'urn:website:new2018:rules' PREFIX oplfeat: PREFIX oplben: PREFIX oplsoft: PREFIX oplprod: PREFIX schema: SELECT sample(?app) as ?sample count(1) as ?count ?type FROM FROM # FROM WHERE { ?app a ?type. filter (?type in (schema:SoftwareApplication, oplprod:ProductRelease)) } GROUP BY ?type ORDER BY desc(?count) ;