如何在编写rdf三元组时为对象指定数值

如何在编写rdf三元组时为对象指定数值,rdf,rdfs,linked-data,turtle-rdf,triples,Rdf,Rdfs,Linked Data,Turtle Rdf,Triples,我正试着为你写一个rdf三元组 混合果汁由2个橙子、1个石榴和1个菠萝制成 这里的混合果汁是类果汁的实例,橙汁石榴和菠萝是水果的实例 我不明白如何给对象一个数值。比如“2”个橙子或“1”个石榴。实现这一点有不同的方法。例如,使用OWL,您可以应用OWL:Restriction来定义rdfs:subClass或OWL:equivalentClass,这取决于您认为配方是必要的还是混合果汁的必要和充分条件 我建议将橙色、石榴和菠萝声明为rdfs:水果的子类。这样,如果按照配方由混凝土水果制成的混凝土

我正试着为你写一个rdf三元组
混合果汁由2个橙子、1个石榴和1个菠萝制成

这里的
混合果汁
是类
果汁
的实例,
橙汁
石榴和
菠萝
水果
的实例


我不明白如何给对象一个数值。比如“2”个橙子或“1”个石榴。

实现这一点有不同的方法。例如,使用OWL,您可以应用
OWL:Restriction
来定义
rdfs:subClass
OWL:equivalentClass
,这取决于您认为配方是必要的还是混合果汁的必要和充分条件

我建议将
橙色
石榴
菠萝
声明为
rdfs:
水果
的子类
。这样,如果按照配方由混凝土水果制成的混凝土果汁可以是
混合果汁
。现在,假设必要但不充分的条件(毕竟它们也需要一些震动),可以将
:mixedFructureJuice
描述为:

:MixedFruitJuice rdf:type owl:Class ;
          rdfs:subClassOf [ owl:intersectionOf ( :Juice
                 [ rdf:type owl:Restriction ;
                 owl:onProperty :hasIngredient ;
                 owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ;
                 owl:onClass :Pineapple]
                 [ rdf:type owl:Restriction ;
                 owl:onProperty :hasIngredient ;
                 owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ;
                 owl:onClass :Pomegranate]
                 [ rdf:type owl:Restriction ;
                 owl:onProperty :hasIngredient ;
                 owl:qualifiedCardinality "2"^^xsd:nonNegativeInteger ;
                 owl:onClass :Orange]
                                                          ) ;
                                       rdf:type owl:Class
                                     ] .
除了猫头鹰,在某些情况下,沙克也可以实现这一点,带来更好的效果

如果您想保留<代码>橙色<代码>,<代码>石榴> />代码> <代码>菠萝<代码>作为实例,而不是“代码>水果<代码>的子类,那么您可以考虑使用RDF具体化或RDF*.< 使用物化可能会产生问题,无论如何,有一种简单的方法来表示它,只使用RDF,在建议使用OWL之前,我应该想到RDF。这是:

:MixedFruitJuice
  rdf:type :Juice ;
  :isMadeOf [
      rdf:type :Orange ;
      :numberOfUnits "2"^^xsd:decimal ;
    ] ;
  :isMadeOf [
      rdf:type :Pineapple ;
      :numberOfUnits "1"^^xsd:decimal ;
    ] ;
  :isMadeOf [
      rdf:type :Pomegranate ;
      :numberOfUnits "1"^^xsd:decimal ;
    ] ;
.

对于
:numberOfUnits
我本可以选择一个
xsd:int
范围,但我假设在果汁中可能需要1.5个苹果。

有不同的方法来实现这一点。例如,使用OWL,您可以应用
OWL:Restriction
来定义
rdfs:subClass
OWL:equivalentClass
,这取决于您认为配方是必要的还是混合果汁的必要和充分条件

我建议将
橙色
石榴
菠萝
声明为
rdfs:
水果
的子类
。这样,如果按照配方由混凝土水果制成的混凝土果汁可以是
混合果汁
。现在,假设必要但不充分的条件(毕竟它们也需要一些震动),可以将
:mixedFructureJuice
描述为:

:MixedFruitJuice rdf:type owl:Class ;
          rdfs:subClassOf [ owl:intersectionOf ( :Juice
                 [ rdf:type owl:Restriction ;
                 owl:onProperty :hasIngredient ;
                 owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ;
                 owl:onClass :Pineapple]
                 [ rdf:type owl:Restriction ;
                 owl:onProperty :hasIngredient ;
                 owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ;
                 owl:onClass :Pomegranate]
                 [ rdf:type owl:Restriction ;
                 owl:onProperty :hasIngredient ;
                 owl:qualifiedCardinality "2"^^xsd:nonNegativeInteger ;
                 owl:onClass :Orange]
                                                          ) ;
                                       rdf:type owl:Class
                                     ] .
除了猫头鹰,在某些情况下,沙克也可以实现这一点,带来更好的效果

如果您想保留<代码>橙色<代码>,<代码>石榴> />代码> <代码>菠萝<代码>作为实例,而不是“代码>水果<代码>的子类,那么您可以考虑使用RDF具体化或RDF*.< 使用物化可能会产生问题,无论如何,有一种简单的方法来表示它,只使用RDF,在建议使用OWL之前,我应该想到RDF。这是:

:MixedFruitJuice
  rdf:type :Juice ;
  :isMadeOf [
      rdf:type :Orange ;
      :numberOfUnits "2"^^xsd:decimal ;
    ] ;
  :isMadeOf [
      rdf:type :Pineapple ;
      :numberOfUnits "1"^^xsd:decimal ;
    ] ;
  :isMadeOf [
      rdf:type :Pomegranate ;
      :numberOfUnits "1"^^xsd:decimal ;
    ] ;
.

对于
:numberOfUnits
我本可以选择一个
xsd:int
范围,但我假设在果汁中可能需要1.5个苹果作为例子。

谢谢,我真的很想了解一些RDF具体化的细节。好吧,这会给一个类型语句计数,但这不是一个真正优雅的解决方案。事实上,有一个非常简单的RDF解决方案,我用它更新了我的答案。谢谢,我真的很想获得一些关于RDF具体化的见解。好吧,这会给类型语句计数,但这不是一个真正优雅的解决方案。事实上,有一个非常简单的RDF解决方案,我用它更新了我的答案。