无法验证导入的XSD

时间:2016-04-12 11:03:30

标签: java xml xsd xml-namespaces xsd-validation

我正在尝试针对在另一个XSD中导入的XSD验证我的XML。

请查看以下代码:

xml1.xml:

<e1 xmlns="n1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="n2 main.xsd">
</e1>

xsd1.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        targetNamespace="n1"
        elementFormDefault="qualified">
<xsd:element name="e1"/>
</xsd:schema>

main.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        targetNamespace="n2"
        elementFormDefault="qualified">

<xsd:import namespace = "n1" schemaLocation = "xsd1.xsd"/>
</xsd:schema>

验证xml1.xml(在带有xml工具的netbeans中或在java中)只会抛出:

cvc-elt.1: Cannot find the declaration of element 'e1'. [3] 

可能是什么问题?

1 个答案:

答案 0 :(得分:2)

您的xsi:schemaLocation模型需要调整。 不是包含语句 会自动将XSD带入范围;它是 提示 ,表示对于给定的命名空间,验证可能会找到合适的XSD。

当您声明xsi:schemaLocation="n2 main.xsd"时,您暗示要在main.xsd中查找n2命名空间,但您没有说明与您实际关联的n1命名空间根元素。验证遇到n1命名空间中的根元素,查询提示,找不到任何内容,让你知道:

cvc-elt.1: Cannot find the declaration of element 'e1'. [3] 

应该如此。您前进的路径很明确:为根元素的n1命名空间添加提示:

    xsi:schemaLocation="n2 main.xsd n1 xsd1.xsd"

,您的XML文档将成功验证。