首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合XML模式

组合XML模式
EN

Stack Overflow用户
提问于 2012-11-01 17:27:13
回答 1查看 2.3K关注 0票数 1

如果可能的话,有没有允许模式组合的Java库呢?

我正在创建一个应用程序,其中用户可以将多个“生成器”链接到用户定义的(可能是XML )数据集,每个“生成器”将有一个模式(可能是XSD ),然后用户可以输入对该模式有效的数据,如果XSD可以轻松地组合成一个-这样整个数据集就会匹配组合的XSD,匹配每个生成器的模式。

我知道XSD可能会冲突,但这不是问题,但如果这完全不可能,还有什么其他解决方案呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-01 17:49:08

您确实可以拥有单独的XSD,并将其“导入”到其他模式中。它非常简单,在“复合”模式中,您只需要使用"import:schemaLocation“。下面是我在项目中使用过的代码示例:

代码语言:javascript
复制
<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中组合基本类型:

代码语言:javascript
复制
<?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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13174176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档