XSD验证错误:cvc-complex-type.2.4.a:找到以元素' first_name'开头的无效内容。其中一个{first_name}'是期待

时间:2015-03-04 12:17:02

标签: xml validation xsd schema

我构建了以下('Person.xsd')XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="urn:person.com.test"
           xmlns="urn:person.com.test">
    <xs:element name="person" type="Person" />
    <xs:complexType name="Person">
                    <xs:sequence>
                        <xs:element name="first_name" type="xs:string" />
                        <xs:element name="last_name" type="xs:string"/>
                    </xs:sequence>
    </xs:complexType>   
</xs:schema>

以下XML文档('Person.xml'):

<?xml version="1.0"?>
<person 
    xmlns="urn:person.com.test"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="urn:person.com.test person.xsd" >
    <first_name>Joe</first_name>
        <last_name>Bloggs</last_name>
</person>

但是当我验证XML时(我使用的是Netbeans 8.x,但我尝试过的其他验证器给出了非常相似的结果);我得到以下无益的消息:

XML validation started.
Checking file:[...]/validator/src/main/resources/person.xml...
Referenced entity at "file:[...]/validator/src/main/resources/person.xsd".
cvc-complex-type.2.4.a: Invalid content was found starting with element 'first_name'. One of '{first_name}' is expected. [7] 
XML validation finished.

编辑:结果我在这里对'targetnamespace'和其他东西的含义有一些误解。

接受的答案有效 - 但是@Ian Roberts指出(事实上这可能是另一篇文章的真实副本),'first_name'和'last_name'是('person'元素的子元素)仍然(由于某种原因)被视为根本没有名称空间。

无论如何:我已经像这样通过XML和XSD进行了修改 - 而且这很有效 - 而且我相信这里的元素是所有人(这就是我需要的)所有这些都在person.com.test命名空间中:

<?xml version="1.0"?>
<p:person 
    xmlns:p="urn:person.com.test"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="urn:person.com.test person.xsd" >
    <p:first_name>Joe</p:first_name>
        <p:last_name>Bloggs</p:last_name>
</p:person>

这个ALSO实际上是这样的:(原始XML)

<person 
    xmlns="urn:person.com.test"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="urn:person.com.test person.xsd" >
    <first_name>Joe</first_name>
        <last_name>Bloggs</last_name>
</person>

只要XSD中包含elementFormDefault =“qualified”指令。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="urn:person.com.test"
           xmlns="urn:person.com.test"
           elementFormDefault="qualified">

    <xs:element name="person" type="Person" />

    <xs:complexType name="Person">
        <xs:sequence>
                        <xs:element name="first_name" type="xs:string" />
                        <xs:element name="last_name" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>   
</xs:schema>

1 个答案:

答案 0 :(得分:1)

声明名称空间xmlns:prefix="urn:person.com.test"

的前缀
<?xml version="1.0"?>
<prefix:person  xmlns:prefix="urn:person.com.test"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="urn:person.com.test person.xsd" >
    <first_name>Joe</first_name>
    <last_name>Bloggs</last_name>
</prefix:person>

我通过XMLSpear验证