Xsd验证错误

时间:2012-05-09 11:53:12

标签: java xml xsd validation

我遇到嵌套xsd文件的问题。我有这3个文件:Company.xsd Product.xsd和Person.xsd。

Company.xsd

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.company.org"
        xmlns="http://www.company.org"
        elementFormDefault="qualified">

<xsd:include schemaLocation="Person.xsd"/>
<xsd:include schemaLocation="Product.xsd"/>

<xsd:element name="Company">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="Person" type="PersonType" 
                         maxOccurs="unbounded"/>
            <xsd:element name="Product" type="ProductType"
                         maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>  

Product.xsd

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified">

<xsd:complexType name="ProductType">
    <xsd:sequence>
       <xsd:element name="Type" type="xsd:string"/>
    </xsd:sequence>
</xsd:complexType>   
</xsd:schema>

Person.xsd

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified">

<xsd:complexType name="PersonType">
    <xsd:sequence>
       <xsd:element name="Name" type="xsd:string"/>
       <xsd:element name="SSN" type="xsd:string"/>
    </xsd:sequence>
</xsd:complexType>   
</xsd:schema>

我尝试验证这个简单的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<Company>
<Person>
    <Name>Test</Name>
    <SSN>test</SSN>
</Person>
<Product>
    <name>Test</name>
</Product>
</Company>

但我有这个错误:cvc-elt.1:找不到元素'公司'的声明。

你知道为什么吗?

有人能帮帮我吗?

3 个答案:

答案 0 :(得分:1)

您需要包含命名空间:

<Company xmlns="http://www.company.org">
... <!-- rest of XML --->

您的XML中也存在一些错误,但是一旦您从验证器获得更合理的输出,它就应该足够简单来修复它们。

答案 1 :(得分:1)

首先,您的测试XML存在错误。这样:

<Product>
   <name>Test</name>
</Product>

应该是

<Product>
   <Type>Test</Type>
</Product>

此外,您的XML标记缺少名称空间声明。如果没有名称空间声明,则假定标记根本不属于任何名称空间。由于您的模式将标记放在特定的命名空间中(使用URI http://www.company.org),因此如果XML能够验证,您的XML需要执行相同的操作。

例如,您可以在<Company>标记中执行此操作:

<?xml version="1.0" encoding="UTF-8"?>

<Company xmlns="http://www.company.org">
   ....
</Company>

在此之后,一切都验证正常。

答案 2 :(得分:0)

This example将向您展示如何使用JAXP解析根据您的XSD架构验证XML文件。