2017-06-15 27 views
1

我使用几个不同的三重商店,并在代码R斯卡拉。我想我看到一些差异:三重奏如何决定是否添加“背景”三元组?

  • 三重商店是否包含明确加载的三元组以外的三元组。
  • 可能会添加这些“背景”三元组的点。

是否有支持词汇表是否需要添加的一般规则,而与实现技术无关?

[R使用耶拿,通过rrdf,我通常只看到我装:

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 . 

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

当我使用Blazegraph斯卡拉,通过OpenRDF芝麻库,我想我总是得到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或tput的包括这样的块:

rdfs:isDefinedBy rdfs:domain rdfs:Resource ; 
    rdfs:range rdfs:Resource ; 
    rdfs:subPropertyOf rdfs:isDefinedBy , rdfs:seeAlso . 
+1

我只能回答耶拿。如果您在RDFS配置文件中使用OntModel,则默认情况下将添加RDF和RDFS词汇以及公理三元组。请参阅https://www.w3.org/TR/rdf11-mt/#rdfs-interpretations – AKSW

+0

谢谢,这是有道理的。 rrdf是Jena上的一个包装器,并且它提供**创建** ** **新**模型作为**本体**的选项。在从字符串或文件加载三元组时,它不会给出该选项。你能想到在事实之后会注入RDF和RDFS词汇的任何情况吗? –

回答

2

是否有配套的词汇是否需要添加,独立于实现技术的一般规则?

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

从您展示的片段判断,您使用的Blazegraph存储至少具有RDFS推理(并且可能还有部分OWL推理?)。请注意,这是商店特定的,而不是框架,所以它不是一个耶拿与芝麻的事情:这两个框架支持做或不做推理的商店。当然,如果您使用任一框架并使用它们提供的“排除推断的三元组”选项,则支持存储应该遵守该配置选项,并且不在结果中包含此推断的三元组。

+0

谢谢,好点。想想看,我当然不会在推理禁用的情况下初始化我的blazegraph商店。所以现在我觉得我知道那里会发生什么。当我通过rrdf在R中使用Jena时,我仍然不确定发生了什么。我想我还没有很好地解释过它,昨天我无法再现它。 –