2011-07-13 21 views
1

次のXMLスニペットを検証するxsdドキュメントを作成しようとしています。xml要素の属性値の検証

<parentElement> 
    <someElement name="somethingRequired"/> 
    <someElement name="somethingElseRequired"/> 
    <someElement name="anything"/> 
</parentElement> 

parentElementは1が「somethingRequiredを」値を含む属性の名前を持ち、もう一方は値「somethingElseRequired」を含む属性名を持つsomeElement少なくとも二つの出現箇所が含まれている場合は、検証するものとします。

これは可能ですか?

答えて

2

これは可能ですか?

どのような制限が必要かによって異なります。それはname属性のすべてが一意の値を持っていることを十分に良好であれば、あなただけのtype="xs:string"を使用するのではなく、あなたはまた、許可された値のいくつか列挙セットに例えば属性値を制限することができ<xs:unique>

<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="parentElement"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element minOccurs="2" maxOccurs="unbounded" name="someElement"> 
      <xs:complexType> 
      <xs:attribute name="name" type="xs:string" /> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:unique name="uniqueName"> 
     <xs:selector xpath="someElement" /> 
     <xs:field xpath="@name" /> 
    </xs:unique> 
    </xs:element> 
</xs:schema> 

でこれを達成することができます。 xpath属性には述語を含めることができないため、最初の2つの名前属性のみを一意に限定することはできません。

特定の値を持つ名前属性が必要な場合は、もう1つは特定の値、残りの値は任意の値を持つ場合、これはスキーマコンポーネントの制約Element Declarations Consistentに違反するか、 <xs:unique>より具体的な共起制約のため、一般的には不可能です。インスタンス文書のxsi:type属性を使用して、要素の型を明示的に宣言することで可能になる場合があります。

0

属性値に基づいて検証する以外はすべて実行できます。

関連する問題