X包括用法和xsi:noNamespaceSchemaLocation限制,解决方法



首先,感谢您的宽容,我是XML模式的初学者。

我使用XInclude构建了一个XML文件,该文件分为几个include。我之所以选择这种方法,是因为包含的每个XML文件都可以独立验证。

由于我正在处理本地文件,所以我没有定义任何命名空间,然后我使用xsi:noNamespaceSchemaLocation属性来引用我的xsd文件。

parameters.xml

<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="parameters.xsd">
<xi:include href="./Transducers/transducers.xml" parse="xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
</Root>

参数.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:include schemaLocation="./Transducers/transducers.xsd"/>
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element ref="Transducers" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

转换器/转换器.xml

<?xml version="1.0" encoding="UTF-8"?>
<Transducers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./transducers.xsd">
...
</Transducers>

我不放transducers.xd文件,因为它不再给问题带来附加值。只需考虑transducer.xml对他的模式是有效的。

因此,当我尝试验证parameters.xml时,我得到了以下错误:

"noNamespaceSchemaLocation"属性引用的架构的目标命名空间已用于验证

错误我很容易理解,但在我的情况下我无法回避。

在这种情况下,解决方案是什么。谢谢

小把戏;我的方法是不使用xsi:schemaLocation。无论如何,我一直认为它是假的——如果你不相信XML文件是有效的,为什么要相信它会告诉你在哪里可以找到它的模式?

相关内容

  • 没有找到相关文章

最新更新