我试图使用SPARQL Construct查询从现有的查询创建一个新的命名图.我查询的数据库包含http://graph.com/old现有的命名图.我使用Jena TDB作为数据库,通过Jena Fuseki端点访问.以下查询给出了一个错误:
CONSTRUCT
{
GRAPH <http://graph.com/new> {
?s ?p ?o
}
}
WHERE
{
GRAPH <http://graph.com/old> {
?s ?p ?o
}
}
Run Code Online (Sandbox Code Playgroud)
如果我从CONSTRUCT块中删除图形语句,查询工作正常,但我想将三元组放入我指定的命名图形而不是默认图形.
据我所知,CONSTRUCT上的SPARQL 1.1部分没有说明构建命名图的任何内容.有没有办法做到这一点?
我想在我的Fuseki服务器中获取所有现有图形的名称,它应该返回一个带有所有图形名称列表的消息.
我正在寻找一种简单的方法将两个或多个命名图(但不是整个未命名默认图)中的三元组插入到另一个命名图中。 我正在使用 GraphDB。
我想这可以通过在该部分中多次写出相同的查询WHERE,包装在多个 GRAPH规范中,然后将它们联合在一起来完成,但我的WHEREs 很长,我不想多次写出它们。
假设我加载了一些这样的数据:
INSERT DATA {
GRAPH <http://example.com/ngA> {
<http://example.com/person1> <http://example.com/name> "Arthur" .
}
GRAPH <http://example.com/ngB> {
<http://example.com/person1> <http://example.com/name> "Brian" .
}
GRAPH <http://example.com/ngC> {
<http://example.com/person1> <http://example.com/name> "Charlie" .
}
}
Run Code Online (Sandbox Code Playgroud)
我可以将特定模式的所有三元组从默认的未命名图形复制到新的命名图形中,如下所示:
INSERT {
GRAPH <http://example.com/ngZ> {
?s <http://example.com/moniker> ?o .
}
}
WHERE
{ ?s <http://example.com/name> ?o }
Run Code Online (Sandbox Code Playgroud)
SELECT从两个或多个(但不是全部)命名图中获取给定模式的三元组的一种简单方法是
SELECT *
FROM <http://example.com/ngA>
FROM <http://example.com/ngB>
WHERE
{ ?s <http://example.com/name> ?o }
Run Code Online (Sandbox Code Playgroud)
如果我想将这些三元组从那些指定的图形复制到另一个图形中怎么办?
当我尝试执行以下操作时,我从 GraphDB 8.3(以及 sparql.org 验证器)收到错误
INSERT { …Run Code Online (Sandbox Code Playgroud) 我正在为Fuseki 2中的TDB数据集提供一个包含10-20个命名图的数据集。我想使用推理程序对我的数据进行推断。我想看到的行为是,在每个图中推断出的三元组应该出现在这些图中(尽管如果三元组也出现在默认图中也可以)。有没有简单的配置方法?我还没有找到与我要尝试匹配的任何配置示例。
我尝试过的配置与以下标准示例非常相似。
数据集TDB-> GraphTDB-> InfModel-> RDFDataset
我看到的数据的最终视图只是数据的很小一部分(似乎所有命名的图都沿着该管道放置在某个地方,只剩下很小的默认图)。使用tdb:unionDefaultGraph似乎对此没有影响。
prefix : <#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
# Example of a data service with SPARQL query and update on an
# inference model. Data is taken from TDB.
## ---------------------------------------------------------------
## Service with only SPARQL query on an inference model.
## Inference model base data is in TDB.
<#service2> rdf:type fuseki:Service ;
fuseki:name "inf" ; …Run Code Online (Sandbox Code Playgroud) 将这个四元组添加到空商店:
<http://x.com/s> <http://x.com/p> 2 <http://x.com/g> .
Run Code Online (Sandbox Code Playgroud)
然后执行这个SPARQL查询(取自Bob DuCharme的书'Learning SPARQL',所以这必须是标准的SPARQL,用于检索数据集中的所有四边形,无论实现如何,对吧!?):
SELECT ?g ?s ?p ?o
WHERE {
{ ?s ?p ?o }
UNION
{ GRAPH ?g { ?s ?p ?o } } }
Run Code Online (Sandbox Code Playgroud)
但耶拿和芝麻回答不同的答案!!?这是我看到的:
Tomcat 6.0.37上的Jena Fuseki控制台(版本2.10.0 - 开箱即用,没有配置更改!) - (正如我所理解的那样正确答案):
--------------------------------------------------------------
| g | s | p | o |
==============================================================
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 |
--------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
Tomcat 6.0.37上的Sesame Workbench(版本2.7.3 - 开箱即用,无需更改配置!):只需使用工作台中的"添加"功能手动添加上述四边形(选择"N-Quad")在"数据格式"下拉框中,在"输入您要上传的RDF数据"编辑框中,然后运行以上查询:
--------------------------------------------------------------
| g | s | p | o |
==============================================================
| …Run Code Online (Sandbox Code Playgroud) 在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" ;
.
Run Code Online (Sandbox Code Playgroud)
data.ttl文件中有一个数据集:
<a> <b> <c>.
Run Code Online (Sandbox Code Playgroud)
现在,我使用tdbloader插入此数据,然后使用SPARQL INSERT插入另一个三元组,两者都在命名图数据中:
tdbloader --desc tdb.ttl --graph data data.ttl
update --desc tdb.ttl "INSERT DATA {GRAPH <data> {<d> <e> <f>.}}"
Run Code Online (Sandbox Code Playgroud)
现在,可以使用SPARQL通过以下方式查询数据:
$arq --desc tdb.ttl "SELECT * WHERE{ GRAPH ?g {?s ?p ?o.}}"
---------------------------- …Run Code Online (Sandbox Code Playgroud) 假设我在 GraphDB 8.3 Triplestore 中进行了以下插入:
PREFIX : <http://example.com/>
insert data { :hello a :word }
Run Code Online (Sandbox Code Playgroud)
和
PREFIX : <http://example.com/>
insert data { graph :farewells { :goodbye a :word }}
Run Code Online (Sandbox Code Playgroud)
现在,如果我问
select * where {
graph ?g {
?s ?p ?o .
}
}
Run Code Online (Sandbox Code Playgroud)
我只得到
+--------------------------------+------------------------------+---------------------------------------------------+---------------------------+
| ?g | ?s | ?p | ?o |
+--------------------------------+------------------------------+---------------------------------------------------+---------------------------+
| <http://example.com/farewells> | <http://example.com/goodbye> | <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> | <http://example.com/word> |
+--------------------------------+------------------------------+---------------------------------------------------+---------------------------+
Run Code Online (Sandbox Code Playgroud)
我显然可以通过以下内容获得“关于单词的三元组”,但随后不会显示命名图成员资格
select * { ?s ?p ?o }
Run Code Online (Sandbox Code Playgroud)
如何编写一个查询来检索有关单词的三元组并指示{ :goodbye a :word }来自图形的三元组 …
我是 SPARQL/图形数据库的新手,正在尝试将一些数据插入图形数据库中的新命名图形中。
INSERT
{ GRAPH graphs:new_graph { ?code groups:memberOfGroup graphs:personGroup } } where
{?code a obib:CRID .
?code obib:denotes ?person .
?person a obib:homoSapien .}
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,会创建图形“new_graph”,但它不包含任何数据。如果我使用 SELECT 语句运行相同的查询,它会返回应有的数据,因此问题可能出在查询的 INSERT 部分。
我正在将 .ttl 文件加载到 Jena Fuseki 服务器中,而不是使用默认图形,而是使用命名图形<http://examples/test>。
/home/user/jena-fuseki-1.1.1/./s-put http://192.168.1.38:3030/ds/data http://example/test /home/user/testdata.ttl
Run Code Online (Sandbox Code Playgroud)
我能够使用以下命令加载图形并检索结果。
/home/user/jena-fuseki-1.1.1/./s-get http://192.168.1.38:3030/ds/data http://example/test
Run Code Online (Sandbox Code Playgroud)
但是当我开始使用该s-query命令进行查询时,它采用的是默认的未命名图。如何使s-query命令在命名图上工作。
/home/user/jena-fuseki-1.1.1/./s-query --service http://localhost:3030/ds/query 'SPARQL Query'
Run Code Online (Sandbox Code Playgroud)
这是对默认的未命名图进行查询。如何使它在命名图上工作<http://example/test>?
拿这两个命名图:
# graph :yesterday
:Foo
:likes :Bar ;
:likes :Qux .
# graph :today
:Foo
:likes :Bar ;
:likes :Baz .
Run Code Online (Sandbox Code Playgroud)
现在说你想知道图表中:yesterday是否存在图表中的任何三元组:today.你怎么会ASK这个查询?
ASK
FROM NAMED :yesterday
FROM NAMED :today
{
GRAPH :yesterday {
?s ?p ?o .
...
}
}
Run Code Online (Sandbox Code Playgroud) 我对 SPARQL 中的FROM和FROM NAMED图形感到困惑。我确实阅读了SPARQL 规范中与这两个构造相关的规范。我只是想确认一下我的理解。
假设一个 RDF 数据集位于 IRI I。I由。。。制成由。。。做成:
G {(I1,G1), (I2,G2), (I3,G3)}现在,假设我有一个 SPARQL 查询:
SELECT *
FROM I
FROM I1
FROM NAMED I2
Run Code Online (Sandbox Code Playgroud)
所以如果我理解,为了评估这个查询,SPARQL 服务可能会在后面构造活动图,这个活动合并将包含:
I和I1I2这种理解对吗?
named-graphs ×11
sparql ×10
rdf ×6
fuseki ×4
jena ×4
graphdb ×2
tdb ×2
apache-jena ×1
arq ×1
graph ×1
linked-data ×1
reasoning ×1
semantic-web ×1
sesame ×1
triples ×1