Я работаю с 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" .
}
Я также попытался работать с фильтрамии regex, которые являются следующими 2 примерами:
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$')) .
}
Ни один из запросов не дает никаких результатов, как будто совпадений нет.
Если я просто выполню следующий запрос, я получумного результатов с именем = 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.В другом посте я читал, что round () не поддерживается в C-SPARQL.Поскольку совпадение точной строки является основной функцией, по крайней мере, на мой взгляд, я не уверен, что могу сделать что-то не так или пропущу некоторые детали.Я пробовал запросы в SPARQL, запрашивая триплетное хранилище, и там все запросы работают просто отлично.
Итак, я немного запутался, почему совпадение строк здесь не работает в C-SPARQL.У кого-нибудь есть какие-либо советы или предложения?
РЕДАКТИРОВАТЬ (дополнительная информация о том, как выглядят мои данные):
Данные, которые я пытаюсь запросить с помощью C-SPARQL, являются 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"
}
]
}
]
}
]
Нет информации о типе или языкеtag.
Для запроса моего веб-потока с помощью C-SPARQL я реализовал RdfStream, который получает данные JSON-LD через веб-сокет, и создал RdfQuadruple всех записей в моем графике и помещаетэто в RdfStream.
Пример RdfQuadruple это:
http://schema.org/Person#1234 http://schema.org/name Huber .