2013-10-16 55 views
0

我對QXmlSchema有疑問。問題的基礎是xml架構,其中存在三個文件 - > SCHEMA.xsd - > CompleyTypes.xsd和SimpleTypes.xsdQXmlSchema無法找到鏈接的文件

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中定義的元素!所有文件都在同一個目錄中,我也檢查了文件的名稱,我的XML Editor能夠找到鏈接的文件!

錯誤在哪裏? 我是否必須以不同的方式加載模式? Di我必須加載所有三個文件?

+0

請發佈XSD。 – kjhughes

+0

我無法發佈xsd。 QT框架原則上可能加載鏈接文件,還是必須單獨加載它們? –

+0

您是否找到解決方案? – artoon

回答

0

既然你在評論中提到你不能發佈XSD,你應該創建仍然存在問題的最簡單的情況。我不能告訴你QT做了什麼,但要在評論中回答你的問題:是的,應該可以找到包含或導入的XSD,而不必顯式加載它們。事實上,基於Xerces的解析器會這樣做。

讓我試着幫你顯示你的問題的結構簡單的例子:

SCHEMA.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是有效的,是的,但無效的,如果你改變了12;它發現所有需要的XSD都很好。但是,請注意,在XSD文件名,目錄,URL,命名空間等的規範中經常發生簡單的失誤。這就是爲什麼我建議您發佈實際的XSD(或修剪後的版本仍然存在問題)。我建議你嘗試一下上面的文件,看看QT是否可以找到所有這些XSD。如果可以的話,那麼你就知道專注於你對xs:includexs:import陳述的特定使用。評論你是否有任何後續行動。希望這可以幫助。