Ошибка уникальной атрибуции частиц

Цель. У меня есть стандартный XSD под названием Schema1.xsd. Я хочу расширить complexType ("tElementWithIDAndName") Schema1.xsd в complexType ("TVDSection") Schema2.xsd.

Когда я пытаюсь проверить Schema2.xsd в редакторе Altova XMLSpy / oXygen xml, я получаю следующую ошибку:

Ошибка: [Xerces] cos-nonambig: "http://www.mySchema.com/Generic/1 ": element1 и WC [## other:" http://www.mybasic.com/1 "," "] (или элементы из их группы замены) нарушают" Уникальную атрибуцию частиц ". Во время проверки по этой схеме для этих двух частиц будет создана двусмысленность.

Schema1.xsd:

            <?xml version="1.0" encoding="UTF-8"?>
            <xs:schema xmlns="http://www.mybasic.com/1" 
                       xmlns:xs="http://www.w3.org/2001/XMLSchema" 
                       xmlns:xml="http://www.w3.org/XML/1998/namespace"  
                       targetNamespace="http://www.mybasic.com/1" 
                       elementFormDefault="qualified" 
                       version="0.1">

                <xs:complexType name="tElementWithIDAndName">
                    <xs:sequence>
                          <xs:element name="additionalName" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
                          <xs:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="unbounded"/>
                    </xs:sequence>
                    <xs:attribute name="id" type="xs:ID" use="required"/>
                    <xs:attribute name="name" type="xs:string" use="required"/>
              </xs:complexType>
            </xs:schema>    

Schema2.xsd:

            <?xml version="1.0" encoding="UTF-8"?>
            <xs:schema xmlns="http://www.mySchema.com/Generic/1" 
                       xmlns:xs="http://www.w3.org/2001/XMLSchema"
                       xmlns:myBasic="http://www.mybasic.com/1"
                       targetNamespace="http://www.mySchema.com/Generic/1"
                       elementFormDefault="qualified" version="0.1">

                <xs:import namespace="http://www.mybasic.com/1" schemaLocation="schema.xsd"/>

                <xs:element name="Element1" type="TVDSection"/>
                <xs:complexType name="TVDSection">
                    <xs:complexContent>
                        <xs:extension base="myBasic:tElementWithIDAndName">
                            <xs:sequence>
                                <xs:element name="element1" type="xs:string" minOccurs="0" maxOccurs="unbounded">
                                </xs:element>
                            </xs:sequence>
                        </xs:extension>
                    </xs:complexContent>
                </xs:complexType>
            </xs:schema>

Я не знаю, где и как это нарушает уникальную атрибуцию частиц. Пожалуйста, помогите мне решить вышеуказанную проблему.


person VinayCH    schedule 06.09.2017    source источник


Ответы (1)


Вашу модель содержимого можно перефразировать как «любое количество элементов с именем p: additionalName, за которым следует любое количество элементов, при условии, что они не находятся в пространстве имен 'p', за которым следует любое количество элементов с именем q: element1,». Теперь, если встречается элемент aq: element1, валидатор не знает, помещать ли его во вторую группу (любое количество элементов, которые не находятся в пространстве имен 'p') или в третью группу (все, что называется q: element1). . Отсюда двусмысленность.

В XSD 1.1 спецификация была изменена так, что в этой ситуации, когда есть определенная частица и частица с подстановочными знаками, которые совпадают, конкретная частица всегда выбирается в предпочтении. Итак, одно из решений - просто перейти на XSD 1.1. Если вы хотите остаться с XSD 1.0, вам нужно изменить подстановочный знак xs: any, чтобы он налагал больше ограничений на пространство имен разрешенных элементов.

person Michael Kay    schedule 06.09.2017
comment
К сожалению, мне не удалось изменить schema1.xsd, так как это стандартный xsd для нашего проекта, созданный другой командой. Также мой существующий инструмент не поддерживает XSD 1.1. Любая идея выйти из этой проблемы. - person VinayCH; 06.09.2017
comment
Почему вы хотите расширить сложный тип в schema1.xsd? Он уже позволяет использовать подстановочный знак после элемента additionalName, зачем вам вообще его менять? - person Michael Kay; 06.09.2017
comment
Что касается моего существующего инструмента, который не поддерживает XSD 1.1, ответ, конечно же, заключается в том, чтобы переключиться на поставщика инструментов, который активно разрабатывает свой продукт и следит за последними стандартами. - person Michael Kay; 07.09.2017
comment
Большое спасибо за информацию Майкл Кей. - person VinayCH; 08.09.2017