如何将属性定义为OWL2 / Protege / Ontology

时间:2018-05-30 01:34:29

标签: logic owl ontology protege

如果已经提出问题或回复是微不足道的话,请道歉。我试着搜索如何实现这个特定的案例,但我还没有找到任何解决方案。

问题:我想建模:
让我们假设属性'isFriendOf'不是对称的,为了使这种关系成为可能(x isFriendOf y),两个条件必须是有效的:

x sendsFriendRequestTo y
y acceptsFriendRequestFrom x

每当我们的Ontology中出现这两个属性时,就会自动推断属性 x isFriendOf y 。那就是:

(x sendsFriendRequestTo y) AND (y acceptsFriendRequestFrom x) -> x isFriendOf y

到目前为止我尝试了什么
我试图通过以下方式将此属性建模为属性链

1) sendsFriendRequestTo some (acceptsFriendRequestFrom Self) -> isFriendOf 

(推理器给出错误并且日志显示:非简单Obj属性使用简单的

2) sendsFriendRequestTo o acceptsFriendRequestFrom -> isFriendOf 

(虽然我意识到这不是两个属性的正确组合)

评论
我可以将Classes定义为两个类/概念的交集;但是我不清楚如何将属性定义为两个其他属性的交集(在这种情况下,如何指定最终属性的域和范围?)。

我在“Rolification”上找到了一些东西(即,定义一个类然后强制它作为一个角色处理),但我不确定我是否理解它是如何工作的,或者它是否会对我想要建模的东西很有用。

有任何帮助吗?

1 个答案:

答案 0 :(得分:2)

在OWL中,我担心你无法完全代表这一点。您可以选择两个选项:要么在OWL中指定您想要的部分公理化,要么使用它,要么依赖其他形式。对于您的具体示例,基于规则的框架就足够了(请参阅AKSW's comment)。也可以将OWL与ad hoc程序扩展相结合,以处理OWL无法表达的内容。例如,如果您想表示物理系统的知识,其中数值根据算术公式相关,OWL无法帮助您(例如,加速度和外力之间的关系)。但是,您可以将OWL类层次结构与数据类型属性与物理公式的临时实现相结合,以涵盖这种情况。

单凭OWL可以涵盖知识表示方面的许多用例,但总的来说,认为本体将编码您遇到的任何问题所需的所有知识是一种谬误。必须有编程代码来处理知识表示形式主义无法处理的空白。

如果你有一个特定的人import * as React from 'react'; import { IAbstractFactoryProps } from "./IAbstractFactoryProps"; import { IAbstractFactoryState } from "./IAbstractFactoryState"; import styles from './Abstractfactory.module.scss'; import { escape } from '@microsoft/sp-lodash-subset'; import DaoFactory from "./DaoFactory"; import ICustomerDao from "./ICustomerDao"; import DataSources from "./DatasourcesEnum"; export default class Abstractfactory extends React.Component<IAbstractFactoryProps, {}> { //Private instance of customerDao, please note it returns ICustomerDao, an Interface, //not a concrete type private customerDao: ICustomerDao; constructor(props: IAbstractFactoryProps, state: IAbstractFactoryState) { super(props); this.setInitialState(); // We set the Dao depending on the selected data source this.setDaos(props.datasource); //Then we set the list of customers and note, we dont care if they come from Sharepoint //Rest API or anything else. this.state = { items: this.customerDao.listCustomers(), }; } public render(): React.ReactElement<IAbstractFactoryProps> { return ( <div className={ styles.abstractfactory }> <div className={ styles.container }> <div className={ styles.row }> <div className={ styles.column }> {this.state.items.map( i => (<div>i.id</div>))} </div> </div> </div> </div> ); } public setInitialState(): void { this.state = { items: [] }; } private setDaos(datasource: string): void { const data: DataSources = datasource === "Sharepoint" ? DataSources.SharepointList : DataSources.JsonData; this.customerDao = DaoFactory.getDAOFactory(data).getCustomerDAO(); //Now, its transparent for us a UI developers what datasource was selected //this.customerDao. } } ,你可以在OWL中说明这个人与谁是朋友,如下所示(Turtle语法):

ex:p