我使用了一些不同的三重存储,并在 R 和 Scala 中编码。我想我看到了一些不同之处:
是否需要添加支持词汇表的一般规则,与实施技术无关?
R 我装的是什么:
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 的三元组。这就是“困扰”我的最多,但我现在很难找到一个例子。如果没有人知道我的意思,我今天晚些时候会挖掘一些东西。
当我在 Scala 中使用 Blazegraph 时,通过 OpenRDF Sesame库,我想我 总是 免费获取 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 .
答案 0 :(得分:2)
是否有任何关于是否需要添加支持词汇表的一般规则,与实现技术无关?
这取决于您的triplestore声称支持的推理方案。对于纯RDF存储(无推理),不应添加额外的三元组。
从你展示的那个片段判断,你使用的Blazegraph商店至少启用了RDFS推理(也可能是部分OWL推理?)。请注意,这是 store - 特定的,而不是框架,所以它不是Jena vs. Sesame的东西:两个框架都支持那些做或不做推理的商店。当然,如果您使用任一框架并使用&#34;排除推断的三元组&#34;他们提供的选项,后备存储应尊重该配置选项,并且不在结果中包含此类推断的三元组。