Определение схемы, позволяющей использовать атрибуты из смешанных пространств имен.

Я изо всех сил пытаюсь разработать схему, которая допускает атрибуты из смешанных пространств имен.

Вот xxx_schema2.xsd:

<?xml version="1.0" encoding="UTF-8"?>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  elementFormDefault="qualified"
  attributeFormDefault="qualified"  
  targetNamespace="http://www.mrbouffant.com/schema2"
  xmlns:xxx="http://www.mrbouffant.com/schema2"> 

  <xs:attributeGroup name="schema2AttributeGroup">
    <xs:attribute name="schema2Attribute1 " type="xs:string"/>
    <xs:attribute name="schema2Attribute2 " type="xs:string"/>
  </xs:attributeGroup>

</xs:schema>

Вот xxx_schema1.xsd, который импортирует xxx_schema2:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
elementFormDefault="qualified"
xmlns:xxx="http://www.mrbouffant.com/schema2">

  <xs:import namespace="http://www.mrbouffant.com/schema2" schemaLocation="xxx_schema2.xsd"/>

  <!-- ROOT ELEMENT -->
  <xs:element name="rootElement" type="rootElementType" />

  <!-- COMPLEX TYPES -->
  <xs:complexType name="rootElementType">
    <xs:simpleContent>
        <xs:extension base="xs:string">
            <xs:attributeGroup ref="xxx:schema2AttributeGroup"/>  
            <xs:attribute name="schema1Attribute1" type="xs:string"/>
        </xs:extension>
     </xs:simpleContent>
  </xs:complexType>
</xs:schema>

Вот XML-документ, который я хотел бы проверить на соответствие xxx_schema1.xsd:

<?xml version="1.0" encoding="UTF-8"?>
  <rootElement xmlns:xxx='http://www.mrbouffant.com/schema2/' 
schema1Attribute1="foo"
xxx:schema2Attribute1="bar"
xxx:schema2Attribute2="far" />

Когда синтаксический анализатор Saxon-EE пытается проверить документ XML на соответствие схеме, он выдает следующие ошибки:

Engine name: Saxon-EE 9.3.0.5
Severity: error
Description: Attribute @xxx:schema2Attribute1 is not allowed on element <rootElement>
(it would be allowed in namespace http://www.mrbouffant.com/schema2)

А ТАКЖЕ

Engine name: Saxon-EE 9.3.0.5
Severity: error
Description: Attribute @xxx:schema2Attribute2 is not allowed on element <rootElement>
(it would be allowed in namespace http://www.mrbouffant.com/schema2)

Пожалуйста, не могли бы вы помочь мне понять, что я сделал неправильно в своих определениях схемы или XML-документе, которые препятствуют успешной проверке? Спасибо.


person mrbouffant    schedule 13.07.2011    source источник
comment
Да, это возможно. Не понятно, о чем вы спрашиваете. Ты это пробовал? если это не сработало, что случилось?   -  person skaffman    schedule 13.07.2011
comment
Мне говорят, что атрибут @xxx:schema2Attribute1 не разрешен для элемента ‹rootElement› (он будет разрешен в пространстве имен ‹пространство имен для схемы 2›). С точки зрения того, что я спрашиваю.. Я хотел бы знать, как можно обычно структурированные схема2, схема1 и XML-документ, чтобы правильно проверить это. Спасибо!   -  person mrbouffant    schedule 13.07.2011
comment
Было бы полезно, если бы вы показали нам фактические фрагменты схемы, о которых вы говорите, а также ошибку полностью, а не описывали их на английском языке.   -  person skaffman    schedule 13.07.2011
comment
Я обновил исходный вопрос двумя документами схемы и одним XML-документом. Ошибки, предоставленные синтаксическим анализатором, также включены. Спасибо.   -  person mrbouffant    schedule 13.07.2011


Ответы (1)


Объявление пространства имен для http://www.mrbouffant.com/schema2 в вашем экземпляре XML имеет завершающую косую черту и не соответствует объявленному пространству имен вашей схемы.

Удалите завершающую косую черту, и она отлично подтвердится:

<?xml version="1.0" encoding="UTF-8"?>
  <rootElement xmlns:xxx='http://www.mrbouffant.com/schema2' 
schema1Attribute1="foo"
xxx:schema2Attribute1="bar"
xxx:schema2Attribute2="far" />
person Mads Hansen    schedule 13.07.2011