我正在与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的初学者,对我来说不太清楚
答案 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 Person
和Student
,即hasLastName
的域是Person
和Student
的交集。显然,对于一般人来说,情况并非如此。根据您的需要,有两种可能的解决方案:
(1)您可以指定hasLastName
的域名为Person or Student
,该域名将Person
和Student
结合在一起。
(2)我更喜欢的解决方案是将Student
定义为Person
的子类,然后声明hasLastName
的域是单个类Person
。