如何在编写 rdf 三元组时为对象赋予数值
How to give a numeric value to an object while writing an rdf triple
我正在尝试为
MixedFruitJuice is made of 2 Oranges, 1 Pomegranate and 1 Pineapple
。
这里MixedFruitJuice
是class的实例FruitJuice
和Orange
Pomegranate
和Pineapple
是Fruit
的实例.
我不明白如何为对象赋予数值。比如“2”个橙子,或“1”个石榴。
有多种方法可以实现这一点。例如,使用 OWL,您可以应用 owl:Restriction
来定义 rdfs:subClass
或 owl:equivalentClass
,这取决于您是否认为您的配方是必要的或充分必要条件一个MixedFruitJuice
。
我建议将 Orange
、Pomegranate
和 Pineapple
声明为 Fruit
的 rdfs:subClass
。这样,如果按照配方由混凝土水果制成混凝土果汁,则可以 MixedFruitJuice
。现在,假设必要但不充分的条件(毕竟他们也需要一些摇晃),:MixedFruitJuice
可以描述为:
: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
] .
除了OWL,在某些情况下也可以用SHACL来实现,带来更好的效果。
如果您想将 Orange
、Pomegranate
和 Pineapple
作为实例而不是 Fruit
的子类,那么您可以考虑使用 RDF 具体化或 RDF* .
使用具体化会产生问题,无论如何有一种简单的方法来表示它,只使用 RDF,我在建议 OWL 之前就应该想到这一点。在这里:
: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 个苹果。
我正在尝试为
MixedFruitJuice is made of 2 Oranges, 1 Pomegranate and 1 Pineapple
。
这里MixedFruitJuice
是class的实例FruitJuice
和Orange
Pomegranate
和Pineapple
是Fruit
的实例.
我不明白如何为对象赋予数值。比如“2”个橙子,或“1”个石榴。
有多种方法可以实现这一点。例如,使用 OWL,您可以应用 owl:Restriction
来定义 rdfs:subClass
或 owl:equivalentClass
,这取决于您是否认为您的配方是必要的或充分必要条件一个MixedFruitJuice
。
我建议将 Orange
、Pomegranate
和 Pineapple
声明为 Fruit
的 rdfs:subClass
。这样,如果按照配方由混凝土水果制成混凝土果汁,则可以 MixedFruitJuice
。现在,假设必要但不充分的条件(毕竟他们也需要一些摇晃),:MixedFruitJuice
可以描述为:
: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
] .
除了OWL,在某些情况下也可以用SHACL来实现,带来更好的效果。
如果您想将 Orange
、Pomegranate
和 Pineapple
作为实例而不是 Fruit
的子类,那么您可以考虑使用 RDF 具体化或 RDF* .
使用具体化会产生问题,无论如何有一种简单的方法来表示它,只使用 RDF,我在建议 OWL 之前就应该想到这一点。在这里:
: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 个苹果。