Marklogic 蓝色 三倍的: 项目参考号 http://www.w3.org/2002/07/owl#sameAs 项目编号

Marklogic 蓝色 三倍的: 项目参考号 http://www.w3.org/2002/07/owl#sameAs 项目编号,marklogic,marklogic-8,Marklogic,Marklogic 8,使用上面的这种结构,我运行以下查询(从解决方案中修改),它将解析两个id为item_id的文档: import module namespace sem = "http://marklogic.com/semantics" at "/MarkLogic/semantics.xqy"; declare namespace s = "http://www.w3.org/2005/sparql-results#"; for $id in sem:query-results-serialize(

使用上面的这种结构,我运行以下查询(从解决方案中修改),它将解析两个id为item_id的文档:

import module namespace sem = "http://marklogic.com/semantics" 
at "/MarkLogic/semantics.xqy";
declare namespace s = "http://www.w3.org/2005/sparql-results#";

for $id in  sem:query-results-serialize(
sem:sparql( "SELECT ?s WHERE {?s <http://www.w3.org/2002/07/owl#sameAs> <item_id>}"),"xml")//s:uri/text() 


return cts:search(collection(),cts:and-query((
cts:element-value-query(xs:QName($id), '001'))
))
导入模块名称空间sem=”http://marklogic.com/semantics" 
位于“/MarkLogic/semantics.xqy”;
声明命名空间s=”http://www.w3.org/2005/sparql-results#";
对于sem中的$id:查询结果序列化(
sem:sparql(“SELECT?s WHERE{s}”),“xml”)//s:uri/text()
返回cts:search(collection()、cts:和query((
cts:元素值查询(xs:QName($id),'001'))
))
如果我在搜索中也通过了“abc”,它就会起作用


感谢您提出了如何使用此功能的想法,它帮助我解决了此问题。

