2013-10-16 56 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陈述的特定使用。评论你是否有任何后续行动。希望这可以帮助。