Схема XML 1.1 не распознает assert или assertion

Я пытаюсь использовать следующее в XSD

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" >
<xs:element name="dimension">
  <xs:complexType>
    <xs:attribute name="height" type="xs:int"/>
    <xs:attribute name="width" type="xs:int"/>
    <xs:assert test="@height = @width"/>
  </xs:complexType>
</xs:element>

Я знаю, что assert / assertion являются частью XML Schema 1.1, но не 1.0. Однако все, что я прочитал, указывает на то, что пространство имен одинаково для обоих: http://www.w3.org/2001/XMLSchema

Незначительная проблема заключается в том, что программа, которую я использую для написания схемы (Microsoft Visual Studio), не распознает элемент assert, говоря, что элемент complexType в пространстве имен (...) недействителен. дочерний элемент assert.

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

" element assert: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}complexType': The content is not valid. Expected is (annotation?, (simpleContent | complexContent | ((group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?))))

Разве 1.1 просто не распознается xmllint / visual studio, несмотря на то, что он указывает на пространства имен 1.1?


person user2197116    schedule 22.03.2013    source источник


Ответы (1)


Для обработки схемы XSD 1.1 вам понадобится процессор схемы XSD 1.1. Microsoft не предоставляет его (похоже, они отказались от внедрения новых спецификаций W3C XML). Насколько мне известно, единственный процессор XSD 1.1, доступный на платформе .NET, - это Saxonica.

person Michael Kay    schedule 22.03.2013
comment
Спасибо! Я новичок в схеме xml, но мог подумать, что процессор просто извлечет последнее определение из пространства имен, на которое вы указываете. Существуют ли для linux редакторы, совместимые с 1.1 XSD? - person user2197116; 25.03.2013
comment
Нет, вы не можете ожидать, что процессор, разработанный в 1994 году, будет реализовывать спецификацию, опубликованную в 2013 году. OXygen - это редактор, работающий в Linux и поддерживающий XSD 1.1. - person Michael Kay; 26.03.2013
comment
Oxygen не поддерживает 1.1, он выдает ошибку при утверждении и утверждении. Я использую eclipsexygen на ubuntu 16 linux, поэтому я также сталкиваюсь с той же проблемой. - person prem30488; 01.10.2018
comment
oXygen поддерживает XSD 1.1, см., например, xygenxml.com/doc/versions/20.1/ug-editor/topics/ - person Michael Kay; 01.10.2018