Значения Concat для использования в качестве темы в запросах SPARQL (MarkLogic) - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь выполнить SPARQL-запрос в MarkLogic, объединив мою тему, предикат и объект для использования в качестве нового "субъектного" узла. Я попытался сделать это с помощью запроса ниже

SELECT *
WHERE {
   ?subject </in/relationship/with> ?object .
   BIND(concat(?subject, "/in/relationship/with", ?object) AS ?relationship
   ?relationship </current/status> ?status
}

Однако этот запрос не работает, так как ?relationship теперь содержит строку для каждой строки, в результате чего выходные данные запроса будут полностью пустыми. Поэтому мне интересно, можно ли это сделать и можно ли преобразовать строку в объект, с которым SPARQL может запросить.

1 Ответ

2 голосов
/ 11 марта 2019

Станислав верен, вам нужно обернуть строку в IRI ().Вот фрагмент кода, который запускается непосредственно в QC.Запустите его для пустой базы данных, чтобы не загрязнять другие ваши данные:

xdmp:document-insert('/triples.xml', <triples>{
  sem:triple(sem:iri("http://my/subject1"), sem:iri("/in/relationship/with"), sem:iri("http://my/subject2")),
  sem:triple(sem:iri("http://my/subject1/in/relationship/with/http://my/subject2"), sem:iri("/current/status"), "My status")
}</triples>)
;
sem:sparql('
  SELECT *
  WHERE {
    ?subject </in/relationship/with> ?object.
    BIND(IRI(CONCAT(?subject, "/in/relationship/with/", ?object)) AS ?relationship)
    ?relationship </current/status> ?status.
  }
')

Может ли это быть разумным подходом.Имейте в виду, что MarkLogic особенно силен в хранении связанных данных в документах, и вы можете встраивать тройки или использовать TDE для проецирования тройок из них, что позволяет вам объединять силы из поиска документов и сохранять связанные данные вместе, одновременнопо-прежнему позволяет аргументировать факты с помощью SPARQL.

HTH!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...