Условное принудительное применение атрибутов для атрибутов xml с использованием xsd

Мне нужно установить условное применение атрибутов xml с помощью xsd.

Например

<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, который будет обеспечивать проверку, например, если элемент столбца имеет имя = «MyData» и DataType = «varbinary», тогда он должен иметь другой атрибут с именем Keys с хотя бы одним значением Key = «Name», иначе нет атрибута для ту колонку.

Возможно ли это с помощью xsd?

Я могу выполнять дочерние проверки атрибутов Как сделать так, чтобы тип зависел от значения атрибута с помощью условного назначения типа


person Roshan    schedule 09.01.2018    source источник


Ответы (1)


Это может быть проще сделать, используя утверждения, а не условное присвоение типа, я не думаю, что легко судить из вашего описания правил; но в любом случае, это, безусловно, возможно.

Например

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