Часть моего проекта включает в себя серьезные преобразования пользовательских документов схемы.Мне нужно иметь возможность изменять целевые пространства имен, поддерживать перекрестные ссылки типов и строить wsdl
на нескольких документах схемы.Одной из наиболее часто используемых операций является изменение префикса пространства имен перед импортом схемы в файл wsdl.Я использую 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-интерфейсы, библиотеки или другие специфичные для схемы инструменты для решения таких задач?