2

QXmlSchemaValidator は、substitutionGroups が含まれている場合、XML を検証しません。オンライン ツール ( http://www.utilities-online.info/xsdvalidation/http://www.freeformatter.com/xml-validator-xsd.html ) は、XML、XSD、および XSD に対する XML を検証します。

エラー:

Error XSDError in file: (XML), at line 44, column 14: Element image_id is not defined in this scope.

関連コード、XSD:

  <xs:element name="image_ids" abstract="true"/>
  <xs:element name="image_id" type="xs:nonNegativeInteger" substitutionGroup="image_ids"/>
  <xs:element name="image_queue_id" type="xs:nonNegativeInteger" substitutionGroup="image_ids"/>

  <xs:element name="image_slot">  
    <xs:complexType>      
      <xs:all>
        <xs:element ref="image_ids" maxOccurs="1"/>
        <xs:element ref="caption" minOccurs="0" maxOccurs="1"/>
      </xs:all>
      <xs:attributeGroup ref="position"/>
    </xs:complexType>
  </xs:element>

関連コード、XML:

  <image_slot x="7" y="110" width="55">
    <image_id>0</image_id> <-- error
    <caption>some caption</caption>
  </image_slot>

QXmlSchemaValidator は XSD を検証しますが、XSD に対して XML を検証しません。XML を検証するには、substitutionGroup を削除するだけで十分ですが、これは機能が失われることも意味します。正しくない XML ファイルが検証されるようになります。したがって、私の質問は-Qtは実際にXMLのsubstitutionGroupsをサポートしていますか?私が間違っていることは他にありますか(他のツールが気付かなかった)?

それとも QXmlSchemaValidator のバグですか? その場合、アイデアを放棄して別の解決策を見つける必要がありますか?

編集:自分の回答を投稿できるようになるまで1日待たなければなりませんでした。受理できるようになるまであと1日待たなければなりません。

4

1 に答える 1

1

置換群の要素は同じ型でなければならないことがわかりました。これは私の XSD の場合でしたが、型は抽象要素レベルではなく、グループの各要素で定義されていました。次のコードで問題が解決しました。

XDS コード:

  <xs:element name="image_ids" type="xs:nonNegativeInteger" abstract="true"/>
  <xs:element name="image_id" substitutionGroup="image_ids"/>
  <xs:element name="image_queue_id" substitutionGroup="image_ids"/>

  <xs:element name="image_slot">  
    <xs:complexType>      
      <xs:all>
        <xs:element ref="image_ids" maxOccurs="1"/>
          <xs:element ref="caption" minOccurs="0" maxOccurs="1"/>
        </xs:all>
      <xs:attributeGroup ref="position"/>
    </xs:complexType>
  </xs:element>

XML コード:

  <image_slot x="7" y="110" width="55">
    <image_id>0</image_id>
    <caption>some caption</caption>
  </image_slot>

QXmlSchemaValidator が後で XML の検証を拒否するためだけにスキーマを検証した理由はわかりません。うまくいけば、これは同じ問題に直面している他の人を助けるでしょう.

于 2013-07-19T07:40:23.300 に答える