标记联盟的XML模式

时间:2017-06-04 16:03:03

标签: xml xsd discriminated-union

我有一个XML文档,其中包含一系列重复的地址,其实际内容取决于包含的枚举的值。我想这是一种“标记联盟”[或“歧视联盟”?]:

{
<AddressList>
    <Address>
        <AddressType type="addressEnum" fixed="CanadianAddress"/>
        <AddressValue>
            <Street type="textstring">123 Yonge Street</Street>
            <Province type="provinceEnum" value="Ontario"/>
            <PostalCode type="postalCodeType" value="M1N 2O3"/>
        </AddressValue>
    </Address>
    <Address>
        <AddressType type="addressEnum" fixed="USAddress"/>
        <AddressValue>
            <Street type="textstring">456 Front Street</Street>
            <State type="stateEnum" value="New York"/>
            <ZipCode type="zipCodeType" value="12345"/>
        </AddressValue>
    </Address>
</AddressList>
}

我不清楚如何表达XML架构[即XSD]用于上述XML。我是否需要一个空的'AddressType','CanadianAddressType'和'USAddressType'都会扩展?如果我有50个地址类型,我需要50个这样的扩展吗?

注意:如果不明显,USAddress的元素不能出现在CanadianAddress枚举之后。同样,CanadianAddress的元素不能出现在USAddress枚举之后。

1 个答案:

答案 0 :(得分:1)

可以使用XSD 1.1的alternative组件。然后,您将能够为DF1.merge(DF2, how='outer', right_on=<keys>...) 节点应用类型取决于<AddressValue>元素的fixed属性值,所以

AddressType