2012-02-28 52 views
0

我正在尝试使元素的内容以枚举属性为条件。每个属性的内容将完全不同。例如:XML模式:根据枚举属性值对内容进行条件化

<?xml version="1.0" encoding="utf-8"?> 
<foo type="bar"> 
    <bargress num="5"/> 
    <bargress num="8"/> 
</foo> 

<?xml version="1.0" encoding="utf-8"?> 
<foo type="kan"> 
    <kangress say="hi"/> 
    <kangress say="all"/> 
</foo> 

会验证,但

<?xml version="1.0" encoding="utf-8"?> 
<foo type="kan"> 
    <bargress num="5"/> 
    <bargress num="8"/> 
    <kangress say="hi"/> 
    <kangress say="all"/> 
</foo> 

不会。

这是可能的,如果是的话,我会怎么做呢?

+0

我看了int使得抽象ComplexType'Foo'然后有子类型'FooBar'和'FooKan'。但是,我想避免使用xsi:type。例如。 '' – Arion 2012-02-28 01:04:35

回答

1

您所描述的基本上是“条件类型分配”,它是XSD 1.1中的新功能之一(今天在Xerces和Saxon中可用)。

XSD 1.0中最接近的是将您的“type”属性重命名为xsi:type,并使其引用模式中定义的复杂类型的名称。

+0

如果Xerces和Saxon处理1.1,那对我来说已经足够了。 – Arion 2012-02-28 20:58:22