是否有任何Java庫允許在可能的情況下組合模式?我創建了一個應用程序,用戶可以將多個「生成器」鏈接到用戶定義的(可能是XML)數據集,每個「生成器」將有一個模式(可能是XSD),然後用戶可以輸入數據對於該模式是有效的,如果XSD可以很容易地合併爲一個 - 這樣整個數據集將匹配組合的XSD,匹配每個Generator的模式,那將是非常好的。組合XML模式
我知道XSD可能存在衝突,但這不是問題,但如果這是完全不可能的,那麼其他解決方案是什麼?
是否有任何Java庫允許在可能的情況下組合模式?我創建了一個應用程序,用戶可以將多個「生成器」鏈接到用戶定義的(可能是XML)數據集,每個「生成器」將有一個模式(可能是XSD),然後用戶可以輸入數據對於該模式是有效的,如果XSD可以很容易地合併爲一個 - 這樣整個數據集將匹配組合的XSD,匹配每個Generator的模式,那將是非常好的。組合XML模式
我知道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代碼(Classes)的參考,您可以使用「xjc」(XML綁定編譯器)...這非常有用!
我希望這有助於!乾杯!
結合的基本類型在一個新的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>
我不完全明白你想要做什麼,而是你可以結合使用'模式import'or'include': http://stackoverflow.com/q/2357943/1374678 – rolve
對**變色龍模式**有特殊的口音。即使在一些主要的XSD項目中,這些項目也往往被忽視,帶來災難性的後果。 –