1

是否可以基于另一个元素的值来扩展 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元素,但日期不能。

DateField可以有Format,但Text不能。

如果可能的话,我想从一个通用类型扩展文本和日期字段。

注意:我假设以上在 XSD 1.0 中是不可能的

4

1 回答 1

3

不,一个元素的类型不能依赖于 XSD 1.0 或 XSD 1.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>
    
  2. Type从元素更改为属性并使用 XSD 1.1 的Conditional Type Assignment。有关示例,请参阅如何使用条件类型分配使类型依赖于属性值。(仅限 XSD 1.1)

  3. 通过 表达您的约束xs:assertion。(仅限 XSD 1.1)

备选方案#1 是首选,并且可以在 XSD 1.0 或 XSD 1.1 中轻松实现。它还可以容纳来自通用基本类型的扩展。

于 2016-07-26T17:47:46.320 回答