嘿,我试图为不同的命名空间打开我的XML模式,这似乎有效,但现在所有默认的命名空间元素都是无效的。
提前谢谢你。我正在尝试实现与Spring中相同的架构扩展机制(i.E。:spring-beans.2.5.xsd),它们也为bean
打开了##other
定义,这是有效的!
我添加了一个example of these three files,以便轻松访问zip存档,并将其上传到one-click-hoster rapidshare。
我的错是什么?
示例-list.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.example.org/schema/list"
xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/schema/list">
<xs:import namespace="http://www.w3.org/XML/1998/namespace" />
<xs:complexType name="ExampleListModelType">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="ExampleListGroup" />
</xs:choice>
</xs:complexType>
<xs:group name="ExampleListGroup">
<xs:choice>
<xs:element name="foo" type="xs:string" />
<xs:element name="bar" type="xs:string" />
<xs:element name="baz" type="xs:string" />
<xs:any namespace="##other" processContents="strict" />
</xs:choice>
</xs:group>
<xs:element name="action-list" type="ExampleListModelType" />
</xs:schema>
自定义-示例-list.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.example.org/schema/custom" elementFormDefault="qualified"
targetNamespace="http://www.example.org/schema/custom">
<xs:element name="eek" type="xs:string" />
</xs:schema>
示例-list.xml
<?xml version="1.0" encoding="UTF-8"?>
<action-list xmlns="http://www.example.org/schema/list"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:custom="http://www.example.org/schema/custom"
xsi:schemaLocation="
http://www.example.org/schema/list example-list.xsd
http://www.example.org/schema/custom custom-example-list.xsd">
<custom:eek></custom:eek>
<bar></bar>
</action-list>
错误
Invalid content was found starting with element 'bar'. One of '{foo, bar, baz, WC[##other:"http://www.example.org/schema/list"]}' is expected
答案 0 :(得分:3)
将elementFormDefault="qualified"
作为属性添加到<xs:schema>
中的example-list.xsd
标记,并且全部验证。我仍然对为什么需要它感到困惑。
答案 1 :(得分:0)
问题出现在 custom-example-list.xsd 中。您将元素“eek”定义为无命名空间。
将该架构中的xmlns:balvi="http://www.example.org/schema/custom"
更改为xmlns="http://www.example.org/schema/custom"
。
编辑:好的,所以如果你修复了这个问题,那么它就变得棘手了。我唯一能想到的是因为你指定了##other
,所以只有来自 outside 目标命名空间的元素必须出现在那里。但是,您可以选择使用目标命名空间中的元素。我在规范中看不到任何消除这种情况歧义的内容。
也许您可能希望将该选项更改为简单的序列,然后查看它是否有效。如果是这样,你知道什么是错的。如果它仍然中断,那么您的架构可能会失败。