精炼元素的基础是什么?
What is the base of a refined element?
考虑逻辑片段:
Patient (Profile A)
identifier (sliced on system) 0..*
myclinicnbr (slice 1) 0..1
yourclinicnbr (slice 2) 0..*
然后:
Patient (Profile B, base is A)
identifier (sliced on system) 0..2
myclinicnbr (slice 1) (no diff)
yourclinicnbr (slice 2) 0..*
在 B 中,有效基数是:
- 标识符 0..2(显式)
- myclinicnbr 0..1(受限于A::myclinicnbr)
- yourclinicnbr 0..2(受限于B::identifier)
问题是:
- B 是否应该使用具有与 B::identifier 不兼容的基数的 B::yourclinicnbr 进行验证?
- 必须 B::yourclinicnbr 覆盖 A::yourclinicnbr 以使其符合 B::identifier,否则它可以不做任何声明吗?
- 对于 B 中的每个部分,正确的快照基数是多少?
我认为我们没有说过切片的基数必须是父级的真子集。每次引入新切片时,这样做都需要大量笨拙的数学运算——添加一个 minOccurs = 1 切片可以很容易地强制减少一堆其他 0..n 切片的最大值。期望实例必须满足基本元素和切片的约束,所以如果你有一个 0..3 元素和一堆 0..* 切片,你不能有一个包含超过重复 3 次,不管切片可能指示 0..* 的事实。所以实现行为并不混乱。但是,从文档的角度来看,它可能会造成混淆,并且在某些情况下可能会导致软件混淆。
我倾向于将切片基数是否为元素基数的结构数学子集留给配置文件设计者。在某些情况下,这会很容易并且值得。在其他情况下,这可能比努力证明的更痛苦。如果您认为我们需要在这方面更严格,欢迎提出有理由的更改提案。
考虑逻辑片段:
Patient (Profile A)
identifier (sliced on system) 0..*
myclinicnbr (slice 1) 0..1
yourclinicnbr (slice 2) 0..*
然后:
Patient (Profile B, base is A)
identifier (sliced on system) 0..2
myclinicnbr (slice 1) (no diff)
yourclinicnbr (slice 2) 0..*
在 B 中,有效基数是:
- 标识符 0..2(显式)
- myclinicnbr 0..1(受限于A::myclinicnbr)
- yourclinicnbr 0..2(受限于B::identifier)
问题是:
- B 是否应该使用具有与 B::identifier 不兼容的基数的 B::yourclinicnbr 进行验证?
- 必须 B::yourclinicnbr 覆盖 A::yourclinicnbr 以使其符合 B::identifier,否则它可以不做任何声明吗?
- 对于 B 中的每个部分,正确的快照基数是多少?
我认为我们没有说过切片的基数必须是父级的真子集。每次引入新切片时,这样做都需要大量笨拙的数学运算——添加一个 minOccurs = 1 切片可以很容易地强制减少一堆其他 0..n 切片的最大值。期望实例必须满足基本元素和切片的约束,所以如果你有一个 0..3 元素和一堆 0..* 切片,你不能有一个包含超过重复 3 次,不管切片可能指示 0..* 的事实。所以实现行为并不混乱。但是,从文档的角度来看,它可能会造成混淆,并且在某些情况下可能会导致软件混淆。
我倾向于将切片基数是否为元素基数的结构数学子集留给配置文件设计者。在某些情况下,这会很容易并且值得。在其他情况下,这可能比努力证明的更痛苦。如果您认为我们需要在这方面更严格,欢迎提出有理由的更改提案。