rdf - 为类的每个成员创建新的实例值
问题描述
这是我想做但不能做的事情:
我正在实例化属于各种类(模型)的设备。假设是汽车。实例化的汽车应该根据模型继承“默认”属性,但应该有自己的属性。类层次结构示例:
Car
Tesla
Honda
Property
“属性”将是一<key, value>
对,例如<"top_speed", "100">
, <"seats", 5>
。我可以为特斯拉定义默认属性,创建实例:
teslaPropertySpeed = <"top_speed", 100>
teslaPropertySeats = <"seats", 5>
然后让所有特斯拉都拥有这个属性:
Tesla SubClassOf ((hasProperty value teslaPropertySpeed) and (hasProperty value teslaPropertySeats))
...但是,如果我购买了特斯拉,我可能会“破解”它以使其更快或更慢,或者移除座椅。因为我说所有特斯拉都有这个属性,它就不再是特斯拉了。
更好的方法是说所有特斯拉都有自己的速度和座椅属性,我想将其设置为默认的、可修改的值。
简而言之,我想为每个实例化的特斯拉创建新的属性。我可以声明式地这样做吗?至于默认值,我可以在 Tesla 的子类(例如 FactoryTesla)中定义默认值,这样修改后的 Tesla 就会从该子类中剔除,但会保留上层的“Tesla”类。
解决方案
你将无法做你打算做的事情。那就是能够推断出具有类型的汽车Tesla
不再具有类型Tesla
,因为它已被修改。正如 AKSW 指出的那样,由于推理是单调的,这不会发生。这大致意味着在添加更多公理之前已经推断出的任何内容在添加更多公理之后仍然会被推断出来。“松散”推论的唯一方法是修改或删除本体中的现有公理。
您将能够做的是定义您的Tesla
类的属性并允许推理器推断个人属于 type Tesla
。以下本体将做到这一点。
DataProperty: hasSeats
Range: xsd:integer
DataProperty: hasTopSpeed
Range: xsd:integer
Class: Car
EquivalentTo:
(hasSeats exactly 1 xsd:integer)
and (hasTopSpeed exactly 1 xsd:integer)
Class: Tesla
EquivalentTo:
(hasSeats value 5)
and (hasTopSpeed value 100)
SubClassOf:
Car
Individual: aTesla
Facts:
hasSeats 5,
hasTopSpeed 100
Individual: notATesla
Facts:
hasSeats 2,
hasTopSpeed 80
这将推断出aTesla
个体是类型Tesla
,而不会为个体做出这样的推断notATesla
。但是,如果您创建如下个人modifiedTesla
,这将导致推理器给出不一致。
Individual: modifiedTesla
Type: Tesla
Facts: hasTopSpeed 200
不一致的原因(对于上面的本体)是因为modifiedTesla
通过hasTopSpeed
属性关联了两次:一次 forhasTopSpeed 100
和一次 for hasTopSpeed 200
。这是因为hasTopSpeed 200
不会覆盖类中的属性Tesla
。
从您的问题来看,您似乎是从面向对象的角度来解决这个问题的。有一些相似之处,但在大多数情况下,面向对象和本体是天壤之别。我在这里写了一些在这方面绊倒人们的陷阱。
推荐阅读
- python - divmod 是 python 内置函数吗?
- r - 使用 R 对具有不同行数的多个矩阵进行学生 t 检验(配对)
- javascript - 为什么当我更改 componentDidMount 中的状态时我的组件没有重新渲染?
- ios - 这是IOS模拟器12.1和12.4的空列表。我怎样才能将它们安装回来?
- python - 从 SQLAlchemy 元数据在 MSSQL 和 Oracle 上创建对象,名称的大小写不同
- python-3.x - e 到 pi 给出 1.0,我无法理解其背后的原因。在理解基础科学方面需要帮助
- esp8266 - esp8266 1Mbyte (512kb spiffs) 丢失文件
- python - 如何选择具有日期时间索引和位置的两组年份?
- macos-catalina - 在 mac catalina 上启用 opcache,php 7.4 与 homebrew 一起安装
- c# - 提取所有具有 CAD 文件的外部链接