我使用了几个不同的三元存储,以及R和Scala中的代码。我认为我在以下方面看到了一些差异:
- 三元组是否包括我明确加载的三元组以外的三元组。
- 可以添加这些“背景”三元组的点。
对于是否需要添加支持词汇表,是否有任何通用规则,独立于实现技术?
通过rrdf在R中使用Jena,我通常只看到我加载的内容:
library(rrdf)
turtle.input.string <-
"PREFIX prefix: <http://example.com/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix:subject rdf:type prefix:object"
jena.model <-
fromString.rdf(rdfContent = turtle.input.string, format = "TURTLE")
model.string <- asString.rdf(jena.model, format = "TURTLE")
cat(model.string)
这给出了:
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix prefix: <http://example.com/> .
prefix:subject a prefix:object .
但有时,当我之后添加或删除三元组时,似乎会出现来自RDF和RDFS的三元组。 这就是最让我“困扰”的地方,但我现在很难找到一个例子。如果没有人知道我的意思,我今天晚些时候会挖掘一些东西。
当我通过OpenRDF Sesame library在Scala中使用Blazegraph时,我想我总是“免费”获得RDF、RDFS和OWL
import java.util.Properties
import org.openrdf.query.QueryLanguage
import org.openrdf.rio._
import com.bigdata.journal._
import com.bigdata.rdf.sail._
object InjectionTest {
val jnl_fn = "sparql_tests.jnl"
def main(args: Array[String]): Unit = {
val props = new Properties()
props.put(Options.BUFFER_MODE, BufferMode.DiskRW)
props.put(Options.FILE, jnl_fn)
val sail = new BigdataSail(props)
val repo = new BigdataSailRepository(sail)
repo.initialize()
val cxn = repo.getConnection()
val resultStream = new java.io.ByteArrayOutputStream
val resultWriter = Rio.createWriter(RDFFormat.TURTLE, resultStream)
val ConstructString = "construct {?s ?p ?o} where {?s ?p ?o}"
cxn.prepareGraphQuery(QueryLanguage.SPARQL, ConstructString).evaluate(resultWriter)
var resString = resultStream.toString()
println(resString)
}
}
即使不添加任何三元组,construct
输出也会包含如下块:
rdfs:isDefinedBy rdfs:domain rdfs:Resource ;
rdfs:range rdfs:Resource ;
rdfs:subPropertyOf rdfs:isDefinedBy , rdfs:seeAlso .