标签: sesame

如何将类似java Iterator的对象转换为clojure序列

我正在使用Sesame库在内存中的三重存储上运行SPARQL查询.

我正在使用Clojure来实现这一目标.

查询结果是一个类似自定义Iterator的[1]对象,因此clojure seq不能在开箱即用的情况下工作.

将自定义java Iterator类似对象转换为clojure序列的最优雅方法是什么?

我想到的最明显和最愚蠢的想法是循环它并建立一个clojure向量,但我确信有更优雅的方法来解决这个问题.

[1] http://www.openrdf.org/doc/sesame2/api/info/aduna/iteration/Iteration.html

java sesame clojure seq

13
推荐指数
2
解决办法
3059
查看次数

RDF存储与传统数据库的性能比较

有人试验像芝麻这样的RDF存储解决方案吗?与传统的数据库解决方案相比,我正在寻找这种解决方案的性能评估.

database performance rdf sesame openrdf

12
推荐指数
1
解决办法
2501
查看次数

SPARQL 1.1:如何使用replace函数?

如何在SPARQL 1.1中使用replace函数,尤其是在更新命令中?

例如,如果我有多个三元组?s?p?o其中?o是一个字符串,对于所有三元组,其中包含字符串"gotit"我想插入一个额外的三元组,其中"gotit"被替换为" "我怎么能这样做?我试图实现这是芝麻2.6.0.

我尝试了这种天真的方法:

INSERT { ?s ?p replace(?o,"gotit","haveit","i") . }
WHERE { ?s ?p ?o . FILTER(regex(?o,"gotit","i")) }
Run Code Online (Sandbox Code Playgroud)

但这导致语法错误.

我也无法在查询的结果列表中使用replace,如下所示:

SELECT ?s ?p (replace(?o,"gotit","haveit","i") as ?r) WHERE { .... }
Run Code Online (Sandbox Code Playgroud)

遗憾的是,SPARQL文档不包含如何使用此函数的示例.

是否有可能使用函数来创建新值而不仅仅是测试现有值,如果是,如何?

sesame replace sparql

12
推荐指数
2
解决办法
8472
查看次数

在Triplestore中更新RDF

我正在试验Sesame和Virtuoso Triplestores.在Moment中,我使用Sesame Java API将RDF数据添加到Triplestores.

我的RDF数据代表不同的东西,如Videodata,Userdata等.目前我可以将一个视频的RDF(标题,描述,位置等)添加到Triplestore

但是如何更新商店中的RDF?

例如,如果我使用芝麻的REST接口并使用更新的RDF进行PUT请求,则首先删除存储中的所有内容.

当我使用带有更新数据的POST(例如视频标题已更改)时,将存储标题(旧的和新的).

你如何与三重商店合作?也许我想念一些必要的东西.


编辑:

我现在在每个RDF条目中使用Virtuoso中的Sesame和Graphs中的Context.这种更新方式我可以先清除上下文并再次添加.当我为两个Triplestores使用Sesame API时(我们仍然不知道我们将使用哪一个),代码看起来完全相同.

ValueFactory f = rep.getValueFactory();
URI uri = f.createURI(urn);
con.clear(uri);
con.add(reader,this.baseURI, RDFFormat.RDFXML,uri);
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助

rdf sesame triplestore virtuoso

9
推荐指数
1
解决办法
3532
查看次数

SPARQL查询以检索所有对象和属性

使用葡萄酒本体,我想创建SPARQL查询,以便我可以检索所有的葡萄酒它们的属性如下面的表格-认为,我不知道属性的名称先验.

vin                  | rdf:type     | vin:hasMaker      |  vin:hasSugar   | ...
==========================================================================  ...
GaryFarrellMerlot    |  vin:Merlot  | vin:Elyse         |  vin:Dry        | ...
--------------------------------------------------------------------------
ElyseZinfandel       |  vin:Elyse   | vin:GaryFarrell   |  vin:Dry        | ...
...
Run Code Online (Sandbox Code Playgroud)

有人能给我一个暗示吗?

- 编辑

查询结果不可能是我提到的格式,但我可以这样说:

vin                |   property     |  value
=================================================
GaryFarrellMerlot  |   rdf:type     |  vin:Merlot
-------------------------------------------------
GaryFarrellMerlot  |   rdf:hasMaker |  vin:Elyse
-------------------------------------------------
...
Run Code Online (Sandbox Code Playgroud)

有了这个选择(谢谢cygri):

