【问题标题】:Defining a graph with node distances in OWL在 OWL 中定义具有节点距离的图
【发布时间】:2014-04-30 16:35:00
【问题描述】:

假设我想在 OWL 中用节点 A、B 和 C 表示下图, 连接:

A-B d=1 
B-C d=2 
A-C d=3 

例如,从 A 到 B 有一条边,距离 d=1

我想在 OWL 中对这些关系进行建模,以明确所有 3 个连接属于“边缘距离”类型,但它们确实具有不同的值 (d=1,2,3) 如果遵循使用 A、B、C 作为类并定义一个对象属性:“边缘距离”并为距离关系分配不同值的方法,我将无法完成。

或者换句话说,在 OWL 中对上图进行建模的有效方法是什么?

非常感谢!

【问题讨论】:

  • 您不会将类与对象属性相关联,而是将个人与对象属性相关联。你能举一个具体的例子来说明你正在尝试做什么吗?如果你试图“加权”边缘,可以这么说,这通常是通过具体关系完成的,因为它实际上是一个三位置关系。你说的不仅仅是二元关系edgeBetween(x,y),你还有三元关系edgeBetweenWithWeight(x,y,w)。有一些常用的方法来表示这样的关系。例如,见Defining N-ary Relations on the Semantic Web

标签: rdf semantic-web owl ontology description-logic


【解决方案1】:

首先,属性与 OWL 中的类无关。相反,它们将个人联系起来。您可以声明属性的域和范围,在这种情况下,当发现使用该属性时,可以推断出有关主体和客体的类型。如果一个属性 P 有域 D 和范围 R,这意味着当你看到一个三元组 x P y 时,你可以推断出 x rdf:type Dy rdf:type R

听起来您正在尝试表示具有相关权重的属性。严格来说,这是一个三元关系,因为你想说像 edgeBetween(source,target,weight) 这样的东西。在 RDF 或 OWL 中表示此类信息的常用方法是使用一个新节点来表示关系的一个实例,并将这三个部分与该个体相关联。例如,

:edge345 :hasSource :nodeA .
:edge345 :hasTarget :nodeB .
:edge345 :hasWeight 34 .

或者更简洁:

:edge345 :hasSource :nodeA ;
         :hasTarget :nodeB ;
         :hasWeight 34 .

由于通常情况下您不需要识别关系的实例而只是识别关系的一部分,因此您也可以在此处使用空白节点:

[] :hasSource :nodeA ;
   :hasTarget :nodeB ;
   :hasWeight 34 .

[ :hasSource :nodeA ;
  :hasTarget :nodeB ;
  :hasWeight 34 ] .

你的图表,

A-B d=1 
B-C d=2 
A-C d=3 

看起来像这样:

[ :hasSource :A ; :hasTarget :B ; :hasWeight 1 ] .
[ :hasSource :B ; :hasTarget :C ; :hasWeight 2 ] .
[ :hasSource :A ; :hasTarget :C ; :hasWeight 3 ] .

【讨论】:

  • 谢谢,这很有帮助!我的目标是开发一个本体,其中本体的术语应该与不同的加权距离相关联。如果我有很多术语,我也会有很多边,按照上面的方法,每个边都会被视为不同的关系吗?我的目标是定义像 connection(A,B,1); 这样的关系。 conncection(B,C,2)... conncetion-relations 仍然具有相同的名称,或者是来自类型/类关系的实例。我可以用你的方法做到这一点吗?
  • @user3590127 很抱歉,我不太确定您在问什么。您需要更清楚地了解您的术语。在 OWL 中,有类、属性和个体。属性与个体相关,个体属于类。如果你想说“A 类的每个个体 x 都与 B 类的每个个体 y 相关,关系为 R 和权重 W”,你可以这样做,但你需要更具体你的问题。
  • 好的,属性 P 没有理由不能将 A 的实例与 A 的实例相关联,也没有理由将 B 的实例与 B 的实例相关联。没有必要为此设置不同的属性。
  • :edge345 不是属性;这是一个个人:hasSource:hasTarget:hasWeight 是属性。如果您以这种形式编写数据,您将需要一个个人来作为关系实例。不过,它们不需要命名。你可以使用空白节点,我想:[ :hasSource ... ]。或者,您可以使用公理而不明确提及个人,例如说nodeA a (^hasSource some ((hasTarget value nodeB) and (hasWeight value 34)))
  • 另请注意,使用注释属性(如loopasam's answer 中所建议的那样)还需要在表示层有额外的节点,因为公理注释在 RDF 中编码的方式。
【解决方案2】:

您可以通过定义一个微小的“网络”本体并使用 OWL 注释属性来表示距离来表示它。这种解决方案有一些缺点(注解属性上没有智能推理),但理解起来相对简单。

曼彻斯特语法中的伪代码:

# Prefix used for the demo:
Prefix: network: <http://www.example.org/>

# Annotation property that will hold the distance value between two nodes
AnnotationProperty: <network:distance>

# Edges will be modelled with an object property
ObjectProperty: <network:edge>

# We define the concept of "Node" as a class.
Class: <network:Node>

# Two individuals A and B are declared. They represent node instances
Individual: <network:B>

Individual: <network:A>

  Facts:  

   # Annotation of the axiom below (link A -> B)
   # with a value for the distance
   Annotations: <network:distance> "1"

              # The object property linking the node A to the node B
              <network:edge>  <network:B>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    相关资源
    最近更新 更多