#xml #xsd #altova #xmlspy
Вопрос:
У меня есть элемент «АЗБУКА». Для этого элемента есть 3 дочерних элемента. a,b и c, и они имеют тип integer. а максимальное вхождение элемента c равно бесконечности. если значение элемента » a «равно 1, а» b «равно 2, то вхождение» c » должно быть 3. Могу ли я динамически установить максимальное вхождение элемента c? или на основе значения элементов » a » и «b», например:Обратитесь к изображениям, Обратитесь к скриншоту кода , Обратитесь к скриншоту сообщения об ошибке , Обратитесь к скриншоту значения
Комментарии:
1. В XSD 1.1 это можно проверить с помощью утверждения. Используете ли вы XSD 1.0 или 1.1?
Ответ №1:
Схема XSD 1.1 с xs:assert
:
<xs:element name="ABC">
<xs:complexType>
<xs:sequence>
<xs:element name="a" type="xs:integer"/>
<xs:element name="b" type="xs:integer"/>
<xs:element name="c" type="xs:string" maxOccurs="unbounded"/>
</xs:sequence>
<xs:assert id="restrict-occurence" test="count(c) = a b"/>
</xs:complexType>
</xs:element>
Таким образом, образец, подобный
<?xml version="1.0" encoding="UTF-8"?>
<ABC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="assert-example1.xsd">
<a>1</a>
<b>2</b>
<c>foo</c>
<c>bar</c>
<c>baz</c>
</ABC>
считается действительным, пока
<?xml version="1.0" encoding="UTF-8"?>
<ABC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="assert-example1.xsd">
<a>1</a>
<b>2</b>
<c>foo</c>
</ABC>
вызывает ошибку проверки об ошибке утверждения: Assertion evaluation ('count(c) = a b') for element 'ABC' on schema type '#AnonType_ABC' did not succeed.
.
Протестировано с помощью Xerces в кислороде, у меня здесь нет XMLSpy для тестирования.
Убедитесь, что вы используете версию, которая поддерживает/включила поддержку XSD schema 1.1.
Комментарии:
1. Спасибо вам за ваш ответ. Но это не работает
2. @ANUJIVARGHESE, у меня нет XML-шпиона, но я тестировал в oXygen с поддержкой Xerces, Saxon и XSD 1.1, и утверждение образца, похоже, сделало то, чего, как я понял, вы хотите достичь, я добавлю образцы в ответ. Объясните более подробно, произошла ли у вас ошибка, какая именно или что именно происходит.
3. Пожалуйста, обратитесь к прилагаемым скриншотам. Это не работает в altova xmlspy
4. @ANUJIVARGHESE, хотя скриншоты могут помочь, пожалуйста, также поделитесь минимальными, но полными образцами XML и XSD в виде фрагментов кода. Я предполагаю, что это может быть проблемой с пространством имен, но это невозможно определить, не увидев минимальные, но полные образцы кода. Можете ли вы попробовать, не дает ли сбой простой пример, основанный на вашем первоначальном вопросе и использованный в моем ответе, также в Altova? В этом примере не используются пространства имен.
5. @ANUJIVARGHESE, в качестве альтернативы, конечно, спросите службу поддержки Altova, могут ли они помочь вам с этой проблемой.