2011-10-20 5 views
2

Nokogiri Rubyパーサーを使用してXSDファイルを読み込もうとしていて、次のエラーが発生しました Nokogiri :: XML :: SyntaxError(Element '{http://www.w3.org/2001/XMLSchema}element'有効ではありません。(注釈?、((simpleType | complexType)?、(unique | key | keyref)*))):XSD - 内容が無効です。

xsdの問題を知っている人はいますか?

<?xml version="1.0" encoding="utf-8"?> 
<xsd:schema elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="company_donation_request" type="company_donation_requestType" /> 
    <xsd:complexType name="company_donation_requestType"> 
    <xsd:sequence> 
     <xsd:element name="order" type="orderType"></xsd:element> 
     <xsd:element name="donation" type="donationType"></xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="donationType"> 
    <xsd:sequence> 
     <xsd:element name="campaign_key" type="xsd:string" minOccurs="1" maxOccurs="1" > 
     <xsd:restriction base="xsd:string"> 
      <xsd:minLength value="2"/> 
      <xsd:maxLength value="255"/> 
     </xsd:restriction> 
     </xsd:element> 
     <xsd:element name="amount" type="xsd:decimal" minOccurs="1" maxOccurs="1" ></xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="orderType"> 
    <xsd:sequence> 
     <xsd:element name="id" type="xsd:string" minOccurs="1" maxOccurs="1" > 
     <xsd:restriction base="xsd:string"> 
      <xsd:minLength value="2"/> 
      <xsd:maxLength value="255"/> 
     </xsd:restriction> 
     </xsd:element> 
     <xsd:element name="fulfillment_date" type="xsd:dateTime" minOccurs="1" maxOccurs="1" > 
     <xsd:restriction base="xsd:string"> 
      <xsd:minLength value="2"/> 
      <xsd:maxLength value="255"/> 
     </xsd:restriction> 
     </xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
</xsd:schema> 

答えて

3

xsd:restrictionxsd:elementの子として許可されていないため、エラーを取得しています。 xsd:restrictionxsd:simpleTypeに追加してから、そのタイプをxsd:elementに指定してください。

あなたxsd:elementに直接xsd:simpleTypeを追加することができますが、あなたは、同じ制限を3回使用しているので、要素の外側に単純にそれを置くために、より理にかなっています。

例を示します。私は単純 "stackOverflowTest" と命名:

<xsd:schema elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="company_donation_request" type="company_donation_requestType" /> 
    <xsd:complexType name="company_donation_requestType"> 
    <xsd:sequence> 
     <xsd:element name="order" type="orderType"></xsd:element> 
     <xsd:element name="donation" type="donationType"></xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="donationType"> 
    <xsd:sequence> 
     <xsd:element name="campaign_key" type="stackOverflowTest" minOccurs="1" maxOccurs="1"/> 
     <xsd:element name="amount" type="xsd:decimal" minOccurs="1" maxOccurs="1"/> 
    </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="orderType"> 
    <xsd:sequence> 
     <xsd:element name="id" type="stackOverflowTest" minOccurs="1" maxOccurs="1"/>  
     <xsd:element name="fulfillment_date" type="stackOverflowTest" minOccurs="1" maxOccurs="1"/>  
    </xsd:sequence> 
    </xsd:complexType> 
    <xsd:simpleType name="stackOverflowTest"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:minLength value="2"/> 
     <xsd:maxLength value="255"/> 
    </xsd:restriction> 
    </xsd:simpleType> 
</xsd:schema> 

は、この情報がお役に立てば幸いです。

関連する問題