gpt4 book ai didi

java - XML 架构。处理命名空间感知属性值

转载 作者:数据小太阳 更新时间:2023-10-29 02:27:33 24 4
gpt4 key购买 nike

我的部分项目涉及对用户定义的架构文档进行大量转换。我需要能够更改目标 namespace 、支持类型交叉引用和构建 wsdl基于多个模式文档。最常用的操作之一是在将模式导入 wsdl 文件之前更改 namespace 前缀。我正在使用 org.xml.sax.ContentHandler它是 startPrefixMapping处理命名空间的方法。除非我想更改元素类型,否则一切正常且完美。

这是简单的架构片段

<schema xmlns="http://www.w3.org/2001/XMLSchema">
<complexType name="Param">
<sequence>
<element name="key" type="string"/>
<element name="value" type="string"/>
</sequence>
</complexType>
<!-- omitted -->

必须按如下方式放在 wsdl 中:

<definitions xmlns:xs="http://www.w3.org/2001/XMLSchema">
<types>
<xs:schema>
<xs:complexType name="Param">
<xs:sequence>
<xs:element name="key" type="xs:string"/> <!-- 'xs:' to be added -->
<xs:element name="value" type="xs:string"/> <!-- 'xs:' to be added -->
</xs:sequence>
</xs:complexType>
<!-- omitted -->

问题是某些模式的属性值(type<element> 中,base<extension> 中)是命名空间感知的,并且在上面的示例中可能会发生变化。如我所见,DOM 和 SAX 解析器都无法处理这种情况,因此我目前正在使用难看的字符串操作从特定属性值中检索命名空间信息。

我错过了什么吗?是否有任何 API、库或其他特定于架构的工具来处理此类任务?

最佳答案

是的,这是 xml 模式/wsdl 中的一个主要错误。在属性值中使用 xml 命名空间前缀是一个巨大的错误(因为前缀值本身并不重要,只是实际命名空间的占位符)。不幸的是,我不知道该问题有什么好的解决方案(我不得不实现几乎相同类型的想法:将多个用户定义的模式合并到一个模式/wsdl 中)。我知道 xerces 有一个 xml schema model api ,但我不知道它是否支持将多个模式合并在一起并生成结果输出。

关于java - XML 架构。处理命名空间感知属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7877684/

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