SELECT DISTINCT ?wine ?property ?value
WHERE { 
       ?o1 a ?class .
       ?wine a ?o1 …
Run Code Online (Sandbox Code Playgroud)

sesame ontology sparql

8
推荐指数
1
解决办法
9671
查看次数

不包括依赖的依赖性

我有一个java应用程序,它有一些依赖项,其中有另一个项目有自己的依赖项.每当我从Netbeans或mvn exec运行它是好的但是当我尝试打包它,即使它已成功构建,在运行时我得到以下错误:

Exception in thread "main" org.openrdf.rio.UnsupportedRDFormatException: No parser factory available for RDF format Turtle (mimeTypes=text/turtle, application/x-turtle; ext=ttl)
    at org.openrdf.rio.Rio.createParser(Rio.java:198)
    at org.openrdf.rio.Rio.createParser(Rio.java:213)
    at org.openrdf.repository.util.RDFLoader.loadInputStreamOrReader(RDFLoader.java:318)
    at org.openrdf.repository.util.RDFLoader.load(RDFLoader.java:222)
    at org.openrdf.repository.util.RDFLoader.load(RDFLoader.java:104)
    at org.openrdf.repository.base.RepositoryConnectionBase.add(RepositoryConnectionBase.java:217)
    at net.antidot.semantic.rdf.model.impl.sesame.SesameDataSet.loadDataFromFile(SesameDataSet.java:160)
Run Code Online (Sandbox Code Playgroud)

所以问题是sesame rio解析器似乎不包括在内,即使我可以在我的maven存储库中看到它们.我在所包含的项目中包含所有依赖项.我也试图排除它们并明确地将它们添加到我的主项目中它再次失败.

有什么建议?

我的依赖树:

[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ RMLMapper ---
[INFO] be.ugent.mmlab:RMLMapper:jar:0.1
[INFO] +- junit:junit:jar:4.11:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- xom:xom:jar:1.2.5:compile
[INFO] |  +- xml-apis:xml-apis:jar:1.3.03:compile
[INFO] |  +- xerces:xercesImpl:jar:2.8.0:compile
[INFO] |  \- xalan:xalan:jar:2.7.0:compile
[INFO] +- jlibs:jlibs-xmldog:jar:1.0:compile
[INFO] |  +- jlibs:jlibs-xml:jar:1.0:compile
[INFO] |  |  +- jlibs:jlibs-core:jar:1.0:compile
[INFO] …
Run Code Online (Sandbox Code Playgroud)

dependencies sesame maven

8
推荐指数
1
解决办法
1294
查看次数

将Notation3加载到数据库中

如何解析并将Notation3文件表示的三元组加载到数据库中?我对JenaSesame有点熟悉,但这些似乎适合处理RDF或Turtle,而不是完整的Notation3.

我发现用于处理N3的相对较少的强大工具.这里列出我发现的少数几个,只包含粗略的Python脚本,它们只能执行基本的命令行操作,似乎没有标准的打包,分发或维护.默认的Python库似乎是,notation3.py但我找不到它的单个主页,并发现了几十个不同版本分散在Internet上.

例如,假设我有以下N3代表植物分类:

{
   []
       :genus "Abies" ;
       :species "alba" ;
       :name [:value "Silver Fir" ; :usage "common" ; :language "English" ] ;
       :name [:value "European Silver Fir" ; :usage "common" ; :language "English" ] ;
       :name [:value "abeto blanco" ; :usage "common" ; :language "Spanish" ] ;
       :name [:value "abeto plateado" ; :usage "common" ; :language "Spanish" ] ;
       :name [:value "Edeltanne" ; :usage "common" ; :language "German" ] …
Run Code Online (Sandbox Code Playgroud)

rdf sesame semantic-web jena n3

6
推荐指数
1
解决办法
232
查看次数

如何用Sesame获得资源的简洁有界描述?

我一直在测试Sesame 2.7.2,当遇到DESCRIBE查询不包含空白节点关闭的事实时,我有一个很大的惊喜[ 编辑:正确的术语是CBD,用于简洁有界的描述 ]

如果我正确理解,SPARQL规范相当松散,并且说返回的内容实际上取决于提供者,但我仍然对选择感到惊讶,因为无法使用bnodes(在describe查询的结果中)在后续的SPARQL查询中.

所以问题是:如何在<uri1>不执行以下操作的情况下获得资源的封闭描述:

  1. 询问 DESCRIBE <uri1>
  2. 迭代结果以确定哪些对象是空节点
  3. 然后 DESCRIBE ?b WHERE { <uri1> pred_relating_to_bnode_ ?b }
  4. 只要找到bnode就可以递归地进行链接

如果我没有弄错的话,必须用深度2个bnodes来描述

DESCRIBE ?b2 WHERE {<uri1> <p1&> ?b . ?b <p2> ?b2 }
Run Code Online (Sandbox Code Playgroud)

除非有更简单的方法吗?

最后,让DESCRIBE一个资源的封闭描述让你仍然可以获得当前返回的结果并不是更好,更简单吗?

CONSTRUCT {<uri1> ?p ?o} WHERE {<uri1> ?p ?o}
Run Code Online (Sandbox Code Playgroud)

编辑:这是我想从芝麻回来的封闭结果的一个例子

<urn:sites#1> a my:WebSite .
<urn:sites#1> my:domainName _:autos1 .
<urn:sites#1> my:online "true"^^xsd:boolean .
_:autos1 a rdf:Alt .
_:autos1 rdf:_1 _:autos2
_:autos2 my:url "192.168.2.111:15001"@fr
_:autos2 my:url "192.168.2.111:15002"@en
Run Code Online (Sandbox Code Playgroud)

目前:DESCRIBE <urn:sites#1>返回与查询相同的结果CONSTRUCT WHERE …

rdf sesame semantic-web sparql blank-nodes

6
推荐指数
1
解决办法
592
查看次数

本体,OWL,Sparql:建模"某些东西不存在"和性能考虑因素

我们想模拟"某些东西不在那里",而不是缺少信息,例如"患者未接受化疗"或"患者没有呼吸困难"的明确陈述与缺少患者是否有患者的信息不同呼吸困难.

我们考虑了几种方法,例如

  • 使用否定类:"No_Dyspnea".但这似乎在语义上存在问题,因为那个类会是什么类型的?它不能成为"呼吸困难"类的后代.
  • 使用"not there"对象属性,例如"denies"或"does_not_have",然后使用Dyspnea根类的个体作为该三元组的对象.
  • 使用空白节点描述个人属于没有呼吸困难的事物组.例如:

    dat:PatientW2 a [ rdf:type owl:Class;
                  owl:complementOf [
                    rdf:type owl:Restriction ;
                        owl:onProperty roo:has_finding;
                        owl:someValuesFrom nci:Dyspnea;
                  ]
                ] .
    
    Run Code Online (Sandbox Code Playgroud)

我们觉得第三种选择是表达这一点的最"本体论正确"的方式.但是,在使用它时,我们在简单的场景中遇到了严重的性能问题.

我们将Sesame与OWLIM-Lite商店一起使用,并将NCI词库(280MB,大约80,000个概念)和另一个非常小的本体导入商店,并添加了两个人,一个具有该补充/限制类.

以下查询永远执行,我在15分钟后终止它:

select *
where {
  ?s a [ rdf:type owl:Class;
                      owl:complementOf [
                        rdf:type owl:Restriction ;
                        owl:onProperty roo:has_finding;
                        owl:someValuesFrom nci:Dyspnea;
                  ]
                ] .
} Limit 100
Run Code Online (Sandbox Code Playgroud)

有人知道为什么吗?我会假设这种方法会创建大量空白节点,并且查询引擎必须通过整个NCI词库并将所有空白节点与此进行比较?

如果我将此三元组放在单独的图形中并且仅查询该图形,则查询会立即返回结果.

总结一下.这两个基本问题是:

  • 第三种方法真的是最好的建模"有些东西不存在"
  • 这会影响查询性能吗?

编辑1

我们讨论了提议的选项.它实际上帮助我们澄清了我们真正想要实现的目标:

  • 我们希望能够在特定时间点陈述"患者有呼吸困难"或"患者没有呼吸困难".

  • 在将来,可能/将会有关于该患者的更多信息,例如他/她现在患有呼吸困难.

  • 我们希望能够编写Sparql查询,询问"所有患有呼吸困难的患者"和"所有没有呼吸困难的患者".

  • 我们希望尽可能简单直观地保持Sparql.例如,只使用一个属性"has_finding",而不是必须知道两个属性(一个用于"has_exclusion").或者必须知道一些复杂的空白节点构造.

我们玩弄了各种选择:

  • 否定财产断言:这听起来像是这个问题的最佳解决方案,因为我们声称一个人与该财产上的另一个人无关.问题是我们必须为了拥有某些东西而创造一个呼吸困难的个体owl:targetIndividual.而且我们找不到一种方法来轻易地查询负面断言,然后通过整个链owl:sourceIndividualowl:targetIndividual链.这使得Sparql非常冗长,并且给编写查询的人带来了负担.
  • 补空的空白节点:我们会说这个我们不想陈述的东西.这将说明"患者1永远不会发现呼吸困难".虽然我们想说"患者1现在没有发现呼吸困难(或在第X天)".所以我们不应该使用这种方法.

  • 使用排除/包含类型(选项1和2):仔细观察Jeen的建议后,我们认为使用一般:Exclusion:Inclusion类以及仅一个属性has_finding并给予呼吸困难个体包含/排除类型是最容易理解,查询和提供足够的推理能力.例: …

performance modeling sesame ontology sparql

6
推荐指数
1
解决办法
400
查看次数

如何设置openrdf工作台的密码?

我已经成功安装了Openrdf Repository(sesame 2.3.2)和Openrdf工作台但是我不知道如何设置用户和密码来保护Openrdf工作台.我想有--somewhere - 配置文件.

有人可以给我一个提示如何创建用户并为openrdf工作台设置密码?

passwords configuration rdf sesame semantics

5
推荐指数
1
解决办法
1422
查看次数