2016-10-09 20 views
0

属性matchは常に値が含まれない可能性があり、それが空の文字列許可する必要があります。XML空の文字列の属性値のxsd

<template mode="on" match=""> 
</template> 

が、私はここで、以下のXSD を使用しています、以前のコードことを検証するためにあります私のxsd: no viable alternative at input ' <EOF> ':XSDに対して検証プロセスで

<xs:element name="template"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/> 
     </xs:sequence> 
     <xs:attribute type="xs:string" name="mode" use="optional"/> 
     <xs:attribute name="match" use="optional"> 
      <xs:simpleType> 
       <xs:union memberTypes="xs:string emptyString"/> 
      </xs:simpleType> 
     </xs:attribute> 
    </xs:complexType> 
</xs:element> 
<xs:simpleType name="emptyString"> 
     <xs:restriction base="xs:string"> 
      <xs:length value="0"/> 
     </xs:restriction> 
</xs:simpleType> 

は、私は、次のエラーメッセージが表示されました。

次のコードはエラーを表示していません。

<template mode="on" match="aaa"> 
</template> 

これを解決する方法はありますか?次のようにあなたの完全なXSDがあると仮定すると

答えて

1

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="template"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/> 
     </xs:sequence> 
     <xs:attribute type="xs:string" name="mode" use="optional"/> 
     <xs:attribute name="match" use="optional"> 
     <xs:simpleType> 
      <xs:union memberTypes="xs:string emptyString"/> 
     </xs:simpleType> 
     </xs:attribute> 
    </xs:complexType> 
    </xs:element> 
    <xs:simpleType name="emptyString"> 
    <xs:restriction base="xs:string"> 
     <xs:length value="0"/> 
    </xs:restriction> 
    </xs:simpleType> 

</xs:schema> 

次に、あなたのXMLがtemplate/@match=""とし、template/@match="aaa"との両方で、あなたのXSDに対して有効です。 XMLまたはXSDに問題はありません。

xs:stringは、すでにxs:unionemptyStringの部分がなくても空にできます。

エラーメッセージは、一般的な検証XML/XSDパーサーによって生成されたものとは異なります。私は、あなたのメッセージが実際に別のプログラムから発信されているか、あなたの問題の本当のMCVEを作成できなかったと考えています。

+0

あなたはそうです、私は別のトップレイヤーを作りました、ありがとう。 – josephino

関連する問題