首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让XSD元素在不知道特定元素的情况下接受特定类型的子元素?

如何让XSD元素在不知道特定元素的情况下接受特定类型的子元素?
EN

Stack Overflow用户
提问于 2017-03-12 06:08:27
回答 2查看 44关注 0票数 1

所以我正在做一个项目,我们定义了一些灵活的XSD模式。我们的想法是使用XML为我们的应用程序中的某些框架传递执行指令。我们将在此基础上构建的各种执行任务的核心结构将位于一个核心架构中,该架构将被实现架构引用。

在我的核心模式中,我有包装器类型。这些类型在实现架构中进行了扩展,这允许实现架构中的元素将核心架构中的元素作为其子元素。

问题是,我需要反面也是正确的。我需要核心模式中的元素能够将实现模式中的元素也作为它们的子元素。下面是我要做的XML的一个例子:

代码语言:javascript
复制
<http:Execution>
    <core:Condition>
        <core:If test="ognl:'One-Response'.equals(#value)">
            <http:POST url="http://localhost:9000/eip/http-post/second" auth="BasicAuth" />
        </core:If>
    </core:Condition>
</http:Execution>

在该示例中," core“名称空间是我的核心模式,"http”名称空间是实现模式。

Execute扩展了"extendedWrapperType",它可以毫无问题地接受核心元素core:Condition。core:Condition接受子core:If,因为它是在core模式中定义的。但是,core:If不能接受http:POST作为其子元素,因为在核心模式中,它不是被设计为接受它的。

我希望避免使用xs:any,但如果其他方法都失败了,这将是我的退路。我真的希望有一种方法可以让核心XSD中的元素包含一个引用,它可以接受我在核心XSD中指定的类型的任何子级,然后让http XSD中的元素扩展该类型。

如果您有想法和帮助,我们将不胜感激。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-03-12 09:13:43

这听起来像是替换组的工作。在core schema中,定义一个抽象元素声明,作为core:If的内容出现。在实现架构中,将您的特定元素定义为该替换组的成员。请注意,抽象元素可以有一个类型,而特定元素必须是兼容类型(相同类型或从该类型派生)。

票数 1
EN

Stack Overflow用户

发布于 2017-03-12 07:35:34

如果我没有理解错的话,这是不可能的--您必须循环地将两个模式导入到另一个模式中,这是行不通的。

当然,您可以在核心模式中使用xs:any,但这并不是一种理想的方法。

您可以考虑定义某种类型的core操作复杂类型(可能会在您的实现模式中进一步限制/扩展)。因此,不是这样:

代码语言:javascript
复制
<http:Execution>
    <core:Condition>
        <core:If test="ognl:'One-Response'.equals(#value)">
            <http:POST url="http://localhost:9000/eip/http-post/second" auth="BasicAuth" />
        </core:If>
    </core:Condition>
</http:Execution>

你会有像这样的东西

代码语言:javascript
复制
<http:Execution>
    <core:Condition>
        <core:If test="ognl:'One-Response'.equals(#value)">
            <core:Action command="POST">
                <core:Parameter name="url" value="http://localhost:9000/eip/http-post/second" />
                <core:Parameter name="auth" value="BasicAuth" />
            </core:Action>
        </core:If>
    </core:Condition>
</http:Execution>

您甚至可以考虑去掉core:If,将test属性移到Action

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42741240

复制
相关文章

相似问题

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