扩展xsd for xml,具有多个名称空间

时间:2010-02-12 12:12:17

标签: spring xsd

嘿,我试图为不同的命名空间打开我的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

2 个答案:

答案 0 :(得分:3)

哇,这很难。已经很长一段时间了,因为我不得不继续对xsd进行随机更改并验证发生了什么。 :)

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 目标命名空间的元素必须出现在那里。但是,您可以选择使用目标命名空间中的元素。我在规范中看不到任何消除这种情况歧义的内容。

也许您可能希望将该选项更改为简单的序列,然后查看它是否有效。如果是这样,你知道什么是错的。如果它仍然中断,那么您的架构可能会失败。