是否有任何 Java 库允许在可能的情况下组合模式?
我正在创建一个应用程序,用户可以将多个“生成器”链接到用户定义的(可能是 XML)数据集,每个“生成器”都有一个模式(可能是 XSD),然后用户可以输入有效的数据模式,如果 XSD 可以很容易地组合成一个,那就太好了 - 这样整个数据集就会匹配组合的 XSD,匹配每个生成器的模式。
我知道 XSD 可能会发生冲突,但这不是问题,但如果这完全不可能,那么其他解决方案是什么?
是否有任何 Java 库允许在可能的情况下组合模式?
我正在创建一个应用程序,用户可以将多个“生成器”链接到用户定义的(可能是 XML)数据集,每个“生成器”都有一个模式(可能是 XSD),然后用户可以输入有效的数据模式,如果 XSD 可以很容易地组合成一个,那就太好了 - 这样整个数据集就会匹配组合的 XSD,匹配每个生成器的模式。
我知道 XSD 可能会发生冲突,但这不是问题,但如果这完全不可能,那么其他解决方案是什么?
您确实可以将单独的 XSD “导入”到其他模式。这很简单,在“复合”模式中,您只需要使用“import:schemaLocation”。请参阅我在项目中使用的代码中的以下示例:
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://test/interactions/AddToContext"
xmlns:tns="http://test/interactions/AddToContext" xmlns:basictypes="http://test/interactions/BasicTypes" elementFormDefault="qualified">
<import schemaLocation="BasicTypes.xsd"
namespace="http://test/interactions/BasicTypes">
</import>
<!-- Request Message -->
<element name="AddToContextRequest">
<complexType>
<sequence>
<choice>
<element name="ServiceIdToAdd" type="string" maxOccurs="unbounded" />
<element name="ValueToAdd" type="basictypes:ContextValue" maxOccurs="unbounded" />
</choice>
</sequence>
</complexType>
</element>
<!-- Response message -->
<element name="AddToContextResponse">
<complexType>
<sequence>
<element name="Result" type="string" />
</sequence>
</complexType>
</element>
</schema>
您可以看到我已将“BasicTypes”架构导入此架构......
如果你想使用这个模式作为参考来生成Java代码(类)来操作这些对象,你可以使用“ xjc ”(XML Binding Compiler)...非常有用!
我希望这有帮助!干杯!
在新的 XSD 中组合基本类型:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://test/interactions/AddToContext"
xmlns:tns="http://test/interactions/AddToContext" elementFormDefault="qualified">
<complexType name="ContextValue">
<sequence>
<element name="ValueID" type="string" />
<choice>
<sequence>
<element name="Value" type="string" />
<element name="ID" type="string" />
</sequence>
<element name="InfoValue" type="string" />
</choice>
</sequence>
</complexType>
<!-- Request Message -->
<element name="AddToContextRequest">
<complexType>
<sequence>
<choice>
<element name="ServiceIdToAdd" type="string" maxOccurs="unbounded" />
<element name="ValueToAdd" type="tns:ContextValue" maxOccurs="unbounded" />
</choice>
</sequence>
</complexType>
</element>
<!-- Response message -->
<element name="AddToContextResponse">
<complexType>
<sequence>
<element name="Result" type="string" />
</sequence>
</complexType>
</element>
</schema>