一个XSD用于整个文档和片段?

时间:2016-10-26 10:11:36

标签: java xml spring xsd xml-validation

我希望创建一个能够验证完整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,其中一个将验证片段,另一个将验证批次?

1 个答案:

答案 0 :(得分: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根元素,并且没有定义重复。