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日待たなければなりません。