0

QXmlSchema について質問があります。問題のベースは、3 つのファイルのうち存在する xml スキーマです --> SCHEMA.xsd --> CompleyTypes.xsd および SimpleTypes.xsd

SCHEMA.xsd には complexTypes.xsd が含まれ、これには SimpleTypes.xsd が含まれます。

私は QT5 を使用しており、コードの次の部分が示すようにスキーマをロードします。

if(m_xml_shema.load(QUrl(QString("file://home/user/me/SCHEMA.xsd"))
{
   // The schema is correct!
}

私の質問は、QXmlSchema のロード機能もリンクされた .xsd ファイルを実装していますか? 検証しようとすると、検証ツールは、complexTypes.xsd で定義されている I 要素が見つからないと言います! すべてのファイルは同じディレクトリにあります。ファイルの名前も確認したところ、XML エディターはリンクされたファイルを見つけることができました。

間違いはどこにありますか?別の方法でスキーマをロードする必要がありますか? 3 つのファイルすべてをロードする必要がありますか?

4

1 に答える 1

0

コメントで XSD を投稿できないと述べているため、まだ問題が発生している最も単純なケースを作成する必要があります。QT が何をするのかはわかりませんが、コメントで質問に答えてください。実際、Xerces ベースのパーサーはそれを行います。

問題の構造を示す簡単なケースをお手伝いします。

スキーマ.xsd:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           version="1.0">
  <xs:include schemaLocation="ComplexTypes.xsd"/>
  <xs:element name="a" type="aType"/>
</xs:schema>

ComplexTypes.xsd:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           version="1.0">
  <xs:include schemaLocation="SimpleTypes.xsd"/>
  <xs:complexType name="aType">
    <xs:sequence>
      <xs:element name="b" type="bType"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

SimpleTypes.xsd:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           version="1.0">
  <xs:simpleType name="bType">
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="1"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

a.xml:

<?xml version="1.0" encoding="utf-8"?>
<a xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="SCHEMA.xsd"><b>1</b></a>

Xerces ベースのパーサーは、上記がそのまま有効であると報告しますが、を;a.xmlに変更すると無効になります。必要なすべての XSD が正常に検出されます。12 ただし、XSD ファイル名、ディレクトリ、URL、名前空間などの仕様に関して、単純なミスステップが頻繁に行われていることに注意してください。そのため、実際の XSD (または、まだ問題が発生している簡素化されたバージョン) を投稿することをお勧めします。 . 上記のファイルを試して、QT がこれらの XSD をすべて見つけられるかどうかを確認することをお勧めします。xs:include可能であれば、 orxs:importステートメントの特定の使用法に焦点を当てる必要があることがわかります。フォローアップがあればコメントしてください。お役に立てれば。

于 2013-10-17T13:11:27.583 に答える