是否可以根据另一个元素的值扩展XSD 1.1中的元素?
例如:
<Field>
<Title>Text Field</Title>
<Type>Text</Type>
<Length>100</Length>
</Field>
<Field>
<Title>Date Field</Title>
<Type>Date</Type>
<Format>mm/dd/yyyy</Format>
<Field>
两个Field元素共享共同的Title和Type元素。
对于文本字段,它可以有Length
元素,但日期不能。
日期Field
可以有Format
,但Text
不能。{/ p>
如果可能,我想从常用类型扩展Text和Date字段。
注意:我假设在XSD 1.0中无法实现上述目标
答案 0 :(得分:3)
不,元素的类型不能取决于XSD 1.0或XSD 1.1中其他元素的值。
重新设计您的XML。而不是具有通用Field
的通用Type
元素
子元素,包括每个元素名称中的类型:
<Text>
<Title>Text Field</Title>
<Length>100</Length>
</Text>
<Date>
<Title>Date Field</Title>
<Format>mm/dd/yyyy</Format>
</Date>
将Type
从元素更改为
属性并使用XSD 1.1&#39; Conditional Type Assignment 。有关示例,请参阅How to make type depend on attribute value using Conditional Type Assignment。 (仅限XSD 1.1)
通过xs:assertion
表达您的约束。
(仅限XSD 1.1)
备选方案#1是首选,可以在XSD 1.0或XSD 1.1中轻松实现。它还可以适应普通基类型的扩展。