根据元素值扩展XSD类型?

时间:2016-07-26 17:03:12

标签: xml xsd xsd-1.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元素,但日期不能。

日期Field可以有Format,但Text不能。{/ p>

如果可能,我想从常用类型扩展Text和Date字段。

注意:我假设在XSD 1.0中无法实现上述目标

1 个答案:

答案 0 :(得分: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&#39; Conditional Type Assignment 。有关示例,请参阅How to make type depend on attribute value using Conditional Type Assignment。 (仅限XSD 1.1)

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

  4. 备选方案#1是首选,可以在XSD 1.0或XSD 1.1中轻松实现。它还可以适应普通基类型的扩展。