Marklogic 解释推理规则

Marklogic 解释推理规则,marklogic,semantic-web,marklogic-9,Marklogic,Semantic Web,Marklogic 9,我将三元组作为托管三元组加载到MarkLogic中。具体来说,所有三元组都对应于SKOS和SKOS-XL模式。我正在发出一个SPARQL查询,查找类型为的所有主题。这可以是直接的,也可以通过子类关系。因此,在发出查询时,我使用rdfs.rules规则集进行推断。这是有效的,但我也选择了类型的主题,这些主题被推断为也属于类型。有没有什么方法可以让我看到生成这个三元组的规则链 我正在执行类似于: import module namespace sem = "http://marklogic.com/

我将三元组作为托管三元组加载到MarkLogic中。具体来说,所有三元组都对应于SKOS和SKOS-XL模式。我正在发出一个SPARQL查询,查找类型为
的所有主题。这可以是直接的,也可以通过子类关系。因此,在发出查询时,我使用rdfs.rules规则集进行推断。这是有效的,但我也选择了
类型的主题,这些主题被推断为也属于
类型。有没有什么方法可以让我看到生成这个三元组的规则链

我正在执行类似于:

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


    let $iris := ("urn:x-evn-master:ISOCountries2017-11-13") ! sem:iri(.)
    let $bindings := map:map()
    let $_ := map:put($bindings, "inSet", $iris)
    let $_ := map:put($bindings, "s", sem:iri("https://www.iso.org/obp/ui/#iso:code:3166:AN_EXACT_SYN__AN_"))
    let $rs := sem:ruleset-store("rdfs.rules", sem:store())

    return
        sem:sparql('
            select ?p ?o where {
                graph ?g {
                  ?s ?p ?o .
                }
                FILTER(?g IN (?inSet))
            }
        ', $bindings, (), $rs)
这是对我的回报:

<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2004/02/skos/core#Concept>
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>   <http://www.w3.org/2008/05/skos-xl#Label>
<http://www.w3.org/2008/05/skos-xl#literalForm> "AN"@en

“安”@en

1。在SPARQL查询中,
skos:Concept
出现在哪里?2.也许您可以使用SPARQL属性路径来匹配“间接”关系。通过遍历组成rdfs规则集的各种子规则集,我能够确定当我包含推断显示的range.rules时。基于此,我能够解决我的问题。但如果能够确定使用了哪些三元组来驱动给定的断言(就像给定的URI是一个skos:Concept)将非常有用,我想这就是规则。在不了解数据的情况下,很难回答使用了哪些三元组。您共享的代码似乎与您所说的相反。您查看特定的主题,然后查看结果以检查其中是否存在skos:概念类型。为什么不使用类似于
where{s a skos:Concept}
,以及推断的方法呢。这将返回直接或间接类型skos:Concept的主题。您当前正在选择并返回所有谓词和对象,这些谓词和对象链接到您通过$bindings提供的主题。@grtjn我的查询就是用来解决问题的。正如你所说,我确实询问了skos的概念,我得到的比我预想的要多。原来问题是一个错误的rdf:范围定义。