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

远程endpoint上的自定义jena筛选器功能?

康恩
2023-03-14

首先,你知道,我没有很长的计算机科学背景,今年才开始研究web语义,所以我已经为我在这个问题中可能使用的任何不精确/非科学术语/糟糕的编码风格道歉了。

这里是我的任务:我想找到与我之前从一些文档中提取的一些标签最接近的dbpedia资源。为此,我使用了一个自定义的过滤器函数(执行骰子系数计算,例如返回0到1之间的分数)来计算DBpedia标签和提取的表达式之间的相似性(我使用的是Jena Apache)。

Ex1:摘录:“BEA Systems”->最近的DBpedia标签:“BAE Systems Inc.”等。

我的问题是,我需要在DBpdiaendpoint上执行查询,因为数据集很大(内存问题),但我得到一个http 500错误消息,因为我的函数存储在本地,并且我正在查询一个远程访问endpoint...

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)测试了它,它给了我预期的结果。

共有1个答案

齐典
2023-03-14

自定义函数仅在本地注册和可用。除非远程服务也理解该函数,否则它不会对远程服务起作用,要么产生您看到的错误,要么返回自定义函数的未绑定值。

您可以尝试使用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());
 类似资料:
  • 存储在Django模型中的元素如下 示例数据如下: . 结果:找到对象- 结果:找到对象- 结果:找到对象- 结果:未找到对象 如何使用过滤器和正则表达式进行这些查询?

  • 我创建了一个自定义筛选器,用于获取令牌,然后用与令牌相关的角色填充身份验证对象 然后,我将该过滤器添加到springsecuritycontext中,如下所示: 应用程序已经存在,我只是尝试添加Spring Security层。Spring Security版本为4.2.3。在尝试实现此功能的几天后,不会加载,因此不会筛选任何请求。请帮帮忙。

  • org.apache.hadoop.hbase.client.rpCretryingCaller@459C8C0a,java.io.ioException:java.io.ioException:java.lang.reflect.invocationTargetException at org.apache.hadoop.hbase.protobuf.to Filter(Protobufutil

  • 我有一个Spring Boot应用程序,在其中我试图创建一个自定义安全过滤器,如下所示:

  • 下面是过滤器的外观。 对于WebSecurityConfigurerAdapter#configure(webSecurityWeb)web.忽略()中包含的路径,我希望该筛选器不会像Spring Security筛选器链的其余部分一样激发。 下面是它的样子 我希望在调用Spring Security链的其余部分时调用这个过滤器,并对web.igneration()中的路径忽略这个过滤器,就像Sp