XInclude用法和xsi:noNamespaceSchemaLocation限制,解决方法?

时间:2012-12-07 11:17:19

标签: xml xsd xinclude

首先,谢谢你的放纵,我是一个XML Schema初学者。

我使用XInclude构建了一个包含多个包含的XML文件。我选择了这种方法,因为每个包含的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>

parameters.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>

Tranducers / transducer.xml

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

我没有放置sensorscers.xsd文件,因为它不会给问题增加任何附加值。请注意,transducer.xml对他的架构有效。

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

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

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

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

1 个答案:

答案 0 :(得分:1)

棘手的一个;我的方法是不使用xsi:schemaLocation。我一直认为这是假的 - 如果你不相信XML文件是有效的,你为什么要相信它告诉你在哪里找到它的架构?