- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,如你所知,我没有很长的计算机科学背景,今年开始使用网络语义,所以我已经为我可以使用的任何不精确/非科学术语/糟糕的编码风格道歉在这个问题上。
这是我的任务:我想找到与我之前从某些文档中提取的某些标签最接近的 dbpedia 资源。为此,我使用自定义过滤器函数(例如,进行 Dice 系数计算,返回 0 到 1 之间的分数)来计算 DBpedia 标签和提取的表达式之间的相似性(我使用的是 Jena Apache)。
Ex1:提取:“bea systems”-> 最近的 DBpedia 标签:“BAE Systems Inc.”等
Ex2:提取:“harper-collins publishing company” -> 最近的 DBpedia 标签:“Harper-Collins”、“HarperCollins” 、“HarperCollins Publishers”等
我的问题是我需要在 DBpdia 端点上执行查询,因为数据集很大(内存问题),但是我收到了一条 http 500 错误消息,因为我的函数存储在本地并且我正在查询远程访问端点...
Exception in thread "main" HttpException: 500
at com.hp.hpl.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:414)
at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execGet(HttpQuery.java:358)
at com.hp.hpl.jena.sparql.engine.http.HttpQuery.exec(HttpQuery.java:295)
at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execSelect(QueryEngineHTTP.java:346)
at jena.example.similar.propfunction.DistanceTest.main(DistanceTest.java:48)
这是我的查询代码:
Node exp = NodeFactory.createLiteral("harper-collins publishing company") ;
String queryString = "" +
"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> " +
"PREFIX fn: <java:jena.example.similar.propfunction.> " +
"PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> " +
"SELECT ?company ?label ?funcRes " +
"WHERE {" +
"?company a dbpedia-owl:Company . " +
"?company rdfs:label ?label . " +
"BIND (fn:DiceCoeff(?label, "+exp+") as ?funcRes) " +
"FILTER (lang(?label) = \"en\")" +
"}" +
"ORDER BY DESC(?funcRes) " +
"LIMIT 10 " ;
Query query = QueryFactory.create(queryString) ;
// execute the query
QueryExecution qexec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", query);
try {
ResultSet results = qexec.execSelect() ;
ResultSetFormatter.out(System.out, results, query) ;
} finally { qexec.close() ; }
我使用的过滤函数工作正常,我在本地访问的另一个较小的数据集(不是 DBpdia)上使用相同类型的查询(即使用 BIND 和 ORDER BY)测试了它,它给了我预期的结果.
那么,有没有办法在远程端点上使用或根本不使用自定义过滤器功能?否则,我正在做的任务还有哪些其他选择? (我已经阅读了 How I can write SPARQL query that uses similarity measures in Java Code 中的讨论,但它似乎对我来说不是最好的)
我将不胜感激社区的任何建议:)
最佳答案
自定义函数仅在本地注册并可用。除非远程服务也理解该函数,否则它不会对远程服务起作用,要么产生您看到的错误,要么返回自定义函数的未绑定(bind)值。
您可以尝试使用 SERVICE
子句将您的部分查询定向到 DBPedia 并在本地运行自定义过滤器功能。这可能不会很好地执行,但将允许您使用自定义过滤器功能,例如
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX fn: <java:jena.example.similar.propfunction.
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT ?company ?label ?funcRes
WHERE
{
SERVICE <http://dbpedia.org/sparql>
{
?company a dbpedia-owl:Company .
?company rdfs:label ?label .
FILTER (lang(?x) = "en")
}
BIND (fn:DiceCoeff(?x, "exp") as ?funcRes)
}
ORDER BY DESC(?funcRes)
LIMIT 10
这个查询可以在本地运行,它首先远程查询DBPedia找到公司列表,然后在本地计算自定义函数,最后使用计算值进行排序。
然后您需要修改代码,以便针对本地数据集运行查询,例如
QueryExecution qexec = QueryExecutionFactory.create(query, DatasetFactory.createMem());
如果这对您来说性能不够好,另一种选择是下载 DBPedia 数据转储并加载到本地 TDB 数据库中,这样您就可以完全在本地运行查询。参见 Load DBpedia locally using Jena TDB?有关如何执行此操作的一些信息。
关于java - 远程端点上的自定义 jena 过滤器功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24884731/
我想用前缀来表示这个nt文件: . "a" . "b" . "c" . 我写入一个新的nt文件是: @prefix sp: . . "a" . "b" . "c"
我有一个名为 Modelling.owl 的 OWL 文件,它是使用 Protege 4.2 创建的。但是后来我必须通过使用 Jena 注册一些新的 Individual 和它的属性来修改它。例如我有
我正在尝试使用 Jena 写入本地免费的独立 GraphDB(版本 8.5.0)存储库。 我尝试过的 (1) 耶拿直接使用 我使用了这个 Jena 3.7.0 代码片段: String strInse
我无法在我的 Ontology 中表达以下情况: 假设我有四个人投票,投了四票(所以 vote 和 voter 之间存在一对一的映射)。人们可以投票赞成或反对。如果我知道三个人的投票结果,我应该能够推
我在我的项目中使用 Dbpedia,我想创建一个本地 sparql 端点,因为在线端点不可靠。我下载了数据转储(大型 NT 文件)并决定使用 Jena TDB。使用 NetBeans IDE,我使用输
我用这个java代码在jena中创建了一个模型 Model m = ModelFactory.createDefaultModel(); Resource a1 = m.createR
我有一个猫头鹰本体,我将它读入 Jena OntModel。然后我在运行时更新它。现在我想把它写回一个OWL 本体。我正在使用下面的代码: RDFWriter writer = model.getWr
我将 Jena 和 Fuseki 安装为服务使用 一个可靠的角色 gremid.fuseki . 而且我想自定义监听主机和监听端口。但是,我不知道。 也许我应该编辑$FUSEKI_BASE/confi
我正在对基于本体的上下文管理和基于流程的上下文管理进行性能分析。然而,为了创建与 PCM 案例研究类似的场景,我需要在推理过程中直接从 Jena SWRL 规则触发 Java 方法。我做了很多研究,但
我正在使用 SPARQL 查询查询整数结果: String qString = "SELECT (COUNT(?S) AS ?C) "+ "WHERE
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 8年前关闭。 Improve t
我无法找到一些使用 SWRL 和 Jena 的简单代码示例佩莱,或者至少使用 SWRL?我研究了 Pellet 文档中的一些示例,但没有关于使用 SWRL 的示例。网络上的大多数示例都不完整且令人困惑
我对 RDF 和 Jena 很陌生。我想将一个 .nt (N-TRIPLE) 文件加载到模型中。我试过 read(inputStream, "N-TRIPLE") 但没有帮助。 它抛出 org.apa
我成功地使用 Jena API 和 Eclipse 创建、修改、合并本体。我还在 Eclipse 中成功启动了 OWL 推理器和 Pellet 推理器。 现在我想了解如何使用 Jena API 在 E
我正在尝试使用 Jena 框架来编辑使用 Protoge 4.2 构建的现有本体。即更改属性值或添加个人或类别,然后进行推理。假设在本体中我们有这样的规则:hasAge(?p,?age)^swrlb:
我了解到您可以使用以下代码提取 rdf 文件并初始化为 jena 中的模型: DatasetAccessor accessor = DatasetAccessorFactory.createHTTP(
我目前正在开发一个项目,初始值为 .owl包含我们本体的基本模式的文件。我们使用 Jena API 加载此文件并对其执行不同的操作,例如添加本体类和个体。 我们寻求将系统迁移到三重存储,这意味着,而不
这是我的代码: public class FunctionalityCheckTest1 { InfModel infModel; Model model = ModelFactory
我使用Jena和TDB来存储RDF,我想对其进行一些推断。但是RDF数据很大,Jena的owl reasoner必须将所有数据加载到内存中。 所以我想找到一个可以推理而不将所有数据加载到内存中的推理器
我建立了一个使用SWRL规则进行推理的本体。当我在Protege中执行SQWRL查询时,它工作正常。问题是,当我想将Pellet与Jena一起使用时,Pellet似乎在查询中不包括SWRL规则。我像这
我是一名优秀的程序员,十分优秀!