2011-01-14 19 views
1

何らかの理由で、のnillableを.Netスキーマ検証ツールで正しく動作させることができません。私は親ノードをオプションにする方法を見つけようとしていますが、同時に空のノードがバリデーターを通過するのを防ぎます。子ノードのスキーマ検証ツール「nillable」が機能しません。

は、ここで現在の要素のバリデータです:

<xs:element name="Dates" minOccurs="0" maxOccurs="1"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="From" type="datetime" minOccurs="0" maxOccurs="1" /> 
      <xs:element name="To" type="datetime" minOccurs="0" maxOccurs="1" /> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

私は=「false」をしかし、それは動作しませんnillableな日付要素を変更しようとした - 空のノードはまだ過去のことになりますバリデーター。

また、3つの要素ノードをすべてnillable = "false"に変更しようとしました。空の親ノードを検出するのにうまくいきますが、両方の子ノードが残りのオプションではなく必要なノードになります。

ここに何か不足していますか?はい、私はいつもちょうどそれにいくつかのコードをスローし、それを動作させることができます...しかし、私は私に必要なものを与えるスキーマの宣言にここにバリエーションがあることを賭けている。

答えて

1

あなたのケース内の溶液がある "複数選択":

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="root"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Dates" minOccurs="0" maxOccurs="1"> 
        <xs:complexType> 
         <xs:choice minOccurs="1" maxOccurs="2"> 
          <xs:choice maxOccurs="1"> 
           <xs:element name="From" type="xs:dateTime" /> 
          </xs:choice> 
          <xs:choice maxOccurs="1"> 
           <xs:element name="To" type="xs:dateTime" /> 
          </xs:choice> 
         </xs:choice> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

妥当な文書

<?xml version="1.0"?> 
<root> 
    <Dates> 
     <From>2010-01-20T12:34:45</From> 
     <To>2011-01-20T12:34:45</To> 
    </Dates> 
</root> 


<?xml version="1.0"?> 
<root> 
    <Dates> 
     <From>2010-01-20T12:34:45</From> 
    </Dates> 
</root> 


<?xml version="1.0"?> 
<root> 
    <Dates> 
     <To>2011-01-20T12:34:45</To> 
    </Dates> 
</root> 

無効なドキュメント

<?xml version="1.0"?> 
<root> 
    <Dates/> 
</root> 

簡単な方法<From /><To />を強制する唯一の方法は、特殊な名前空間を使用することでしょう

<xs:element name="Dates" minOccurs="0" maxOccurs="1"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:any minOccurs="1" maxOccurs="2" processContents="lax" /> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

+0

非常に近いと思いますが、最初の例(From/Toノードあり)は検証に失敗します(http://www.xmlforasp.net/SchemaValidator.aspxを参照)。これは正しい方向に向いているように見えますが、スキーマ検証ツールサイトでスキーマを試してみると、私は物事を悪化させました。 :-) – jerhewet

+0

@ jerhewetあなたは本当に正しいです。投稿されたバージョンに、外側の 'choice'の' maxOccurs = "2" 'がありません。 – Filburt

+0

あなたは* Da Manです!多分ダ・ウーマン - どちらの場合でも/性別でこれは私が探していたものです。非常に幸せなキャンピングカー! – jerhewet

関連する問題