Как магазин триплетов решает, добавлять ли "фоновые" тройки?
Я использую несколько разных триплетов и код на R и Scala. Я думаю, что я вижу некоторые различия в:
- включают ли триплеты триплеты, кроме тех, которые я явно загрузил.
- точка, в которой эти "фоновые" тройки могут быть добавлены.
Существуют ли какие-либо общие правила для необходимости добавления вспомогательных словарей, независимо от технологии реализации?
Используя Jena в 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 .
Но иногда кажется, что тройки из RDF и RDFS появляются, когда я добавляю или удаляю тройки впоследствии. Это то, что "беспокоит" меня больше всего, но сейчас у меня проблемы с поиском примера. Если никто не знает, что я имею в виду, я выкопаю кое-что позже сегодня.
Когда я использую Blazegraph в Scala через библиотеку 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 .
1 ответ
Существуют ли какие-либо общие правила для необходимости добавления вспомогательных словарей, независимо от технологии реализации?
Это зависит от схемы логического вывода, которую ваш триплет-магазин требует поддержки. Для чистого хранилища RDF (без логического вывода) никакие дополнительные тройки не должны добавляться вообще.
Судя по тому фрагменту, который вы показали, в хранилище Blazegraph, которое вы использовали, было включено как минимум RDFS-вывод (и, возможно, частичное рассуждение OWL?). Обратите внимание, что это зависит от магазина, а не от фреймворка, так что это не вещь Йены против Сезама: обе фреймворки поддерживают магазины, которые либо делают, либо не делают рассуждения. Конечно, если вы используете какую-либо платформу и используете предложенную ими опцию "исключенные предполагаемые тройки", резервное хранилище должно учитывать этот параметр конфигурации и не включать в результат такие предполагаемые тройки.