1

我使用了几个不同的三元存储,以及RScala中的代码。我认为我在以下方面看到了一些差异:

  • 三元组是否包括我明确加载的三元组以外的三元组。
  • 可以添加这些“背景”三元组的点。

对于是否需要添加支持词汇表,是否有任何通用规则,独立于实现技术?

通过rrdfR中使用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 .

但有时,当我之后添加或删除三元组时,似乎会出现来自RDFRDFS的三元组。 这就是最让我“困扰”的地方,但我现在很难找到一个例子。如果没有人知道我的意思,我今天晚些时候会挖掘一些东西。

当我通过OpenRDF Sesame libraryScala中使用Blazegraph时,我想我总是“免费”获得RDFRDFSOWL

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 .
4

1 回答 1

2

对于是否需要添加支持词汇表,是否有任何通用规则,独立于实现技术?

这取决于您的 Triplestore 声称支持的推理方案。对于纯 RDF 存储(无推理),根本不应该添加额外的三元组。

从您展示的那个片段来看,您使用的 Blazegraph 存储至少启用了 RDFS 推理(可能还有部分 OWL 推理?)。请注意,这是特定于商店的,而不是框架,因此它不是 Jena 与芝麻的事情:两个框架都支持做或不做推理的商店。当然,如果您使用任一框架并使用它们提供的“排除推断三元组”选项,则后备存储应尊重该配置选项,并且在结果中不包括此类推断三元组。

于 2017-06-15T23:49:04.333 回答