owl - 如何使用基数约束将类链接到 protege 中的实例?
问题描述
例如,来自 A 类的所有个体只能在一个位置 B 使用——一个实例。我想在(仅/确切的 1)[位置 B] 使用“A 类”。但似乎这种约束只能在类之间进行。如何在不创建实例“位置 B”的空类的情况下做到这一点?
谢谢。
解决方案
如果您想说类的所有实例A
都位于 instanceB
且仅位于B
,您可以使用以下方法(Turtle 语法):
:A a owl:Class;
rdfs:subClassOf [
a owl:Restriction;
owl:allValuesFrom [
a owl:Class;
owl:oneOf ( :B )
]
], [
a owl:Restriction;
owl:onProperty :location;
owl:hasValue :B
] .
但是请注意,被命名的事物B
可能有其他名称,所以如果您知道:
:x a :A;
:location :C, :D .
那么你可以得出结论C
和D
是名为 的事物的另外两个名称B
。如果您希望将其检测为错误或错误,您可以明确说明C
并D
命名不同的东西B
:
:B owl:differentFrom :C, :D .
或者您可以使用 SHACL 之类的约束语言,或者您可以依赖唯一名称假设 (UNA) 进行推理过程(但是,标准 OWL 不会生成 UNA,因此您不能期望外部数据符合此假设)。
还要注意,如果您想描述对数据的约束,例如当某个实体已知是 的实例时,A
那么在数据中必须有它所在的语句B
,您需要使用像 SHACL 这样的约束语言(描述应该如何塑造数据),而不是像 OWL 这样的知识表示语言(描述世界是怎样的)。
推荐阅读
- javascript - 如何根据最后一个单元格/列的值过滤表格的内容?
- eclipse - 如何在视图中添加向导快捷方式?
- html - 如何从 html 模板访问数据到 quasar vue.js 组件
- javascript - 将安全标志添加到网站 cookie 有什么缺点吗?
- html - 如何根据包含的时间属性将子标题添加到 div?
- node-red - 代码:16 消息:'mqtt:服务器:授权令牌已过期。'
- python-3.x - 通过 Django M2M 字段查询
- typescript - 如何使用接口在打字稿中编写此函数?
- c++ - 将 libprotobuf.a 库的路径从 /lib64/ 更改为 /usr/local/lib
- sql-server - 如何重命名 RDS SQL Server Web 版的数据库名称(不是 RDS 实例名称,而是 RDS 实例内的数据库之一)?