Уникальное ограничение схемы XSD не работает для числовых значений?

Рассмотрим эту схему XSD, в результате чего появится следующий график

<?xml version="1.0" encoding="UTF-8"?>
<s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" 
    xmlns:target="http://www.url.com/validation" 
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
    elementFormDefault="qualified" attributeFormDefault="unqualified">

    <s:element name="myObjects" type="typeObjects">
        <s:unique name="uniqueObjectId">
            <s:selector xpath="myObject"/>
            <s:field xpath="id"/>
        </s:unique>
    </s:element>
    <s:complexType name="typeObjects">
        <s:sequence maxOccurs="unbounded">
            <s:element name="myObject">
                <s:complexType>
                    <s:complexContent>
                        <s:extension base="typeObject"/>
                    </s:complexContent>
                </s:complexType>
            </s:element>
        </s:sequence>
    </s:complexType>
    <s:complexType name="typeObject">
        <s:sequence>
            <s:element name="id" type="s:int"/>
        </s:sequence>
    </s:complexType>
</s:schema>

все еще проходит проверку

Обратите внимание на уникальное ограничение, установленное для элемента "id", набранное как s:int.

Следующий экземпляр XML по-прежнему проверяется, даже если дважды используется один и тот же <id>1</id>!

<?xml version="1.0" encoding="utf-8"?>
<myObjects 
    xmlns:target="http://www.url.ch/validation" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="unique.xsd">

    <myObject>
        <id>1</id>
    </myObject>

    <myObject>
        <id>1</id>
    </myObject>
</myObjects>

Я могу вызвать условие отказа, если изменю тип элемента на s:string.

Это не больше проверяет XML экземпляра, как ожидалось: не проходит проверку, как и ожидалось

Я попробовал проверку в oXygen XML и ALtova XML Spy с тем же результатом соответственно.

Очевидно, возникает вопрос, является ли это ошибкой или известным ограничением в уникальной реализации ограничения XSD?


person KarmaEDV    schedule 12.07.2017    source источник


Ответы (2)


Ваш xsd выглядит хорошо, и я подтвердил это кислородом. Я получил ожидаемую ошибку:

cvc-identity-constraint.4.1: Duplicate unique value [1] declared for identity 
constraint "uniqueObjectId" of element "myObjects".

Я вижу, что проверка работает нормально для SAXON-EE 9.6.0.7.

Non-unique value found for constraint uniqueObjectId: 1

и для других двигателей.

Попробуйте проверить свои сценарии проверки, кэширование и имена файлов.

person Filip Skurniak    schedule 12.07.2017
comment
это работало для вас в обоих направлениях, независимо от типа? целое или строка? - person KarmaEDV; 12.07.2017
comment
У меня нет настроенных сценариев проверки, кроме значений по умолчанию. это построенный XSD, чтобы показать точку. Я еще не пробовал использовать библиотеку SAXON в коде, это будет мой следующий шаг. - person KarmaEDV; 12.07.2017
comment
У меня нет проблем с проверкой на движке Xerces. - person Filip Skurniak; 12.07.2017
comment
Я использую oXygen 19.0 build 2017042020. Все еще подтверждаю описанное поведение на моей машине/конфигурации. - person KarmaEDV; 13.07.2017

Кажется, я понял, в чем проблема. При использовании механизма проверки Xerces в oXygen проверка проходит, если элемент имеет тип int. При использовании движка Saxon для разбора он работает в любом случае!

Поэтому почти уверен, что это ошибка в Xerces..

введите здесь описание изображения

person KarmaEDV    schedule 12.07.2017