2011-01-27 6 views
0

xsdスキーマ内にいくつかのグローバル要素を定義しました。 xmlファイルにグローバル要素が単独で含まれている場合(他のルート要素がない場合)、検証ではこれを許可しないでください。しかし私の場合、グローバル要素だけが存在する場合、ファイルは正常に検証されます。ルート要素の外側/外側で使用するグローバル要素を制限する

私の場合、グローバル要素であるGROUP要素があります。この要素は常にCASE要素に含める必要がありますが、CASE要素を削除するとxmlファイルの検証は成功します。

いくつかの複雑なロジック(自身への再帰呼び出し)があり、複数の場所で使用されているため、GROUP要素をローカル要素として作成できません。さらに私はそれを地元のものにしようとしたとき、私にエラーを与えました。

ここでは、CASE要素の外部で使用しないように制限する解決策があります。

例(可):

<?xml version="1.0" encoding="utf-8" ?> 
<CASE> 
    <GROUP> 
    </GROUP> 
</CASE> 

を許可されていません:

<?xml version="1.0" encoding="utf-8" ?> 
<GROUP> 
</Group> 

答えて

1

ごめんなさいつだけのように許可されているグローバルなどの要素を指定するためのXMLスキーマでの方法はありませんルート。このグループは、あなたの<GROUP>要素が含まれるように<xs:group name="someName">要素の内側にあなたの<GROUP>要素をラップ(えっ、A:あなたは回避策を試みることができるようにSchematronルール

1

を埋め込むよう(この要件を検証するために他の技術を見てする必要があるかもしれませんこれらの名前のために少し混乱します...)この場合、グローバル<GROUP>要素を参照する必要がある場合は、その代わりに「someName」グループを参照する必要があります。

この回避策は、再帰的な要素の定義が複雑です。

1

グループelemを作成しようとしましたか?ローカルではなく、再帰と再利用を可能にするグローバルな型を与えますか?

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Case" type="CaseType"/> 
    <xs:complexType name="CaseType"> 
    <xs:sequence> 
     <xs:element name="Group" type="GroupType" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="GroupType"> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:element name="Group" type="GroupType"/> 
     <xs:element name="Case" type="CaseType"/> 
    </xs:choice> 
    </xs:complexType> 
</xs:schema> 
関連する問題