是否存在允许在可能的情况下组合模式的Java库?
我正在创建一个应用程序,用户可以将多个“Generators”链接到用户定义的(可能是XML)数据集,每个“Generator”都有一个架构(可能是XSD),然后用户就可以输入数据了如果XSD可以轻松地组合成一个 - 那么对于该模式是有效的 - 这样整个数据集将与组合的XSD匹配,匹配每个Generator的模式。
我理解XSD可能存在冲突,但这不是问题,但如果这完全不可能,那么其他解决方案会是什么?
答案 0 :(得分:1)
您确实可以将单独的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代码(Classes)来操作这些对象的引用,可以使用“xjc”(XML绑定编译器)......这非常有用!< / p>
我希望这有帮助!干杯!
组合新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>