2012-02-14 5 views
5

C#XDocument XSDの検証に問題があります。

次のファイルは、XMLスパイによっても検証さではなく、純(C#の)

<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Simple.xsd"> 
    <Var Name="$Toto"/> 
</Root> 

スキーマ

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="Root"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Var"> 
        <xs:complexType> 
         <xs:attribute name="Name" type="ST_VariableIdentifier" use="required"/> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
     <xs:simpleType name="ST_VariableIdentifier"> 
     <xs:restriction base="xs:string"> 
      <xs:pattern value="$[a-z,A-Z]*"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

アイデアですか?

+2

C#タグのメリットはありますか? – sbi

+0

これはC#のバグです。回避策があります:[$]を使用してください。そのような文字参照を試してみてください。 $、何らかの理由でC#はここで非常に厄介です... –

答えて

4

これは動作するはずです。

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="Root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Var"> 
      <xs:complexType> 
      <xs:attribute name="Name" type="ST_VariableIdentifier" use="required"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:simpleType name="ST_VariableIdentifier"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="[$][a-z,A-Z]*"/> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 
+0

ありがとう、それはうまくいきます。 – swWork

+0

あなたは大歓迎です:) –

+0

本当にあなたのための解決策だったら答えを受け入れてください:)ありがとう。 –

0

既存の回答に追加するだけです。これは実際にはW3C仕様の.NET実装の既知の「バグ」です(here、Connectでは認識されますが、を修正しません)。

MSDNは上記の回避策と共に詳細情報(here)を提供します。

World Wide Webコンソーシアム(W3C)XMLスキーマの 勧告のSystem.Xmlの実装では、正規表現の パターンマッチングを実行するために正規表現クラスを使用しています。場合によっては、W3Cが推奨する動作 がRegExクラスの動作と異なります。 パターンマッチングのSystem.Xmlの実装はW3C仕様と異なる場合、以下の が知られている例です:

XML Schema仕様のためのW3Cによると、ドル記号($)は は、通常の文字として扱われるべきです。ただし、System.Xml 検証では、xs:パターンのドル記号が 行末アンカーとして解釈されます。考えられる回避策は、$を[$]に置き換えることです。 パターンが[abc $]のように角括弧で囲まれている場合、変更するには は必要ありません。