我需要使用 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)"/>