如果可能的话,有没有允许模式组合的Java库呢?
我正在创建一个应用程序,其中用户可以将多个“生成器”链接到用户定义的(可能是XML )数据集,每个“生成器”将有一个模式(可能是XSD ),然后用户可以输入对该模式有效的数据,如果XSD可以轻松地组合成一个-这样整个数据集就会匹配组合的XSD,匹配每个生成器的模式。
我知道XSD可能会冲突,但这不是问题,但如果这完全不可能,还有什么其他解决方案呢?
发布于 2012-11-01 17:49:08
您确实可以拥有单独的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>https://stackoverflow.com/questions/13174176
复制相似问题