爵士乐模型与 XML 基础解析
1. 爵士乐模型的关系解析与结构调整
在对模型进行进一步处理时,为了便于使用不同技术实现模型,我们需要通过解析一些“is_a”关系来“扁平化”模型。面向对象技术虽然适合捕捉超类和子类的深层层次结构,但使用关系技术或 XML 实现这样的数据结构可能会比较麻烦。XML Schema 支持数据类型之间的继承关系(仅单继承),但不支持文档节点之间的继承。
1.1 解析“is_a”关系的方法
- 将父资产特征复制到子资产类型 :将父资产的特征显式复制到子资产类型,然后移除父资产。例如,把资产类型“collaboration”的弧和属性复制到“jamSession”和“project”资产类型中,还能明确“jamSession”的基数约束,即一场即兴演奏最多产生一张专辑。对于“jazzMusician”资产,操作会更复杂,除了复制弧和属性,还需在每个弧的起点引入集群。
- 将子资产折叠到父资产 :当子资产之间差异不大时可采用此方法,能得到紧凑的模型。如“instrumentalist”、“jazzSinger”和“jazzComposer”,它们仅在“instrument”的基数上有差异。若能接受失去这种差异(可通过引入显式约束弥补),可将“instrument”移到父资产“jazzMusician”中,移除子资产,并将“instrument”的基数设为“*”。
1.2 指示子实例类型的方法
- 创建指定实例类型的属性 :创建一个名为“kind”的