您如何表达某个主题与 RDF 语义三元组中的任何事物相关?

How do you express that some subject relates to anything in RDF semantic triples?

RDF/TTL 中的大多数三元组示例都是非常具体的类型,相关术语:

有时也允许有其他选择,例如:

但是我想用 RDF 表达这样的东西:

或者更笼统的陈述

所以该对象仅受某种类别的限制,或者可能根本不受限制。

正确的做法是什么?

如何做到这一点在很大程度上取决于您尝试建模的领域、您希望将模型用于什么以及确切您想要传达的内容.不幸的是,您的简单示例实际上并不像看起来那么简单。例如:

Dogs eat steak

你是说有特定的狗吃牛排,还是一般说所有的狗都吃牛排?如果是后者:你是说狗从不吃任何东西牛排,还是说牛排是狗吃的东西之一?是所有的狗 总是 吃东西,还是有些狗根本不吃东西?在概念建模中保持精确很重要

所以,假设我们真正想说的是 "it is true for every dog that if it eats something, it's steak",我们可以使用 RDF Schema 表达如下:

  my:Dog a rdfs:Class .
  my:Steak a rdfs:Class .

  my:eats a rdf:Property ;
        rdfs:domain my:Dog ;
        rdfs:range my:Steak .

其实我们在这里说得更多:我们不仅说如果狗吃了什么东西就是牛排,我们还说如果有人吃了什么东西就是狗。换句话说,只有狗什么都吃,只能吃牛排。

所以,这可能太简单了,对吧?

要为更复杂的 "if a dog eats something, it must be steak" 建模而不自动暗示任何吃任何东西的人都是狗,我们可以使用网络 Ontology 语言 OWL,并使用 属性限制:

  my:Dog a owl:Class ;
       rdfs:subClassOf [ a owl:Restriction ;
                         owl:onProperty my:eats ;
                         owl:allValuesFrom my:Steak ].

字面意思是"the class of dogs is a subclass of the class of all things that eat only steak"。

...当然,还有其他更复杂的方法来模拟其他类型的语句和限制。如果您想了解更多关于如何做这种事情的信息,我建议您阅读在线提供的关于 RDF / OWL ontology 建模的众多教程之一。

当然,就像我一开始说的,你是否需要这种建模取决于你的应用程序,以及你试图使用这个模型的目的。在某些情况下,只在 RDF 中说这样的话就完全没问题了:

my:Dog a my:Animal .
my:Meat a my:Food .
my:Dog my:eats my:Meat .
my:Goat my:eats my:Food .    

然而,使用更具表现力的 RDFS/OWL 词汇来建模 类 和关系有很多好处,特别是在数据集的重用以及现有工具(例如推理机和查询引擎)如何可以利用它。