如何使用XSD和Xerces-C ++阻止未知属性?

时间:2014-08-27 18:56:07

标签: xml xsd xerces-c

我有一个XML模式,我正在验证使用Xerces-C ++ 3.1.1。我的XML文档正常验证。我可以通过重命名元素或必需属性来导致验证失败,因此我非常确定Xerces正在使用模式做正确的事情。

但是,如果我将未知属性添加到任意元素,文档仍会验证。如果存在任何未定义的属性,我希望验证失败,但XML Schema规范和Xerces文档没有明确说明如何执行此操作。

这是我的xerces解析器设置:

parser.setErrorHandler(&errorHandler);
parser.loadGrammar(schemaPath.c_str(), Grammar::SchemaGrammarType);
parser.setDoNamespaces(true);
parser.setDoSchema(true);
parser.setValidationConstraintFatal(true);
parser.setValidationSchemaFullChecking(true);

架构和文档不使用命名空间,我没有使用属性通配符。

这是一个展示问题的玩具架构和文件;这与实际架构中的顶级元素相同。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qual\
ified">
  <xs:element name="Document">
    <xs:complexType>
      <xs:attribute name="version"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

尽管存在未知值属性,但本文档仍会针对此架构进行验证:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Document value="blar" version="22"/>

如果某个属性不在架构中,我希望验证失败,就像这种情况一样。

0 个答案:

没有答案