当前位置: 首页 > 知识库问答 >
问题:

tbloader vs SPARQL INSERT-为什么命名图的行为不同?

楚涵润
2023-03-14

在ARQ、TDB和命名图的命令行工具的连接中有一种奇怪的行为。如果在命名图中通过tdbloader导入数据,则不能通过SPARQL SELECT查询中的graph子句查询数据。但是,当使用SPARQL INSERT在同一图中插入数据时,可以进行此查询。

我有以下汇编程序描述文件tdb.ttl:

@prefix rdfs:   <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ja:     <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix tdb:     <http://jena.hpl.hp.com/2008/tdb#> .


[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
tdb:DatasetTDB  rdfs:subClassOf  ja:RDFDataset .
tdb:GraphTDB    rdfs:subClassOf  ja:Model .

[] rdf:type         tdb:DatasetTDB ;
    tdb:location "DB" ;
.
<a> <b> <c>.
tdbloader --desc tdb.ttl --graph data data.ttl
update --desc tdb.ttl "INSERT DATA {GRAPH <data> {<d> <e> <f>.}}"
$arq --desc tdb.ttl "SELECT *  WHERE{ GRAPH ?g {?s ?p ?o.}}"
----------------------------
| s   | p   | o   | g      |
============================
| <a> | <b> | <c> | <data> |
| <d> | <e> | <f> | <data> |
----------------------------
$ arq --desc tdb.ttl "SELECT *  WHERE{ GRAPH <data> {?s ?p ?o.}}"
-------------------
| s   | p   | o   |
===================
| <d> | <e> | <f> |
-------------------

为什么从tdbloader导入的数据不见了?这个查询出了什么问题?如何从两个导入中获取结果?

共有1个答案

尚楚
2023-03-14

请尝试此查询:

PREFIX : <data>
SELECT * { { ?s ?p ?o } UNION { GRAPH ?g { ?s ?p ?o } } }

输出为

----------------------------
| s   | p   | o   | g      |
============================
| <a> | <b> | <c> | <data> |
| <d> | <e> | <f> | :      |
----------------------------

或尝试:

 tdbquery --loc DB --file Q.rq -results srj
tdbloader --desc tdb.ttl --graph data data.ttl
INSERT DATA {GRAPH <data> {<d> <e> <f>.}}
PREFIX : <data>
BASE <http://example/>
SELECT * { { ?s ?p ?o } UNION { GRAPH ?g { ?s ?p ?o } } }

它将基URI设置为与数据URI相近的值,因此关闭基URI的良好格式:

----------------------------------------------------------------------------------------------------------------
| s                        | p                        | o                        | g                           |
================================================================================================================
| <file:///home/afs/tmp/a> | <file:///home/afs/tmp/b> | <file:///home/afs/tmp/c> | <data>                      |
| <file:///home/afs/tmp/d> | <file:///home/afs/tmp/e> | <file:///home/afs/tmp/f> | <file:///home/afs/tmp/data> |
----------------------------------------------------------------------------------------------------------------
 类似资料:
  • 在rxjava中有一些调度器,就像io()、newThread()……,有一个调度器名为“trampoline”,这个调度器用于:创建并返回一个调度器,该调度器将当前线程上的工作排队,以便在当前工作完成后执行。 我不明白为什么这个调度程序命名为“trampoline”,而不是“queue”(或其他名称,如“queue”)。 你也有同样的谜题吗?

  • 不是内置函数或关键字,但是如果函数名为,为什么我不能调用它呢? 调试控制台中没有错误消息,如果我将其重命名为all2,该函数就会工作。 这是代码:在chrome和IE10中测试

  • 问题内容: 命名函数的返回参数有什么好处? 问题答案: 命名它们有一些好处: 它用作文档。 它们会自动声明并初始化为零值。 如果您有多个返回站点,则更改函数的返回值并不需要全部更改,因为它只会显示“ return”。 还有缺点,主要是很容易通过声明相同名称的变量来意外地遮盖它们。 有效的Go中有一个关于命名结果参数的部分: 可以给Go函数的返回或结果“参数”指定名称,并将其用作常规变量,就像传入参

  • 问题内容: 我在包含此代码的文件夹中创建了一个文件 编译我做了 但是当我尝试与 要么 我得到错误 我一直在尝试从最近3小时开始 执行 此程序,但是没有任何效果..请帮助 问题答案: 您需要标准名称,例如 即你告诉JVM从当前的direct()中寻找一个类,它将会在文件中出现。 为了更加一致,您应该将.java文件放在目录下(是的-这是互斥的-程序包对此进行了指定,但这是一致的做法)。 我也避免打电

  • 问题内容: 在Python中,有一个名为的内置函数。这用于获取对象的所有属性的列表。 我了解它的作用,但对为什么调用它感到困惑。这个名称与从对象获取属性有什么关系? 问题答案: 它给你一个 目录 对象的所有属性ectory。 这不是文件系统中使用的目录,而是标准用法:名称或数据列表。

  • 问题内容: 我开始使用本教程为初学者学习MatPlotLib 。这是第一个例子。 如果我将这三行代码写入我的python文件并在命令行中执行(通过键入),则什么都不会发生。没有错误信息,没有情节。 有人知道我为什么看不到情节吗? 添加 当然我需要用。但是,即使我添加以下3行: 它仍然不产生任何东西。 添加 这是我现在使用的行: 我仍然有相同的结果(什么都没有)。 问题答案: 后端可能有问题。输出是