【问题标题】:Inferencing in embedded triples of MarklogicMarklogic 嵌入式三元组的推理
【发布时间】:2015-06-26 09:32:43
【问题描述】:

我有以下 2 个文件。 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>

另外一个文档包含以下数据:

<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>

我已经在这两个嵌入的三元组之间建立了关系

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

INSERT DATA
{

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

}

当我查询以获取 Bodycote Plc 的经济部门的所有结果时,我得到了两个三元组,这是正确的,但是当我使用组合查询时,它并没有给我所需的结果。

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

我使用了以下查询:

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" )
  ) )
)

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

【问题讨论】:

    标签: marklogic inference triplestore triples inference-engine


    【解决方案1】:

    您的方法的问题在于 cts:query 仅选择相关文档,而不是指定子类的托管三元组。您在这里没有使用真正的推理,而是实际上通过添加三元组来外部化推理规则。改用规则集,这样更灵活,效果也更好。详情请见Semantics guide

    一旦您的规则集文件就位,您需要将查询包装在sem:store 中,然后使用sem:ruleset-store 应用规则集:

    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" )
          ))
        )
      )
    )
    

    HTH!

    【讨论】:

      猜你喜欢
      • 2015-05-08
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多