You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为XSD的sequence元素定义属性?现有代码及需求说明

解决方案

首先,你可以通过**属性组(attributeGroup)**复用Number和Label属性的定义,避免重复编写代码;同时需要为每个元素定义包含属性与文本内容的复杂类型——因为原元素类型为xsd:string(表示元素包含文本值),添加属性后必须用复杂类型来组合两者。

以下是修正并完成后的XSD代码:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <!-- 定义可复用的属性组:包含Number和Label属性 -->
    <xsd:attributeGroup name="DimensionAttributes">
        <xsd:attribute name="Number" type="xsd:string" use="required"/>
        <xsd:attribute name="Label" type="xsd:string" use="required"/>
    </xsd:attributeGroup>

    <!-- 定义Dimension元素的复杂类型:包含属性组 + 子元素选择 + 文本内容 -->
    <xsd:complexType name="DimensionType">
        <xsd:sequence>
            <xsd:choice>
                <xsd:element name="DimensionDebit" type="DimensionValueType"/>
                <xsd:element name="DimensionCredit" type="DimensionValueType"/>
            </xsd:choice>
        </xsd:sequence>
        <xsd:attributeGroup ref="DimensionAttributes"/>
    </xsd:complexType>

    <!-- 定义DimensionDebit/Credit的复杂类型:包含属性组 + 文本内容 -->
    <xsd:complexType name="DimensionValueType">
        <xsd:simpleContent>
            <xsd:extension base="xsd:string">
                <xsd:attributeGroup ref="DimensionAttributes"/>
            </xsd:extension>
        </xsd:simpleContent>
    </xsd:complexType>

    <!-- 主sequence结构 -->
    <xsd:sequence minOccurs="0" maxOccurs="40">
        <xsd:element name="Dimension" type="DimensionType" form="qualified"/>
    </xsd:sequence>
</xsd:schema>

代码说明:

  • 属性组DimensionAttributes:统一定义Number和Label属性,设置use="required"表示这两个属性为必填(若允许可选,可改为use="optional")。
  • DimensionValueType:用于DimensionDebit和DimensionCredit元素,通过simpleContent扩展xsd:string类型,既保留元素的文本值,又添加属性组。
  • DimensionType:用于Dimension元素,包含子元素的choice结构,同时引用属性组,满足Dimension元素包含子元素且自身带属性的需求。
  • 修正了原XSD中的语法错误:补充了未闭合的<xsd:element>标签,规范了嵌套结构。

符合需求的示例XML:

<!-- 包含子元素的Dimension示例 -->
<Dimension Number="2" Label="Ty:">
    <DimensionDebit Number="2" Label="Ty:">248000</DimensionDebit>
</Dimension>

<!-- 单独的DimensionDebit示例 -->
<DimensionDebit Number="2" Label="Ty:">248000</DimensionDebit>

内容的提问来源于stack exchange,提问作者PekkaPee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:30:56