Установите базовый URI при загрузке троек с использованием Jena tdbloader

Я хотел бы установить базовый URL-адрес при загрузке данных в Fuseki с помощью tdbloader или же tdbloader2, В настоящее время в качестве базы используется локальный путь, а это не то, что я хочу. Пример:

# mytriple.ttl

@prefix owl: <http://www.w3.org/2002/07/owl#> .
<#myitem> a owl:Thing .

./tdbloader --loc /path/to/database /path/to/local/file/mytriple.ttl

# sparql query example

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>    
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT ?subject ?predicate ?object
WHERE {
  ?subject ?predicate ?object .
  ?subject a owl:Thing .
}

Результат запроса:

<file:///path/to/local/file/mytriple.ttl#myitem> rdf:type owl:Thing

Это (1) не очень чисто, чтобы иметь в базе данных и (2) это приводит к проблемам с обслуживаемостью, когда я хочу запросить конкретный элемент, когда необходимо указать базу:

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?subject ?predicate ?object
WHERE {
  ?subject a owl:Thing .
  <file:///path/to/local/file/mytriple.ttl#myitem> ?predicate ?object .
}

или же

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
BASE <file:///path/to/local/file/mytriple.ttl>
SELECT ?subject ?predicate ?object
WHERE {
  ?subject a owl:Thing .
  <#myitem> ?predicate ?object .
}

Как я могу указать другую базу в tdbloader, например <mydomain:myontology#>?

1 ответ

Решение

Положить в BASE или же @base утверждение в данные. Таким образом, данные будут стабильными - они будут обеспечивать одинаковые тройки при использовании в любом месте.

Или чтобы избежать редактирования файла:

cat "MyBase.ttl" "MyData.ttl" > D.ttl 
tdbloader --loc DB D.ttl
Другие вопросы по тегам