使用xsd

时间:2018-01-09 06:03:39

标签: xml xsd-validation xsd-1.1

我需要使用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,它将强制执行验证,例如,如果Column元素具有Name =“MyData”和DataType =“varbinary”,那么它必须具有另一个名为Keys的属性,其中至少有一个值为Key =“Name” 否则没有该列的属性。

使用xsd可以吗?

我可以对属性How to make type depend on attribute value using Conditional Type Assignment

进行子验证

1 个答案:

答案 0 :(得分:0)

使用断言而不是条件类型分配可能更容易,我不认为从规则描述中判断很容易;但不管怎样,它当然是可能的。

例如

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