由于您在评论中提到您无法发布 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>
复杂类型.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>
简单类型.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:include
orxs:import
语句的特定用途。如果您有任何后续行动,请发表评论。希望这可以帮助。