XML Schema 1.1 not recognizing 'assert' or

2019-06-15 07:47发布

问题:

I am trying to use the following in an 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>

I know assert/assertion are part of XML Schema 1.1 but not 1.0. However everything I have read indicates the namespace is the same for both: http://www.w3.org/2001/XMLSchema

A minor problem is that the program I am using to write the Schema (Microsoft Visual Studio) does not recognize the 'assert' element, saying the 'the element complexType in namespace (...) has invalid child element 'assert'.

The main problem is that when I actually try to validate an XML against this schema, using xmllint, it throws up an error saying

" 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?))))

Is 1.1 simply not recognized by xmllint/visual studio, despite being pointed to the 1.1 namespaces?

回答1:

To process an XSD 1.1 schema you need an XSD 1.1 schema processor. Microsoft does not supply one (they seem to have given up implementing new W3C XML specifications). As far as I am aware the only XSD 1.1 processor available on the .NET platform is Saxonica's.