2016-10-26 1 views
1

完全なXML文書とその断片を検証できる文法を作成したいと考えています。文書全体とフラグメントの両方に対して1つのXSD?

私はドキュメントの集合を「バッチ」で集計しています。私は、単一の文書を表すサブXMLを検証したい

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

マイSpringBatchプロセスは(StaxEventItemReader付き)文書でバッチを分割 :各文書は、メタデータのセットを持って

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

I hereを読んで、部分的なXSDを使ってXMLを検証することはできません。

しかし、は、1つのフラグメントを検証あろう、そして他のバッチを検証するであろう2つのXSDで検証するために、重複を回避しつつ方法、がありますか?

答えて

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> 

この方法で文書がbatchまたはdocumentルート要素のいずれかを有していてもよく、そして何の定義の重複はありません。

+0

クリスタルクリア、完全に動作します。ありがとうございました! さらに、それは私がよりよく理解できるようになっている[この投稿](http://stackoverflow.com/questions/1614015/working-with-multiple-xsds) –

関連する問題