【问题标题】:Can't infer an interesting pizza无法推断出有趣的披萨
【发布时间】:2017-07-02 15:34:43
【问题描述】:

我已将披萨本体加载到 Stardog 和 Blazegraph 中,以及我编写的一些三元组,包括一个有四种配料的披萨。正如@AKSW 建议的那样,我试图使浇头与众不同。

披萨本体将有趣的披萨定义为具有至少三种配料的披萨。我很确定我启用了 OWL 推理,但Triplestore 都没有说我的披萨很有趣

谁能告诉我在任何免费提供的三元存储中启用此推理的设置,或者指出我的三元存储做错了什么? 特别是,我是否应该能够推断出披萨实例、披萨类或两者都是“有趣的”?

有趣的比萨定义:

pizza:InterestingPizza rdf:type owl:Class ;
    owl:equivalentClass [ owl:intersectionOf ( pizza:Pizza
            [ rdf:type owl:Restriction ;
                owl:onProperty pizza:hasTopping ;
                owl:minCardinality "3"^^xsd:nonNegativeInteger
            ]
        ) ;
        rdf:type owl:Class
    ] ;
        rdfs:label "PizzaInteressante"@pt .

我的其他三元组:

@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix pizza: <http://www.co-ode.org/ontologies/pizza/pizza.owl#> .

<http://www.co-ode.org/ontologies/pizza/pizza.owl#marksPizzaClass>
  a owl:Class ;
  owl:equivalentClass [
    a owl:Restriction ;
    owl:onProperty <http://www.co-ode.org/ontologies/pizza/pizza.owl#hasTopping> ;
    owl:someValuesFrom <http://www.co-ode.org/ontologies/pizza/pizza.owl#CaperTopping>
  ], [
    a owl:Restriction ;
    owl:onProperty <http://www.co-ode.org/ontologies/pizza/pizza.owl#hasTopping> ;
    owl:someValuesFrom <http://www.co-ode.org/ontologies/pizza/pizza.owl#JalapenoPepperTopping>
  ], [
    a owl:Restriction ;
    owl:onProperty <http://www.co-ode.org/ontologies/pizza/pizza.owl#hasTopping> ;
    owl:someValuesFrom <http://www.co-ode.org/ontologies/pizza/pizza.owl#LeekTopping>
  ], [
    a owl:Restriction ;
    owl:onProperty <http://www.co-ode.org/ontologies/pizza/pizza.owl#hasTopping> ;
    owl:someValuesFrom <http://www.co-ode.org/ontologies/pizza/pizza.owl#MozzarellaTopping>
  ], [
    a owl:Restriction ;
    owl:onProperty <http://www.co-ode.org/ontologies/pizza/pizza.owl#hasTopping> ;
    owl:someValuesFrom <http://www.co-ode.org/ontologies/pizza/pizza.owl#PineKernels>
  ] ;
  rdfs:subClassOf <http://www.co-ode.org/ontologies/pizza/pizza.owl#Pizza> ;
  rdfs:label "mark's pizza class" .

<http://www.co-ode.org/ontologies/pizza/pizza.owl#marksPizzaClassMember>
  a owl:NamedIndividual, <http://www.co-ode.org/ontologies/pizza/pizza.owl#marksPizzaClass> ;
  rdfs:label "a member of the mark's pizza class" .

<http://www.co-ode.org/ontologies/pizza/pizza.owl#marksPizzaInstance>
  a owl:NamedIndividual, <http://www.co-ode.org/ontologies/pizza/pizza.owl#Pizza> ;
  pizza:hasTopping pizza:marksPeppers, pizza:topping1, pizza:topping2, pizza:topping3, pizza:topping4 ;
  rdfs:label "mark's pizza instance" .

pizza:marksPeppers
  a owl:NamedIndividual, pizza:JalapenoPepperTopping ;
  rdfs:label "mark's special spicy jalapenos" .

pizza:topping1
  a owl:NamedIndividual, pizza:MozzarellaTopping ;
  rdfs:label "mark's semi secret topping one" .

pizza:topping2
  a owl:NamedIndividual, pizza:PineKernels ;
  rdfs:label "mark's semi secret topping two" .

pizza:topping3
  a owl:NamedIndividual, pizza:CaperTopping ;
  rdfs:label "mark's semi secret topping three" .

pizza:topping4
  a owl:NamedIndividual, pizza:LeekTopping ;
  rdfs:label "mark's semi secret topping four" .

[]
  a owl:AllDifferent ;
  owl:distinctMembers (
   pizza:marksPeppers
   pizza:topping1
   pizza:topping2
   pizza:topping3
   pizza:topping4
 ) .

查询有关具有五种不同浇头的披萨实例的任何知识:

prefix pizza: <http://www.co-ode.org/ontologies/pizza/pizza.owl#>
select *
where
{ pizza:marksPizzaInstance ?p ?o }

Stardog 的结果 (我已手动将完整的 URI 替换为前缀 URI):

+---------------------+----------------------------+
|          p          |             o              |
+---------------------+----------------------------+
| pizza:hasIngredient | pizza:topping1             |
| pizza:hasIngredient | pizza:topping2             |
| pizza:hasIngredient | pizza:topping3             |
| pizza:hasIngredient | pizza:topping4             |
| pizza:hasIngredient | pizza:marksPeppers         |
| pizza:hasTopping    | pizza:topping1             |
| pizza:hasTopping    | pizza:topping2             |
| pizza:hasTopping    | pizza:topping3             |
| pizza:hasTopping    | pizza:topping4             |
| pizza:hasTopping    | pizza:marksPeppers         |
| rdfs:label          | mark's pizza instance      |
| rdf:type            | owl:Thing                  |
| rdf:type            | pizza:DomainConcept        |
| rdf:type            | pizza:Food                 |
| rdf:type            | pizza:Pizza                |
| rdf:type            | pizza:SpicyPizza           |
| rdf:type            | pizza:SpicyPizzaEquivalent |
| rdf:type            | pizza:CheeseyPizza         |
| rdf:type            | pizza:marksPizzaClass      |
+---------------------+----------------------------+

Stardog 已经推断我的比萨有配料(因为它有配料),我的比萨是一种食物,甚至我的比萨是辣的,因为它有马克的墨西哥胡椒作为配料。但它并没有推断出有趣的披萨类的成员资格。

这是我的 Stardog 推理设置:

Reasoning type: SL
Reasoning approximate: ON 
SameAs reasoning: FULL
TBox named graph: *

【问题讨论】:

  • 嗨,马克。我猜你现在遇到了这样一个事实,即在 OWL 中没有唯一名称假设 (UNA)。这意味着推理者不能从不同的名字假设个体是不同的。因此,您必须使个体明显不同(成对使用owl:differentFrom,或者更方便地将owl:allDifferent 与个体列表一起使用)。在你的情况下,浇头。
  • 乌龟里面的东西:_:x rdf:type owl:AllDifferent . _:x owl:members (:topping1 :topping2 :topping3 :topping4)
  • 我想知道为什么那些人没有提到这一点——他们都是真正的 OWL 专家。也许他们忽略了minCardinality,这在使用标准 OWL 推理时主要导致这些问题。
  • 不用担心。要知道的一件重要事情:您应该了解不同的推理配置文件 - 不确定您在三重存储中使用了哪一个,但据我所知,只有 Stardog 支持完整的 OWL 推理。见w3.org/TR/owl2-profiles。例如,OWL QL 仅支持 owl:someValuesFromowl:Thing 作为 SubClassOf 公理中的填充符。这通常也会影响只是语法糖的等价公理。而且一般不支持ObjectMinCardinality
  • 好的,祝你好运,让我知道哪种方式最适合你 :D 我明天会使用 Stardog 推理支持,但我很确定 SL 配置文件不会'不包含一些必要的公理。他们的文档指出它是其他配置文件的组合,但缺少详细信息。 PS:在德国,大多数人可能会在一个小时内上床睡觉,但我更喜欢“工作”到午夜或更长时间。不,这是我的私人帐户,但我知道,这个名字有点误导 - 也许我应该在我们的研究小组中分享这些凭据。干杯

标签: sparql jena stardog blazegraph rdf4j


【解决方案1】:

我在 Stardog 5.0 上玩了一会儿,获得了更多见解:

  1. 从 OWL DL 的角度来看,本体的表达足以推断出这一点

    pizza:marksPizzaInstance rdf:type pizza:InterestingPizza .
    

    例如,这可以使用 Protege 进行评估。可以使用非常酷的 Protege 功能计算的示例解释是:

    我可以通过启用DL 推理在 Stardog 中实现同样的效果:

    bin/stardog-admin db offline pizzaDB
    bin/stardog-admin metadata set -o reasoning.type=DL pizzaDB
    bin/stardog-admin db online pizzaDB
    

    结果:

    +-------------------+-------------------------+
    |         p         |            o            |
    +-------------------+-------------------------+
    |  pizza:hasTopping |  pizza:topping1         |
    |  pizza:hasTopping |  pizza:topping2         |
    |  pizza:hasTopping |  pizza:marksPeppers     |
    |  pizza:hasTopping |  pizza:topping3         |
    |  pizza:hasTopping |  pizza:topping4         |
    |  rdf:type         |  pizza:Pizza            |
    |  rdf:type         |  owl:Thing              |
    |  rdf:type         |  pizza:InterestingPizza |
    +-------------------+-------------------------+
    
  2. 对于 Stardog 配置文件 SL 它不起作用,因为该公理不在配置文件中。当查看报告所有被忽略的公理的 Stardog 日志文件时,可以识别出这一点:

    WARN  2017-07-03 09:54:51,219 [XNIO-1 task-6] com.clarkparsia.blackout.ProfileFilterBase:apply(39): 
    Not a valid SL axiom: 
    EquivalentClasses(pizza:InterestingPizza, and(pizza:Pizza, min(pizza:hasTopping,3,owl:Thing))) 
    

    我当时尝试的是添加一个 SWRL 规则,因为 SL 配置文件支持它:

    Pizza(?x), hasTopping(?x, ?y1), hasTopping(?x, ?y2), hasTopping(?x, ?y3),  
    DifferentFrom (?y1, ?y2),  DifferentFrom (?y1, ?y3),  DifferentFrom (?y2, ?y3) 
    -> InterestingPizza(?x)
    

    令人惊讶的是,这也不起作用。我想我错过了一些重要的事情,我仍在调查为什么这不起作用。

    最后,我尝试了 Stardog 规则而不是 SWRL,它的语法非常简洁,接近 SPARQL(基本上使用 BGP):

    [] a rule:SPARQLRule ;
     rule:content """
        PREFIX :<http://www.co-ode.org/ontologies/pizza/pizza.owl#>
          IF {
                ?p a :Pizza ;
                   :hasTopping ?t1 , ?t2, ?t3
                FILTER(?t1 != ?t2 && ?t1 != ?t3 && ?t2 != ?t3)
             }
          THEN {
                ?p a :InterestingPizza
              }""" .
    

    这按预期工作,SPARQL 查询返回所需的推断三元组。

【讨论】:

  • 好的,使用您的输入,我现在可以在 Protege 和 Stardog (DL) 中看到我的预期推理。当我有更多的空闲时间时,我将更多地尝试你所涵盖的不同主题。 (特别是再次尝试 Blazegraph。)谢谢。
  • 请注意,DL 配置文件更昂贵,但通过 Stardog 规则,您可以使用 SL 配置文件。事实上,这不适用于其他三联店。我从未使用过 Blazegraph,但我猜它们支持 OWL QL(主要用于查询重写),这不适用于您的本体中的等价公理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多