Marklogic 标记逻辑嵌入三元组中的推理

Marklogic 标记逻辑嵌入三元组中的推理,marklogic,inference,triplestore,triples,inference-engine,Marklogic,Inference,Triplestore,Triples,Inference Engine,我有以下两个文件。 1文件包含以下数据: <Content> <sem:triples xmlns:sem="http://marklogic.com/semantics"> <sem:triple> <sem:subject>http://sector#Basic_Materials</sem:subject> <sem:predicate>http://relationship#isT

我有以下两个文件。 1文件包含以下数据:

<Content>
  <sem:triples xmlns:sem="http://marklogic.com/semantics">
    <sem:triple>
      <sem:subject>http://sector#Basic_Materials</sem:subject>
      <sem:predicate>http://relationship#isTRBCEconomicSectorOf</sem:predicate>
      <sem:object>http://company#CST_Mining_Group_Limited</sem:object>
    </sem:triple>
  </sem:triples>
  <AnalystName>Henrik Christiansson</AnalystName>
  <DocumentFormat>pdf</DocumentFormat>
</Content>

http://sector#Basic_Materials
http://relationship#isTRBCEconomicSectorOf
http://company#CST_Mining_Group_Limited
亨里克·克里斯蒂安森
pdf
以及另一份包含以下数据的文件:

<Content>
  <sem:triples xmlns:sem="http://marklogic.com/semantics">
    <sem:triple>
      <sem:triple>
        <sem:subject>http://sector#Energy_-_Fossil_Fuels</sem:subject>
        <sem:predicate>http://relationship#isTRBCEconomicSectorOf</sem:predicate>
        <sem:object>http://company#Bodycote_PLC</sem:object>
      </sem:triple>
    </sem:triple>
  </sem:triples>
  <AnalystName>Pawel Dziedzic</AnalystName>
  <DocumentFormat>pdf</DocumentFormat>
</Content>

http://sector#Energy_-_化石燃料
http://relationship#isTRBCEconomicSectorOf
http://company#Bodycote_PLC
帕维尔·季季季奇
pdf
我已经在这两个嵌入的三元组之间建立了一个关系

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

INSERT DATA
{

  <http://company#CST_Mining_Group_Limited> rdfs:subClassOf <http://company#Bodycote_PLC> .

}
前缀rdfs:
插入数据
{
rdfs:子类。
}
当我查询以获得Bodycote Plc economicSector的所有结果时,我会得到两个三元组,这是正确的,但当我使用组合查询时,它不会给出所需的结果

例如,当查询的经济部门为BodyCote,并且分析师名称为Henrik Christianson时,我希望它返回第一个三元组,但它没有返回

我使用了以下查询:

xquery version "1.0-ml";

import module namespace sem = "http://marklogic.com/semantics" 
  at "/MarkLogic/semantics.xqy";

sem:sparql(
  'SELECT ?subject
   WHERE {
     ?subject <http://relationship#isTRBCEconomicSectorOf> <http://company#Bodycote_PLC>
   }',
  (),
  (),
  cts:and-query( (
    cts:element-value-query( xs:QName("AnalystName"), "Henrik Christiansson" )
  ) )
)
xquery版本“1.0-ml”;
导入模块命名空间sem=”http://marklogic.com/semantics" 
位于“/MarkLogic/semantics.xqy”;
sem:sparql(
“选择”主题
在哪里{
?主题
}',
(),
(),
cts:和查询((
元素值查询(xs:QName(“AnalystName”),“Henrik Christianson”)
) )
)

我想知道是否有一种方法可以在组合查询中应用推断。

您的方法的问题是cts:query只选择相关文档,而不是指定子类的托管三元组。这里您并没有使用真正的推理,而是通过添加三元组来将推理规则具体化。改用规则集,这样更灵活,效果也更好。有关详细信息,请参阅

规则集文件就位后,您需要将查询包装到中,然后使用以下命令应用规则集:

sem:sparql(
'
选择?主题
在哪里{
?主题
sem:sparql(
  '
    SELECT ?subject
    WHERE {
      ?subject <http://relationship#isTRBCEconomicSectorOf <http://company#Bodycote_PLC>
    }
  ',
  (),
  (),
  sem:ruleset-store(
    "myrules",
    sem:store(
      (),
      cts:and-query((
       cts:element-value-query( xs:QName("AnalystName"), "Henrik Christiansson" )
      ))
    )
  )
)