схема XML и использование выбора как корень документа

Важно знать то, что доступно с Windows API. Я не думаю, что необходимо провернуть код с ним, но необходимо знать, как это работает. Платформа.NET содержит большую функциональность, но это не обеспечивает эквиваленты управляемого кода для всего Windows API. Иногда необходимо стать немного ближе к металлу, и знающий, что там и как он ведет себя, даст Вам лучшее понимание того, как использовать его.

15
задан mikey 28 October 2009 в 18:38
поделиться

3 ответа

Actually, XML schema does allow you to define alternative root elements in a single schema, although not by using the choice element. Instead, all you need to do is list each of the possible roots as direct children of your schema element.

For example, given the following XML schema:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="foo">
        ...
    </xs:element>
    <xs:element name="bar">
        ...
    </xs:element>
</xs:schema>

Either of the following documents would validate against it:

<foo>
    ...
</foo>

Or:

<bar>
    ...
</bar>
34
ответ дан 1 December 2019 в 01:38
поделиться

Это невозможно, но альтернатива не так уж и плоха. Просто объявите корневой узел, который набран как вариант, и пусть ваше приложение вернет узел "ответ" с дочерним элементом "успех" или "исключение". Если вы не можете изменить приложение, то вам не повезло, но с таким простым ответом, не могли бы вы создать две разные схемы, прочитать первую вершину Child, а затем применить соответствующую схему?

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
   <xs:element name="Response">
    <xs:complexType>
        <xs:choice>
            <xs:element name="Success"/>
            <xs:element name="Exception"/>
        </xs:choice>
    </xs:complexType> 
   </xs:element>
</xs:schema>
-1
ответ дан 1 December 2019 в 01:38
поделиться

Я наткнулся на этот пост и подумал, что стоит упомянуть то, что я считаю из мира веб-служб Spring (те, которые в первую очередь придают значение контракту данных).

Один из хороших способов решения этой проблемы корневого элемента - это напрямую определить несколько корневых элементов в элементе схемы, как упомянул Фил Бут.

Однако, когда дело доходит до передового опыта и инфраструктуры веб-сервисов, в которых приоритет отдается данным, важно разработать схему защиты от ошибок. Когда кто-то определяет такую ​​схему -

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">   
<xs:element name="foo">   
    ...   
</xs:element>   
<xs:element name="bar">   
    ...   
</xs:element>   

фреймворк веб-службы, такой как Spring-WS, который полагается на эту так называемую схему контракта данных для создания веб-службы, может быть не в состоянии понять, является ли или корневой элемент запроса к службе.

Пожалуйста, обратитесь к этой ссылке - Контракт данных

В таких случаях я нашел подход, предложенный «Джоном из CashCommons» или Стивеном Рашингом, полезным.

1
ответ дан 1 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: