发布
社区首页 >问答首页 >递归XML模式类型使用中的一个问题

递归XML模式类型使用中的一个问题
EN

Stack Overflow用户
提问于 2010-08-23 22:18:21
回答 1查看 1.1K关注 0票数 1

很容易在一个XML中定义两个名称相同的元素,比如<any>和不同的允许子元素。一个应该声明两个XSD类型AnyType1AnyType2complexTypes,它描述了允许的子元素。然后可以在一个上下文中将元素<any>声明为<xs:element name="any" type="AnyType1" />,在另一个上下文中声明为<xs:element name="any" type="AnyType2" />。我的问题是,AnyType1AnyType2都是递归的。要在XSD中定义递归类型,我使用以下语法

代码语言:javascript
代码运行次数:0
复制
<xs:element name="any" type="AnyType1" />
<xs:complexType name="AnyType1">
    <xs:choice minOccurs="1" maxOccurs="unbounded">
        <!-- … some permitted subelements -->
        <xs:element name="any" type="AnyType1" />
        <!-- … some other permitted subelements -->
    </xs:choice>
</xs:complexType>

这种语法的缺点是,我们必须在模式"any" 的顶部声明元素,以后不能使用<xs:element name="any" type="AnyType2" />来定义递归类型AnyType2

我的问题是:如何在同一个名称空间中的同一个XML模式中声明两个递归元素类型.

我的问题的背景如下。我需要定义描述某些测试的XML模式。应该结合(分组) <all><any>元素(“或”和“和”操作)来描述某些测试的结果。在一个上下文中(在XML文件的一个位置),我需要允许测试的一个子集,它可以由<all><any>分组,而在另一个地方,应该允许其他子元素。所以我不想定义<anyTest1><anyTest2>元素,也不想定义<n1:any><n2:any>。我只想使用<any>,但是如果<any><TestBeforeProgramStart>的子元素,我希望允许子元素的一个子集,如果<any><TestAfterProgramEnd>的另一个子集。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-01 00:05:55

我自己在问题上找到了答案。看起来很简单。

它不需要在<xs:element name="any" type="AnyType1" />之前声明<xs:complexType name="AnyType1">,所以AnyType1类型的声明可以如下所示

代码语言:javascript
代码运行次数:0
复制
<xs:complexType name="AnyType1">
    <xs:choice minOccurs="1" maxOccurs="unbounded">
        <!-- … some permitted subelements -->
        <xs:element name="any" type="AnyType1" />
        <!-- … some other permitted subelements -->
    </xs:choice>
</xs:complexType>

因此,我所描述的问题似乎并不存在。

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

https://stackoverflow.com/questions/3552150

复制
相关文章

相似问题

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