【问题标题】:One XSD for both whole document and fragment?一个 XSD 用于整个文档和片段?
【发布时间】:2016-10-26 10:11:35
【问题描述】:

我希望创建一种能够同时验证完整 XML 文档及其片段的语法。

我有一组文档聚集在一个“批次”中。每个文档都有一组元数据:

<batch>
    <document>
        <metadata1 />
        <metadata2 />
        <metadata3 />
    </document>
    <document>
        <metadata1 />
        <metadata2 />
        <metadata3 />
    </document>
</batch>

我的 SpringBatch 进程将批处理拆分为文档(使用 StaxEventItemReader) 我希望验证代表单个文档的子 XML:

<document>
    <metadata1 />
    <metadata2 />
    <metadata3 />
</document>

我读到 here 我不能使用部分 XSD 来验证 XML。

但是,有没有一种方法,同时避免重复,使用两个 XSD 进行验证,一个验证片段,另一个验证批处理?

【问题讨论】:

    标签: java xml spring xsd xml-validation


    【解决方案1】:

    您可以通过指定多个可能的根元素使用单个 XSD 来实现您的目标:

    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    
      <xs:element name="batch">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="document" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    
      <xs:element name="document">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="metadata1" type="xs:string" />
            <xs:element name="metadata2" type="xs:string" />
            <xs:element name="metadata3" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    
    </xs:schema>
    

    这种方式文档可能有batchdocument 根元素,并且没有定义重复。

    【讨论】:

    • 晶莹剔透,完美运行。谢谢!另外,让我更了解this post
    猜你喜欢
    • 2017-05-09
    • 2016-06-25
    • 2011-02-19
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多