我在使用 SAX 解析器进行 XML 验证时遇到了一些问题。这是我为呈现问题而制作的一个简单的 XML Schema:
<?xml version="1.0"?>
<xs:schema targetNamespace="urn:test"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns="urn:test">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="content" type="ContentType"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="ContentType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute ref="title" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:attribute name="title" type="xs:string" />
</xs:schema>
这是一个非常简单的 XML 文件,我认为它对于我的模式应该是有效的:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root xmlns="urn:test">
<content title="Title">
Content comes here...
</content>
</root>
有趣的是,当我尝试解析这个 XML 文件时,我收到以下验证错误:
cvc-complex-type.3.2.2:属性“标题”不允许出现在元素“内容”中。
但是,如果我从 XML 文件中删除content元素的title属性,我仍然会收到验证错误:
cvc-complex-type.4:属性“标题”必须出现在元素“内容”上。
我不知道问题是什么。当然,这只是提出问题的一个简单示例。我想了解这种行为的原因。此外,如果能找到解决方案也不错。我不确定我的 Java 代码在这种情况下是否重要,如果有必要我会在稍后发布。
任何帮助将不胜感激。