QXmlSchema找不到链接文件

时间:2013-10-16 13:02:37

标签: xml xsd qt5

我对QXmlSchema有疑问。该问题的基础是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编辑器能够找到链接的文件!

错误在哪里? 我是否必须以不同的方式加载架构? 我必须加载所有三个文件?

1 个答案:

答案 0 :(得分: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按原样有效,但如果您将1更改为2则无效;它找到了所有需要的XSD。但是,请注意,关于XSD文件名,目录,URL,命名空间等的规范经常会出现简单的错误。这就是为什么我建议您发布实际的XSD(或仍然存在问题的修剪版本)。我建议您尝试上述文件,看看QT是否可以找到所有这些XSD。如果可以,那么您将专注于您对xs:includexs:import语句的特定使用。评论您是否有任何后续行动。希望这会有所帮助。