我有一个课程,可以存储摄影EXIF所需的一些数据。需求中有多种选择:
我需要FocalLengthIn35mmFilm
或(FocalLength
和FocalPlaneXResolution
以及FocalPlaneYResolution
)。
它将对应于SQL语句:
create table Photo(
/* Whatever */
FocalLengthIn35mmFilm FLOAT null,
FocalLength FLOAT null,
FocalPlaneXResolution FLOAT null,
FocalPlaneYResolution FLOAT null,
constraint AtLeastOneFocal CHECK (
FocalLengthIn35mmFilm is not null OR (
FocalLength is not null AND
FocalPlaneXResolution is not null AND
FocalPlaneYResolution is not null
)
)
)
xsd架构类似于this answer
我会定义/绘制相应的UML架构,但我不知道如何建模这个“基数选项”。有什么想法吗?
答案 0 :(得分:1)
你只需要包含这样的约束:
注意:
!= Null
之类的东西来使它成为一个bool表达式。我只是复制了类似SQL的语法。答案 1 :(得分:1)
正如@Thomas Kilian所说, OCL是一种简洁的方式来形式化UML的这些约束,它将是:
context Photo inv :
(
self.FocalLengthIn35mmFilm->notEmpty()
or (
self.FocalLenght->notEmpty() and
self.FocalPlaneXResolution->notEmpty() and
self.FocalPlaneYResolution->notEmpty()
)
)