QXmlSchema が提供するメソッドを使用して、XML スキーマの有効性を確認しようとしています。他のツール (Eclipse や xmllint など) からスキーマが有効であることはわかっていますが、次のコードの結果は常に「スキーマが無効です」という結果になります。
QFile file("/home/....xsd");
file.open(QIODevice::ReadOnly);
QXmlSchema schema;
schema.load(&file, QUrl::fromLocalFile(file.fileName()));
if ( schema.isValid() ) {
QXmlSchemaValidator validator( schema );
if ( validator.validate( QUrl("file:///......xml") ) ) {
qDebug() << "instance is valid";
} else {
qDebug() << "instance is invalid";
}
} else {
qDebug() << "schema is invalid";
}
ログに記録されたエラーは次のようなものです。
file:///home/......xsd のエラー XSDError、行 X、列 Y: 複合型 foo のコンテンツ モデルは、bar のコンテンツ モデルの有効な拡張ではありません。
これはスキーマ名前空間のインポートと関係があるのか 、それとも他に何があるのだろうか。
編集:私が参照しているスキーマはthis oneです。