使用 xsd 对 xml 属性强制实施条件属性



我需要使用 xsd 对 xml 属性进行条件强制。

例如

<Database>
    <Table Name="[Summary].[Aggregates]">
        <Columns>
            <Column Name="MyData" DataType="varbinary" Keys="Name,AddressLine1,AddressLine2,PostalCode,EmailAddress,Phone"></Column>
            <Column Name="User"></Column>
        </Columns>
    </Table>
    <Table Name="[Summary1].[Aggregates]">
        <Columns>
            <Column Name="MyData" DataType="varbinary" Keys="Name,AddressLine1,AddressLine2,PostalCode,EmailAddress,Phone"></Column>
            <Column Name="User"></Column>
        </Columns>
    </Table>
<Database>

我需要创建 xsd 来强制执行验证,例如如果列元素具有 Name="MyData" 和 DataType="varbinary",那么它必须具有另一个名为 Keys 的属性,至少有一个值为 Key="Name"否则没有该列的属性。

使用 xsd 可以做到这一点吗?

我能够对属性进行子验证 如何使用条件类型赋值使类型依赖于属性值

使用断言而不是条件类型赋值可能更容易,我认为从您对规则的描述中判断并不容易; 但无论哪种方式,这当然是可能的。

例如

<xs:assert test="if (@Name='MyData' and @DataType='varbinary')
                 then tokenize(@Keys, ',') = 'Name'
                 else empty(@Keys)"/>

最新更新