直到现在,我一直通过定义一个具有“名称”和“值”属性的占位符元素来处理扩展,如下例所示
<root>
<typed-content>
...
</typed-content>
<extension name="var1" value="val1"/>
<extension name="var2" value="val2"/>
....
</root>
我现在打算改用 xsd:any。如果您能帮助我选择最佳方法,我将不胜感激
- 如果我指定 processContents="strict",xsd:any 比我以前的方法有什么附加值
- EAI/ESB 工具/库能否针对我返回的任意元素执行 XPATH 表达式
- 我看到各种绑定(bind)工具在生成绑定(bind)代码时分别处理这个问题。如果我包含一个 namespace="http://mynamespace" 并在代码生成期间提供“http://mynamespace”的模式,这是否是相同的情况?
- 这是否符合 WS-I 标准?
- 有没有我遗漏的问题?
谢谢
最佳答案
- 使用
<xsd:any processContents="strict">
使人们能够在不更改原始模式的情况下向他们的 XML 实例文档添加扩展。这是它给您带来的关键好处。 - 是的。与操作实例相比,工具不关心模式是什么样的,它们查看的是实例文档。对他们来说,使用
<xsd:any>
并不重要还是不是。 - 绑定(bind)工具一般不处理
<xsd:any>
非常优雅。这是可以理解的,因为他们没有关于它可能包含什么的信息,所以他们通常会给你一个无类型的占位符。由应用程序代码在运行时处理它。 JAXB 很特别(至少是 RI),但它是可行的。 - 是的。这是非常好的 XML Schema 实践,WS-I 支持所有有效的 XML Schema
-
<xsd:any>
由于绑定(bind)的非类型化性质,这让程序员的生活变得有点困难,但是如果您需要支持任意扩展点,这就是实现它的方法。但是,如果您的扩展定义明确并且没有更改,那么可能不值得为此烦恼。
关于java - 使用 xsd :any for extensible schema,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4882157/