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

Jena TDB,过滤器不工作

督飞羽
2023-03-14
select ?ob where {
  ?ob rdfs:label "NameOfLabel"@language .
}
select ?ob where {
  ?ob rdfs:label ?pr .
  filter( ?pr = "NameOfLabel" ) .
} 

当我尝试使用筛选器(str(?pr)=“nameoflabel”)时,我得到一个异常。下面是堆栈跟踪:

Exception in thread "main" java.lang.IllegalArgumentException: getLow: Empty RecordBuffer
    at com.hp.hpl.jena.tdb.base.buffer.RecordBuffer.getLow(RecordBuffer.java:59)
    at com.hp.hpl.jena.tdb.base.recordbuffer.RecordRangeIterator.hasNext(RecordRangeIterator.java:112)
    at org.apache.jena.atlas.iterator.Iter$4.hasNext(Iter.java:317)
    at com.hp.hpl.jena.tdb.sys.DatasetControlMRSW$IteratorCheckNotConcurrent.hasNext(DatasetControlMRSW.java:119)
    at org.apache.jena.atlas.iterator.Iter$4.hasNext(Iter.java:317)
    at org.apache.jena.atlas.iterator.Iter$3.hasNext(Iter.java:200)
    at org.apache.jena.atlas.iterator.Iter.hasNext(Iter.java:915)
    at org.apache.jena.atlas.iterator.RepeatApplyIterator.hasNext(RepeatApplyIterator.java:59)
    at com.hp.hpl.jena.tdb.solver.SolverLib$IterAbortable.hasNext(SolverLib.java:191)
    at org.apache.jena.atlas.iterator.Iter$4.hasNext(Iter.java:317)
    at com.hp.hpl.jena.sparql.engine.iterator.QueryIterPlainWrapper.hasNextBinding(QueryIterPlainWrapper.java:54)
    at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112)
    at com.hp.hpl.jena.sparql.engine.iterator.QueryIterConvert.hasNextBinding(QueryIterConvert.java:59)
    at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112)
    at com.hp.hpl.jena.sparql.engine.iterator.QueryIterDistinctReduced.hasNextBinding(QueryIterDistinctReduced.java:54)
    at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112)
    at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:40)
    at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112)
    at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:40)
    at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112)
    at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:40)
    at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:112)
    at com.hp.hpl.jena.sparql.engine.ResultSetStream.hasNext(ResultSetStream.java:75)

编辑二:

Dataset dataset = TDBFactory.createDataset(DIRECTORY);
dataset.begin(ReadWrite.READ);

QueryExecution qExec = QueryExecutionFactory.create(query, dataset) ;
ResultSet risultati = qExec.execSelect();
while(risultati.hasNext()){
    system.out.println(risultati.next());
}

共有1个答案

祁博雅
2023-03-14

普通文字“nameoflabel”与带有语言标记“nameoflabel”@en的文字不相同。如果

?ob rdfs:label "NameOfLabel"@en           # (1)

行得通,那就应该行得通

?ob rdfs:label ?label .
filter ( ?label = "NameOfLabel"@en )      # (2)

如果要比较筛选器中的字符串内容而不比较语言,只需执行以下操作:

?ob rdfs:label ?label .
filter ( str(?label) = "NameOfLabel" )    # (3)
values ?label { "NameOfObject"@en }
?ob rdfs:label ?label .
?ob rdfs:label ?label .
 类似资料:
  • 在过去的三天里,我一直在与错误“跨源请求被阻止:相同的源策略不允许读取http://localhost:8080/demomongo/templateapp/login上的远程资源。”(原因:缺少CORS头'Access-Control-Allow-Origin')。

  • 我使用此解决方案来过滤我的。使用该解决方案,我能够在键入时获得结果。但是当我清除搜索小部件时,我没有得到完整的列表,而是得到了空的。 这就是我的结果。https://imgur.com/nwyetEd 这是我的 这是我的 这是我使用过滤器的< code >活动 有人能帮助我吗?

  • 你知道我做错了什么吗?下面是我的ORM映射:

  • 我正在使用PrimeFaces 5.1,在我的项目dataTable中过滤使用。在文本过滤器中工作正常,但下拉过滤器工作不正常(即)在下拉列表中我显示部门,第一次我从下拉列表中选择任何值都是工作正常,另一次我选择下拉列表它不返回dataTable中显示的任何值。我从下拉列表中选择一个第一个值也抛出空指针异常。 我的疑问是默认值ALL单击和第二次选择任何值返回null或dataTable中没有数据显

  • 我在Elasticsearch 7.10中创建了一个索引,如下所示: 如您所见,我配置了一个名为my_analyzer的自定义分析器,该分析器应用了令牌过滤器。基于文档,我希望这个过滤器在索引时从文档的所有类型属性中删除英语stopwords。 事实上,如果我向http://localhost:30200/my_index/_analyze使用此请求主体: 我得到一个响应,表明令牌、、和已从提供的