第 12 章 表述困境
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
设计是将形式和内容结合在一起的方法。设计和艺术一样,有多种定义,没有单一的定义。设计可以是艺术。设计可以是美学。设计如此简单,所以才如此复杂。
保罗-兰德
在开发语义数据模型时,经常会遇到这样的情况,即某一特定信息可以用不止一种合法的方式来表示 ,甚至在同一种表示语言中也是如此(例如,决定一个实体应该表示为类还是个体)。每种方式都有不同的优缺点,作为语义模型的创建者和用户,您都需要了解这些优缺点。作为创建者,您需要选择并实现最适合您的情况的方式;作为用户,这将有助于您在语义上等同的模型中进行选择,而这些模型并不具备完全相同的功能。
本章将介绍一些常见的表示难题,尤其是何时以及如何通过模糊化来表示模糊元素。
班级还是个人?
在第 2 章中我们看到,在某些情况下,你使用的建模语言迫使你决定一个实体是应该 建模为类还是个体(即没有实例的实体)。 我们还看到,必须进行这种选择的一个问题是,有几个实体既可以被合法地建模为类,也 可以被合法地建模为个体(例如,Eagle 和Data Scientist )。
第二个问题是,在大多数情况下,建模框架并不能像对待个体那样为类提供建模和表达的自由度。例如,在 OWL-DL 中,你不能把一个类定义为另一个类的实例,也不能定义类与其他实体之间的直接关系,而只能定义一些预定义的关系。因此,如果你想同时说John 是Data Scientist 的实例,而Data Scientist 是Occupation 的实例,你就不能这样说。
因此,我们面临的困境可以表述如下:"鉴于建模框架要求明确区分类和个体,而一个实体可以被合法地建模为两者,那么我们应该如何为该实体建模呢?
要解决这个难题,你需要考虑以下问题:
- 实体有(或可以有)哪些实例?
-
正如我们在第 2 章中所讨论的,在确定一个实体是否可以成为一个类时,唯一重要的标准就是是否有其他实体可以成为它的实例。 那么,你真的能为你的实体找到(令人信服的而不是人为的)实例吗?
- 您是否愿意在模型中描述这些实例,并为它们定义关系和属性?
-
即使你的实体有潜在的实例,也并不意味着它们对你的模型就一定重要。例如,假设您的模型是关于视频游戏的,而您想把游戏《刺客信条奥德赛》(Assassin's Creed Odyssey)纳入其中[207]。这个实体的一个可能实例可能是我上个月买的这个游戏的特定副本,其属性如
serial number,price, 或production date。你是真的想在你的模型中包含关于我的副本的这些信息,还是只想泛泛地谈论这个游戏,也许定义关于它的制作人、作者和游戏机的关系和属性? - 如果将实体建模为类,是否就无法轻松表达有关实体的事实?
-
例如,假设您想在 OWL-DL 中说明
Data Scientist这一职业的基本技能是Data Mining,其平均工资是 15 万美元。第一种方法是通过直接关系hasEssentialSkill将这两个实体联系起来,就像 ESCO 所做的那样,但这样就会把Data Scientist作为一个单独的实体而不是一个类来处理。如果要将其视为一个类,您或许可以定义一个公理,规定Data Scientist的所有实例都需要通过hasEssentialSkill关系与实体Data Mining建立联系,但这样做会产生一些后果:在封闭世界的环境中,您的推理者不会接受不具备这种技能的数据科学家,而在开放世界的环境中,推理者总是会推断他们具备这种技能。同样,要定义一个适用于类 ...