Java XML模式:在complexType中使用属性定义
我在使用SAX解析器进行XML验证时遇到了一些问题。下面是我为解决此问题而制作的一个简单XML模式:Java XML模式:在complexType中使用属性定义,java,xml,xsd,sax,xml-validation,Java,Xml,Xsd,Sax,Xml Validation,我在使用SAX解析器进行XML验证时遇到了一些问题。下面是我为解决此问题而制作的一个简单XML模式: 下面是一个非常简单的XML文件,我认为它对于我的模式应该是有效的: 这里有内容。。。 有趣的是,当我尝试解析此XML文件时,我收到以下验证错误: cvc-complex-type.3.2.2: Attribute 'title' is not allowed to appear in element 'content'. cvc复杂类型。3.2.2:属性“title”不允许出现在元素“c
下面是一个非常简单的XML文件,我认为它对于我的模式应该是有效的:
这里有内容。。。
有趣的是,当我尝试解析此XML文件时,我收到以下验证错误:
cvc-complex-type.3.2.2: Attribute 'title' is not allowed to appear in element 'content'.
cvc复杂类型。3.2.2:属性“title”不允许出现在元素“content”中。
但是,如果从XML文件中删除内容元素的title属性,仍然会收到验证错误:
cvc-complex-type.4: Attribute 'title' must appear on element 'content'.
cvc复杂类型。4:属性“title”必须出现在元素“content”上。
我不知道是什么问题。当然,这只是一个简单的例子。我想了解这种行为的原因。另外,找到一个解决方案也很好。我不确定在这种情况下,我的Java代码进行验证是否重要,如果有必要,我将稍后发布
任何帮助都将不胜感激。标题属性的全局声明将该属性放入目标命名空间
urn:test
。这也意味着您必须在模式和实例文档中限定对属性的引用。默认情况下,非限定属性没有名称空间
<xs:schema targetNamespace="urn:test"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns="urn:test" xmlns:test="urn:test" >
....
<xs:complexType name="ContentType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute ref="test:title" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:attribute name="title" type="xs:string" />
....
及
这里有内容。。。
整个过程非常微妙,当我尝试在ecplise中验证原始实例文档时,我会遇到两个非常令人困惑的错误:
title
属性不能出现在内容元素上。这是指该属性的非限定使用,以及title
元素必须出现在content元素上。这是指缺少的合格test:title
属性当然,错误消息可以使用更多的上下文信息。是的,我理解。谢谢你的回答。我想如果可能的话,我会尽量避免全局属性类型定义。使用完全限定名引用这些定义在XML模式中不是问题,但我不希望在XML数据文件中使用带有命名空间描述符的属性名。
<root xmlns="urn:test" xmlns:test="urn:test" >
<content test:title="Title">
Content comes here...
</content>
</root>