问题:我想建模:
让我们假设属性'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”上找到了一些东西(即,定义一个类然后强制它作为一个角色处理),但我不确定我是否理解它是如何工作的,或者它是否会对我想要建模的东西很有用。
有任何帮助吗?
答案 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