根据元素值扩展 XSD 类型?

Extend XSD Type based on element value?

是否可以根据另一个元素的值扩展 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 不能。

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

注意:我假设上述在 XSD 1.0

中是不可能的

不,元素的类型不能依赖于 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. For an example, see 。 (XSD 仅限 1.1)

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

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