然后运行扩展搜索查询,如何做到这一点因为我尝试了很多关于这方面的东西,我能够找到与“”相同的值,但如何使用它进行进一步搜索,以将匹配的值映射到abc。如何创建三元组,以将item_id与值001和item_ref_id与abc链接,以及将item_id和item_ref_id与文档链接,在使用item_id abc进行搜索时实际获取文档。关于扩展搜索:这取决于您的搜索方式,但您基本上会接受cts:query并对其进行更改
cts:element查询(xs:Name(“item_id”),“abc”)
将更改为
cts:element查询((xs:Name(“item_id”)、xs:Name(“item_ref_id”))
。一旦你有了扩展查询,你可以像平常一样进行搜索。谢谢你的快速回复,但我无法用
cts:element query
解决它,我用扩展查询的方法再次更新了问题,你能不能更新此解决方案仅适用于中提到的项目\u id 001上面的例子,但不是对于item_id abc,当传递时,我们是否必须对此进行更改,当三重查询返回多个结果时,它会失败。为了尝试这种扩展查询方式,我添加了两个文档,只创建了一个三重项作为item_id item_ref_id,然后运行扩展搜索查询。我尝试了许多stuff关于这一点,我能够找到与“”相同的值,但如何使用它进行进一步搜索以将匹配的值映射到abc。如何创建三元组以将项目id与值001和项目参考id与abc链接,以及将项目id和项目参考id与文档链接,以便在使用项目id abc进行搜索时实际获取文档。关于扩展搜索:it种类of取决于您的搜索方式,但您基本上会接受cts:query并对其进行更改。
cts:element查询(xs:Name(“item_id”),“abc”)
将更改为
cts:element查询(xs:Name(“item_id”)、xs:Name(“item_ref_id”))
。一旦你有了扩展查询,你可以像平常一样进行搜索。谢谢你的快速回复,但我无法用
cts:element query
解决它,我用扩展查询的方法再次更新了问题,你能不能更新此解决方案仅适用于中提到的项目\u id 001上面的例子,但不是对于item_id abc,当传递时,我们是否必须对此进行更改,当三重查询返回多个结果时,它会失败。为了尝试这种扩展查询方式,我添加了两个文档,并刚刚创建了一个三重作为item_id item_ref_id。关于您对另一个答案的评论“如何创建三元组,将item_id与值001和item_ref_id与abc链接,并将item_id和item_ref_id与文档链接,以便在使用item_id abc搜索时实际获取文档。”:您可以将XML转换为RDF/XML并加载该文件。这可能会给您一些想法..关于您对另一个答案的评论”如何创建三元组,将item_id与值001和item_ref_id与abc链接,并将item_id和item_ref_id与文档链接,以便在使用item_id abc进行搜索时实际获取文档。":您可以将XML转换为RDF/XML,然后加载它。可能会给您一些想法。此代码将对每个$id值运行单独的搜索,这有点低效,可能会导致重复结果。单独的搜索也会取消and查询的效果,但这使我意识到我在回答中犯了错误。and应该是en an OR。我的更新答案显示了如何在多个id上有效地执行OR。此代码将对每个$id值运行单独的搜索,这有点低效,并且可能会导致重复结果。单独的搜索也会取消and查询的效果,但这使我意识到我在答案中犯了错误。and应该有b甚至是OR。我更新的答案显示了如何有效地在多个id上执行OR。。
<item>
  <item_ref_id>abc</item_ref_id>
  <color>blue</color>
</item>
 import module namespace sem = "http://marklogic.com/semantics" at         
 "/MarkLogic/semantics.xqy";

 declare namespace s = "http://www.w3.org/2005/sparql-results#";

for $doc in sem:query-results-serialize(sem:sparql( "SELECT ?s WHERE 
{?s <http://www.w3.org/2002/07/owl#sameAs>    
<productId>}"),"xml")//s:uri/text()

return cts:element-value-query(xs:QName($doc), '001')
rule "item_ref_id" construct {
  ?s <item_id> ?o
} {
  ?s <item_ref_id> ?o
}
select * { ?s <http://www.w3.org/2002/07/owl#sameAs> <item_id> }
import module namespace sem = "http://marklogic.com/semantics" at         
 "/MarkLogic/semantics.xqy";

declare namespace s = "http://www.w3.org/2005/sparql-results#";

let $qnames :=
  for $id in sem:query-results-serialize(sem:sparql( "SELECT ?s WHERE 
    {?s <http://www.w3.org/2002/07/owl#sameAs     
      <item_id>}"),"xml")//s:uri/text()

  return xs:QName($id)

return cts:search(collection(), cts:element-value-query($qnames, '001'))
import module namespace sem = "http://marklogic.com/semantics" at "/MarkLogic/semantics.xqy";
declare namespace s = "http://www.w3.org/2005/sparql-results#";


for $doc in sem:query-results-serialize(
sem:sparql("SELECT * WHERE {?s <has-unique-key as#>/<https://www.w3.org/TR/2002/WD-owl-ref-20021112/#hasValue-def>/<http://www.w3.org/2002/07/owl#sameAs>*  <001>}"),     "xml")//s:uri/text()
return fn:doc($doc)
Document1:

<item>
  <item_id> 001 </item_id>
  <color>blue</color>
</item>

Document2:

<item>
  <item_ref_id>abc</item_ref_id>
  <color>blue</color>
</item>

Triple:

<sem:triple>
  <sem:subject>item_ref_id</sem:subject>
  <sem:predicate>http://www.w3.org/2002/07/owl#sameAs</sem:predicate>
  <sem:object>item_id</sem:object>
</sem:triple>
import module namespace sem = "http://marklogic.com/semantics" 
at "/MarkLogic/semantics.xqy";
declare namespace s = "http://www.w3.org/2005/sparql-results#";

for $id in  sem:query-results-serialize(
sem:sparql( "SELECT ?s WHERE {?s <http://www.w3.org/2002/07/owl#sameAs> <item_id>}"),"xml")//s:uri/text() 


return cts:search(collection(),cts:and-query((
cts:element-value-query(xs:QName($id), '001'))
))