簡體   English   中英

組合XML模式

[英]Combining XML Schemas

在可能的情況下,是否有任何Java庫允許組合架構?

我正在創建一個應用程序,用戶可以在該應用程序中將多個“ Generators”鏈接到用戶定義的(可能是XML)數據集,每個“ Generator”都有一個模式(可能是XSD),然后用戶可以輸入對此有效的數據模式,最好將XSD輕松組合為一個-這樣整個數據集將與組合的XSD匹配,並與每個Generator的模式匹配。

我知道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綁定編譯器)...這非常有用!

我希望這有幫助! 干杯!


在新的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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM