如何在 Xerces C++ 3.x (CodeSynthesis XSD) 中使用断言?

How do I use assertions in with Xerces C++ 3.x (CodeSynthesis XSD)?

我刚刚通读了关于 XSD 1.1 断言的教程:

http://www.ibm.com/developerworks/library/x-xml11pt2/

我复制了其中一个示例并创建了这个 xsd 文件:

<?xml version="1.1"?>                                                               
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">                             
<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>                                                                    

</xs:schema>                                                                     

我正在尝试使用 CodeSynthesis XSD XML Schema to C++ compiler 4.0.0 将其解析为代码生成 hxx 文件,使用以下命令:

/path/to/binary cxx-tree /path/to/file.xsd

但我收到以下错误:

/path/to/file.xsd:7:41: error: invalid element 'assert' in complex type definition

将 xml 版本更改为 1.0 时出现相同的错误。据我了解,xml 版本在这种情况下应该无关紧要,但我可能错了。

什么会导致此错误消息,我该如何解决?

您的 XSD 正确使用了断言。 (您可能希望在 XML 声明中使用 version="1.0",因为这是 XML 版本,而不是 XSD 版本,但这不是错误的来源。)

您的 XSD 处理器不支持 XSD 1.1,如果它拒绝您的 XSD。

更新:的确,根据CodeSynthesis's website,CodeSynthesis XSD 4.0.0基于Xerces-C++,不支持XSD 1.1。 CodeSynthesis 确实应该在他们的产品页面上明确说明这一点。