【问题标题】:XInclude usage and xsi:noNamespaceSchemaLocation limitation, workaround?XInclude 用法和 xsi:noNamespaceSchemaLocation 限制,解决方法?
【发布时间】:2012-12-07 11:17:19
【问题描述】:

首先,感谢您的宽容,我是 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>

转换器/transducer.xml

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

我没有放置transducers.xsd 文件,因为它不再为问题提供附加值。只要考虑到transducer.xml 对他的架构是有效的。

所以,当我尝试验证 parameters.xml 时,出现以下错误:

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

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

在这种情况下会有什么解决方案。谢谢。

【问题讨论】:

    标签: xml xsd xinclude


    【解决方案1】:

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

    【讨论】:

    • 不使用 xsi:schemaLocation 意味着不使用模式,对吗?除了我想使用 XML Schema 生成 C++ 绑定类来访问我的数据...
    • 不,这并不意味着不使用模式。它只是意味着使用其他方式告诉验证器在哪里获取模式。大多数命令行工具都提供了用于指定要查阅的模式文件的命令行参数;大多数 API 提供用于指定模式位置的调用选项。使用它们。
    • 现在我正在使用 XMLSpy 来验证我的文件,请您推荐一种可以实现您所描述的验证器工具。
    • 好吧,我最了解的是我自己的——撒克逊人。这允许您从命令行或 Java(或 .NET)应用程序调用验证。您可以将要使用的架构和源文档指定为单独的参数。
    猜你喜欢
    • 1970-01-01
    • 2016-09-03
    • 2018-06-25
    • 2019-06-02
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多