13

我正在尝试在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>

我知道断言/断言是 XML Schema 1.1 的一部分,但不是 1.0。但是我读过的所有内容都表明两者的命名空间是相同的:http ://www.w3.org/2001/XMLSchema

一个小问题是我用来编写架构(Microsoft Visual Studio)的程序无法识别“断言”元素,说“命名空间(...)中的元素complexType具有无效的子元素“断言”。

主要问题是,当我实际尝试使用 xmllint 针对此架构验证 XML 时,它会抛出一个错误说

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

4

1 回答 1

21

要处理 XSD 1.1 模式,您需要 XSD 1.1 模式处理器。微软没有提供(他们似乎已经放弃了实现新的 W3C XML 规范)。据我所知,.NET 平台上唯一可用的 XSD 1.1 处理器是 Saxonica 的。

于 2013-03-22T19:47:34.950 回答