发现在类层次结构路径的公共超和长度发现在类层次结构路径的公共超和长度(finding common

2019-05-12 11:44发布

我有两个类,A和B,从DBpedia中。 我该如何计算每个类的距离(边数)的通用超C,我怎么能找到这个共同的超?

Answer 1:

你可以这样做,但两件事情应该注意的第一:

  1. 两个班可以有很多超的共通之处,不一定只有一个。 这意味着,有可能不是唯一的最专业的通用超类。
  2. 如果某些类C为A和B的超类,那么C的每一个超类也是 A和B的一个超类
  3. 一类d可能是通过多条路径,这可能会导致一些困难,如果你想计算长度C的超类。 例如,

     Computer Hardware Monitors Flatscreen Monitors Dell Flatscreen Monitors * Dell Hardware Dell Flatscreen Monitors * 

    在此层次结构中,戴尔纯平显示器是由长度为2(DFM→DH→CH)的路径的计算机硬件的子类,并通过长度为3(DFM→FM→M→CH)的路径。 这很好,但如果你从计算DFM的长度CH的另一个小类中,应使用哪个那些?

  4. 可能没有数据中的任何普通超。 这也是完全合法的情况。 现在, 在OWL中,每个类是一个子类owl:Thing ,但这不是一般保持RDF,你可能甚至不会从DBpedia中这一结果,因为有不附加任何OWL推理。

假设你可以工作,你需要解决这些问题的细节,这是不是太硬。 这是最简单的,在我看来,建立逐步此查询一步。 首先,使用这样的查询,你可以得到一个类的父类,和路径的每一个超类的长度。 这并不假定有从子类到超类的唯一路径。 如果有多个路径,我认为报告将是不同的路径的总和长度。 我不知道你怎么能解决这个问题。

select ?sub ?super (count(?mid) as ?length) where {
  values ?sub { dbpedia-owl:Person } 
  ?sub rdfs:subClassOf* ?mid .
  ?mid rdfs:subClassOf+ ?super .
}
group by ?sub ?super

SPARQL结果

sub                                super                               length
http://dbpedia.org/ontology/Person http://dbpedia.org/ontology/Agent   1
http://dbpedia.org/ontology/Person http://www.w3.org/2002/07/owl#Thing 2

现在唯一的办法就是使用这种方法两个子类,然后再加入基于它们所共有的超结果,使用这样的查询:

select * 
{
  values (?a ?b) { (dbpedia-owl:Person dbpedia-owl:SportsTeam) }

  { select ?a ?super (count(?mid) as ?aLength) { 
      ?a rdfs:subClassOf* ?mid .
      ?mid rdfs:subClassOf+ ?super .
    }
    group by ?a ?super
  }
  { select ?b ?super (count(?mid) as ?bLength) { 
      ?b rdfs:subClassOf* ?mid .
      ?mid rdfs:subClassOf+ ?super .
    }
    group by ?b ?super
  }
}

SPARQL结果

该查询还发现路径长度为所有常见的超类,不只是最特殊的,它仍然不增加从长度?a?super和长度?b?super得到充分的路径长度。 这只是有点算术虽然。 您可以订购这些结果由长度,然后限制只是一个结果,这样你得到的最短的一个。 正如我指出的那样,有可能不是唯一的最具体的共同的子类,但用最短长度的结果将是最具体的共同的一个子类。

select ?a ?b ?super (?aLength + ?bLength as ?length)
{
  values (?a ?b) { (dbpedia-owl:Person dbpedia-owl:SportsTeam) }

  { select ?a ?super (count(?mid) as ?aLength) { 
      ?a rdfs:subClassOf* ?mid .
      ?mid rdfs:subClassOf+ ?super .
    }
    group by ?a ?super
  }
  { select ?b ?super (count(?mid) as ?bLength) { 
      ?b rdfs:subClassOf* ?mid .
      ?mid rdfs:subClassOf+ ?super .
    }
    group by ?b ?super
  }
}
order by ?length
limit 1

SPARQL结果

a      b          super length
Person SportsTeam Agent 3


文章来源: finding common superclass and length of path in class hierarchies