Проверка только части документа XML с использованием схемы? - PullRequest
3 голосов
/ 07 января 2010

Можно ли написать схему, позволяющую смешивать проверенный XML с просто правильно сформированным XML? В качестве примера можно привести приложение для передачи данных, в котором запросы состоят из набора метаданных (которые мы хотели бы проверить) и информации, специфичной для записи (которая проверяется отдельно от XML в бизнес-логике, поскольку запросы XML только один из нескольких способов получения запросов).

Пример:

<request>
    <campaign>CAMP00001</campaign>
    <username>user_bob</username>
    <token>one-time-token-goes-here</token>
    ... more meta-data ...
    <records>
        <record id="90209">
            <name>John Doe</name>
            <address>Park Lane 191</address>
            <postal>99999</postal>
        </record>

        <record id="90210">
            <name>Jane Doe</name>
            <address>Park Lane 192</address>
            <postal>88888</postal>
        </record>
    </records>
</request>

В настоящее время я проверяю вручную, проверяя наличие и действительность содержимого полей кампании, имени пользователя и токена. Если это возможно, я хотел бы сделать это с использованием схемы XML, чтобы стало легче сообщать разработчикам, какие метаданные им нужно предоставить и в каких форматах - для кампаний это невозможно, поскольку каждая кампания имеет свой собственный набор поля и правила, которые применяются к тем. Можно ли это сделать?

(одним из решений, о котором я подумал, является заполнение записи набором <data> элементов вместо именованных элементов, а затем очень слабое определение <data> в схеме ... но для этого потребуется изменить спецификации вокруг ) * +1010 *

Ответы [ 2 ]

7 голосов
/ 07 января 2010

Вы можете использовать любой тип в схеме.

Например

<xs:element name="foo">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="first" type="xs:string"/>
            <xs:element name="second" type="xs:string"/>
            <xs:any minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Это требует, чтобы каждый элемент foo имел первый и второй узлы, а затем разрешает любые другие элементы. Например:

<foo>
    <first>Hello</first>
    <second>World</second>
    <other>can be anything</other>
    <nodes/>
</foo>
0 голосов
/ 07 января 2010

Вы можете поместить проверенный и непроверенный материал в разные пространства имен и предоставить довольно широко открытую схему для непроверенного контента.

...