В настоящее время я пытаюсь выяснить, можно ли использовать тезаурус в SPARQL из консоли XQuery.Код, который я сейчас использую, показан ниже
xquery version "1.0-ml";
import module namespace sem = "http://marklogic.com/semantics" at "/MarkLogic/semantics.xqy";
import module namespace thsr="http://marklogic.com/xdmp/thesaurus"
at "/MarkLogic/thesaurus.xqy";
sem:sparql(
'
PREFIX xs: <http://www.w3.org/2001/XMLSchema#>
PREFIX cts: <http://marklogic.com/cts#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema/>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX db: <http://dbpedia.org/resource/>
PREFIX onto: <http://dbpedia.org/ontology/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns>
PREFIX xdmp: <http://marklogic.com/xdmp#>
SELECT *
WHERE{
?question </has_comment> ?comment .
?commented_by_person </commented_by> ?comment .
#FILTER (cts:contains(fn:doc(?comment), thsr:expand( cts:element-word-query(xs:QName("text"),"go"), thsr:lookup("/myThsrDocs/wordnet.xml", "go"), (), (), () ) ) ) .
}',
(),
(),
() #thsr:expand( cts:element-word-query(xs:QName("text"),"go"), thsr:lookup("/myThsrDocs/wordnet.xml", "go"), (), (), () )
)
В приведенном выше коде есть два места с комментариями, показывающими, где, по моему мнению, они могут быть размещены.Однако, если thsr:expand
используется перед запросом SPARQL, он удалит все документы sem:triple
, что приведет к пустому запросу.С другой стороны, если он будет помещен в запрос SPARQL, это приведет к ошибке, поскольку префикс для thsr
не предоставлен, так как я не могу найти префикс для thsr
в SPARQL.
Поэтому, любые советы или способы подойти к этому будут очень благодарны.
=== Обновление ===
На данный момент мне удалось найти решение на основе этой темы .Где выражение FLOWER используется для итерации и проверки выполнения определенного условия перед возвратом результатов.Коды для достижения этой цели можно увидеть ниже.
for $d in $test
return (
for $x in $d
where(cts:contains($x["comment_text"],thsr:expand(cts:word-query("go"), thsr:lookup("/myThsrDocs/wordnet.xml", "go"),(), (), () ))) or ($x["comment_text"] = "comment_text")
return $x
)
Однако, как видно, способ, которым это делается, выглядит не очень масштабируемым.Поэтому, любые улучшения этого решения или другие способы достижения этого будут оценены.