java - 尽管有正确的命名空间声明,我的 XSD 仍不验证 XML

标签 java xml validation namespaces xsd

XSD <schema>标签:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns="http://www.cmu.edu/ns/blank"
    targetNamespace="http://www.cmu.edu/ns/blank"
    elementFormDefault="qualified"> 

XML 的根,<people>标签。

<people
    xmlns="http://www.cmu.edu/ns/blank"
    xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.cmu.edu/ns/blank student.xsd">   

我怎么会遇到这样的错误:

cvc-elt.1.a: Cannot find the declaration of element 'people'  

我知道它与命名空间有关,但我不知道是什么。

请帮忙

XML

<?xml version="1.0" encoding="UTF-8" ?>
<!-- <!DOCTYPE people SYSTEM "validator.dtd"> -->


    <people
        xmlns="http://www.cmu.edu/ns/blank"
        xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.cmu.edu/ns/blank student.xsd"> 

        <student>
            <name>John</name>
            <course>Computer Technology</course>
            <semester>6</semester>
            <scheme>E</scheme>
        </student>

        <student>
            <name>Foo</name>
            <course>Industrial Electronics</course>
            <semester>6</semester>
            <scheme>E</scheme>
        </student>
    </people>  

XSD

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns="http://www.cmu.edu/ns/blank"
        targetNamespace="http://www.cmu.edu/ns/blank"
        elementFormDefault="qualified">
    <xs:element name="people">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="student" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="name" type="xs:string" />
                            <xs:element name="course" type="xs:string" />
                            <xs:element name="semester">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:enumeration value="1" />
                                        <xs:enumeration value="2" />
                                        <xs:enumeration value="3" />
                                        <xs:enumeration value="4" />
                                        <xs:enumeration value="5" />
                                        <xs:enumeration value="6" />
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="scheme">
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:pattern value = "E|C" />
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

最佳答案

唯一不起作用的是架构位置属性的命名空间。 XML 模式实例命名空间是:

http://www.w3.org/2001/XMLSchema-instance

而不是:

http://www.w3c.org/2001/XMLSchema-instance(您在w3c中放入c)

对于给定的 XML,错误是

未声明“http://www.w3c.org/2001/XMLSchema-instance:schemaLocation”属性。

关于java - 尽管有正确的命名空间声明,我的 XSD 仍不验证 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16480020/

相关文章:

java - HBase:通过 Java API 截断表启用表截断

c# - Nhibernate 非空属性引用空值或 transient 值 Tec.Core.Model.Budget.oInvestmentCode

android - 不使用 ViewPager 的 TabLayout

javascript - 表单控件不可聚焦

delphi - 使用 TryStrToDate 对日期进行特定验证

forms - Laravel 5 上表单和模型之间数据验证的最佳方法是什么?

java - 从一个 Realm 异步复制到另一个 Realm

java - 使用类级别字段或方法变量?

java - Objects::nonNull 和 x -> x != null 之间有什么区别吗?

xml - 使用 ncml 聚合 netcdf 文件?