【问题标题】:XML Schema for collection or array containing basic parameters along with other collections or arrays包含基本参数的集合或数组以及其他集合或数组的 XML 模式
【发布时间】:2014-05-17 01:15:31
【问题描述】:

我需要编写一个 XML 模式,以便生成需要采用非常特定格式的 XML 文件。我希望使用 XML Schema 和 JAXB 来创建数据对象,写入数据对象,然后将该数据对象编组为正确格式的 XML。

不幸的是,该 XML 文档不存在架构,某些遗留代码正在以非常手动的方式读取该架构。因此,目标是创建一个允许 JAXB 以这种非常特定的方式编组的 XML 模式。

我特别遇到了命名集合或数组的问题。我对此有一些变化,最复杂的版本如下。

请注意,我无法控制 XML 的目标所需格式,因此我需要了解如何指定模式以生成它。任何和所有建议都会非常非常有帮助,我保证,XML Schema 专家,如果有人帮助我,那么他们将是我本周最喜欢的人!

这是目标格式:

 <BetaInfo name="Beta ID" value="1">
      <SimpleBetaInfo>
         <Param name="Simple Beta A" value="Beta ID 1, Param A data"/>
         <Param name="Simple Beta B" value="Beta ID 1, Param B data"/>
      </SimpleBetaInfo>
      <ListBetaInfo name="List ID" value="1">
         <Param name="Item 1" value="Beta ID 1, List Index 1, Item 1 data"/>
         <Param name="Item 2" value="Beta ID 1, List Index 1, Item 2 data"/>
      </ListBetaInfo>
      <ListBetaInfo name="List ID" value="2">
         <Param name="Item 1" value="Beta ID 1, List Index 2, Item 1 data"/>
         <Param name="Item 2" value="Beta ID 1, List Index 2, Item 2 data"/>
      </ListBetaInfo>
 </BetaInfo>

【问题讨论】:

  • 属性的内容是否也有限制?例如,是否有最大或最小长度,正则表达式?它们支持哪些类型?

标签: java xml arrays jaxb


【解决方案1】:

这可能是一个起点。它描述了您提供的实例的结构,您可以对其进行调整以支持子元素的出现。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 

    <xs:attributeGroup name="commonAttributes">
        <xs:attribute name="name"  type="xs:string"/>
        <xs:attribute name="value" type="xs:string"/>
    </xs:attributeGroup>

    <xs:element name="BetaInfo">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="SimpleBetaInfo" type="BetaInfoType" minOccurs="1" maxOccurs="1" />
                <xs:element name="ListBetaInfo"   type="BetaInfoType" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attributeGroup ref="commonAttributes"/>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="BetaInfoType">
        <xs:sequence>
            <xs:element name="Param" minOccurs="2" maxOccurs="2">
                <xs:complexType>
                    <xs:attributeGroup ref="commonAttributes"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attributeGroup ref="commonAttributes"/>
    </xs:complexType>

</xs:schema>

然而,上述模式不限制属性内容的结构,可以使用正则表达式完成,也不限制不同字段中数据之间的关系(这需要 XSD 1.1,而 JAXB 目前不支持) .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2012-01-24
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多