OWL java对两个类使用相同的数据属性

时间:2018-04-12 09:10:50

标签: java owl

我正在与OWL合作,我已经定义了两个类,他们共享一个数据属性:

FontAwesome Icon

在java中,我创建了一个项目,它从一个owl文件和一个xml文件开始创建一个表单。 在我的xml文件中,我以这种方式定义表单的各个部分:

<Declaration>
    <DataProperty IRI="#hasLastName" />
</Declaration>

<DataPropertyDomain>
    <DataProperty IRI="#hasLastName" />
    <Class IRI="#Class1" />
</DataPropertyDomain>

<DataPropertyDomain>
    <DataProperty IRI="#hasLastName" />
    <Class IRI="#Class2" />
</DataPropertyDomain>

如何访问1级和2级的不同姓氏属性? 我通过http://www.sample.com/myontology#hasLastName检索它 有类似http://www.sample.com/myontology#Class1#hasLastName的内容吗?

对不起,我是Ontology的初学者,对我来说不太清楚

1 个答案:

答案 0 :(得分:0)

假设你有一个本体论如下:

Datatype: xsd:string

DataProperty: hasLastName
    Domain: 
        Person,
        Student

    Range: 
        xsd:string        

Class: Person

Class: Student

以下代码将检索2个域:

IRI lastNamePropertyIRI = IRI.create(ontologyIRI + "#hasLastName");
OWLDataProperty lastNameProperty = dataFactory.getOWLDataProperty(lastNamePropertyIRI);
List<OWLClassExpression> domainClasses = 
   ontology
      .dataPropertyDomainAxioms(lastNameProperty)
      .map(OWLDataPropertyDomainAxiom::getDomain)
      .collect(Collectors.toList());

  for (OWLClassExpression owlClass : domainClasses) {
    logger.trace("Domain class = " + owlClass);
  } 

但是,我在这里还有其他一些与本体而不是代码有关的问题。

对于我提供的本体,只要您指定个人john通过hasLastName链接到某个姓氏,本体推理器就会推断出john 两者< / strong> a PersonStudent,即hasLastName的域是PersonStudent的交集。显然,对于一般人来说,情况并非如此。根据您的需要,有两种可能的解决方案:

(1)您可以指定hasLastName的域名为Person or Student,该域名将PersonStudent结合在一起。

(2)我更喜欢的解决方案是将Student定义为Person的子类,然后声明hasLastName的域是单个类Person