QXmlSchema 找不到链接的文件



我有一个关于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编辑器能够找到链接的文件!

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

由于您在评论中提到无法发布 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>

答.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语句的特定使用。 如果您有任何后续行动,请发表评论。 希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新