gpt4 book ai didi

java - XML 架构 : using attribute definition in complexType

转载 作者:行者123 更新时间:2023-11-30 04:17:51 25 4
gpt4 key购买 nike

我在使用 SAX 解析器进行 XML 验证时遇到一些问题。这是我为解决该问题而制作的一个简单的 XML 架构:

<?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: Attribute 'title' is not allowed to appear in element 'content'.

但是,如果我从 XML 文件中删除 content 元素的 title 属性,我仍然会收到验证错误:

cvc-complex-type.4: Attribute 'title' must appear on element 'content'.

我不知道问题是什么。当然,这只是一个简单的例子来说明问题。我想了解这种行为的原因。另外,如果能找到解决办法就好了。我不确定我的 Java 代码进行验证在这种情况下是否重要,如果有必要我会稍后发布。

任何帮助将不胜感激。

最佳答案

title 属性的全局声明将该属性放入目标命名空间 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" />

<root xmlns="urn:test" xmlns:test="urn:test" >
<content test:title="Title">
Content comes here...
</content>
</root>

这整件事非常微妙,当我尝试在 ecplise 中验证原始实例文档时,我收到两个非常令人困惑的错误:

  1. title 属性不能出现在内容元素上。这是指对属性的不合格使用,并且
  2. title 元素必须出现在内容元素上。这是指缺少合格的 test:title 属性。

当然,错误消息可以使用更多的上下文信息。

关于java - XML 架构 : using attribute definition in complexType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17909741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com