/
TestSPARQLQuery.scala
83 lines (76 loc) · 3.51 KB
/
TestSPARQLQuery.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package org.phenoscape.owlet
import org.apache.jena.query.{QueryExecutionFactory, QueryFactory}
import org.apache.jena.rdf.model.ModelFactory
import org.semanticweb.elk.owlapi.ElkReasonerFactory
import org.semanticweb.owlapi.apibinding.OWLManager
import org.semanticweb.owlapi.reasoner.InferenceType
import utest._
import scala.jdk.CollectionConverters._
import scala.util.Using
object TestSPARQLQuery extends TestSuite {
private val manager = OWLManager.createOWLOntologyManager()
private val vsao = Using.resource(this.getClass.getClassLoader.getResourceAsStream("vsao.owl")) { vsaoStream =>
manager.loadOntologyFromOntologyDocument(vsaoStream)
}
private val reasoner = new ElkReasonerFactory().createReasoner(vsao)
reasoner.precomputeInferences(InferenceType.CLASS_HIERARCHY)
override def utestAfterAll(): Unit = reasoner.dispose()
val tests: Tests = Tests {
test("Test SPARQL query using filter") - {
val vsaoRDF = Using.resource(this.getClass.getClassLoader.getResourceAsStream("vsao.owl")) { stream =>
ModelFactory.createDefaultModel().read(stream, null)
}
val queryText =
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ow: <http://purl.org/phenoscape/owlet/syntax#>
PREFIX axial_skeleton: <http://purl.obolibrary.org/obo/VSAO_0000056>
PREFIX definition: <http://purl.obolibrary.org/obo/IAO_0000115>
PREFIX part_of: <http://purl.obolibrary.org/obo/BFO_0000050>
SELECT DISTINCT ?structure ?label ?definition
WHERE
{
?structure rdfs:label ?label .
?structure definition: ?definition .
?structure rdfs:subClassOf "part_of: some axial_skeleton:"^^ow:omn .
}
"""
val owlet = new Owlet(TestSPARQLQuery.reasoner)
val query = QueryFactory.create(queryText)
val unexpandedResults = QueryExecutionFactory.create(query, vsaoRDF).execSelect()
//Shouldn't get any results before expansion
assert(!unexpandedResults.hasNext)
val expandedQuery = owlet.expandQuery(query, false)
val results = QueryExecutionFactory.create(expandedQuery, vsaoRDF).execSelect()
assert(7 == results.asScala.length)
}
test("Test SPARQL query using values") - {
val vsaoRDF = Using.resource(this.getClass.getClassLoader.getResourceAsStream("vsao.owl")) { stream =>
ModelFactory.createDefaultModel().read(stream, null)
}
val queryText =
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ow: <http://purl.org/phenoscape/owlet/syntax#>
PREFIX axial_skeleton: <http://purl.obolibrary.org/obo/VSAO_0000056>
PREFIX definition: <http://purl.obolibrary.org/obo/IAO_0000115>
PREFIX part_of: <http://purl.obolibrary.org/obo/BFO_0000050>
SELECT DISTINCT ?structure ?label ?definition
WHERE
{
?structure rdfs:label ?label .
?structure definition: ?definition .
?structure rdfs:subClassOf "part_of: some axial_skeleton:"^^ow:omn .
}
"""
val owlet = new Owlet(TestSPARQLQuery.reasoner)
val query = QueryFactory.create(queryText)
val unexpandedResults = QueryExecutionFactory.create(query, vsaoRDF).execSelect()
// Shouldn't get any results before expansion
assert(!unexpandedResults.hasNext)
val expandedQuery = owlet.expandQuery(query, true)
val results = QueryExecutionFactory.create(expandedQuery, vsaoRDF).execSelect()
assert(7 == results.asScala.length)
}
}
}