stream - C-SPARQL 查询 - 精确匹配字符串文字

标签 stream sparql rdf semantic-web triples

我正在使用 C-SPARQL,我想查询从流接收的三元组。但是,我在使用要匹配精确字符串文字的查询时遇到了问题。我通常会通过查询得到结果(数据来自字符串),但是当我为文字添加字符串值的精确匹配时,我总是得不到任何结果。就好像没有找到匹配项一样。但是,如果我查看从流中收到的所有三元组,就会发现某些条目与我的字符串文字相匹配。

这是我的查询示例:

REGISTER QUERY LogStream AS
PREFIX person: <http://vocab/Person#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?s 
FROM STREAM <ws://localhost:8124/tw/stream> [RANGE 5s STEP 1s] 
WHERE { 
?s person:name "Huber" .
}

我还尝试使用过滤器和正则表达式,如下两个示例:

REGISTER QUERY LogStream AS
PREFIX person: <http://vocab/Person#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?s ?o 
FROM STREAM <ws://localhost:8124/tw/stream> [RANGE 5s STEP 1s] 
WHERE { 
 ?s person:name ?o FILTER ( ?o = "Huber" ) .
}

REGISTER QUERY LogStream AS
PREFIX person: <http://vocab/Person#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?s ?o 
FROM STREAM <ws://localhost:8124/tw/stream> [RANGE 5s STEP 1s] 
WHERE { 
 ?s person:name ?o FILTER (regex(?o, '^Huber$')) .
}

所有查询都没有给出任何结果,就好像没有匹配项一样。

如果我只执行以下查询,我会得到很多 name = Huber 的结果:

REGISTER QUERY LogStream AS
PREFIX person: <http://vocab/Person#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?s ?o 
FROM STREAM <ws://localhost:8124/tw/stream> [RANGE 5s STEP 1s] 
WHERE { 
 ?s person:name ?o .
}

我不确定C-SPARQL是否支持SPARQL的所有功能。我在另一篇文章中读到,C-SPARQL 不支持 round()。由于精确字符串的匹配是一个基本功能,至少在我看来,我不确定我是否可能做错了什么或者是否错过了一些细节。 我尝试了 SPARQL 中的查询,查询三重存储,所有查询都工作得很好。

所以,我有点困惑为什么字符串匹配在 C-SPARQL 中不起作用。 有人有一些提示或建议吗?


编辑(有关我的数据的更多信息):

我尝试使用 C-SPARQL 查询的数据是来自 Web 流的 JSON-LD 条目。该流是通过 Triplewave 创建和发布的.

这是一个 JSON-LD 的小示例:

[
  {
    "@id": "http://Stream/d7e4e816-0931-42ce-a21a-cbfaa552855d",
    "http://www.w3.org/ns/prov#generatedAtTime": [
      {
        "@value": "2018-11-14T07:08:45.182Z"
      }
    ],
    "@graph": [
      {
        "@id": "http://schema.org/Person#1234",
        "http://schema.org/name": [
          {
            "@value": "Huber"
          }
        ]
      },
      {
        "@id": "http://schema.org/Job#1234",
        "http://schema.org/title"": [
          {
            "@value": "Professor"
          }
        ]
      }
    ]
  }
]

没有类型信息或任何语言标签。

为了使用 C-SPARQL 查询我的网络流我实现了一个 RdfStream,它通过 websocket 接收 JSON-LD 数据,并创建了图表中所有条目的 RdfQuadruple,并将其放入 RdfStream 中。

RdfQuadruple 的示例如下:

http://schema.org/Person#1234 http://schema.org/name Huber . 

最佳答案

STR( value ) 函数解决了我的问题。 我必须事先将值转换为字符串

因此以下查询有效:

REGISTER QUERY LogStream AS
PREFIX person: <http://vocab/Person#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?s ?o 
FROM STREAM <ws://localhost:8124/tw/stream> [RANGE 5s STEP 1s] 
WHERE { 
 ?s person:name ?o FILTER ( str(?o) = "Huber" ) .
}

感谢您的建议。

关于stream - C-SPARQL 查询 - 精确匹配字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53248873/

相关文章:

c# - 如何将流写入独立存储中的 xml 文件

python - 如何在 Python 中使用 OAuth 对 Wikimedia Commons 查询服务进行身份验证?

ruby - Ruby 中的 RDF 现状

scala - 减少大数据流而不会导致堆栈溢出

c# - 在静态方法中管理一次性对象

java - Snap SPARQL API 是否存在?

rdf - 提取由一组节点引起的子图

rdf - Sparql:在 dbpedia.org 上列出史蒂文斯 PIL 伯格的电影

javascript - 如何从 writeStream 获取文件名?

sparql - 限制每个类别的图形数据库响应