0

我对嵌套的 xsd 文件有疑问。我有这 3 个文件:Company.xsd Product.xsd 和 Person.xsd。

公司.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>  

产品.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>

人物.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:找不到元素“公司”的声明。

你知道为什么吗??

有人能帮我吗??

4

3 回答 3

1

首先,您的测试 XML 有错误。这个:

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

应该

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

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

例如,您可以在<Company>标签中这样做:

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

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

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

于 2012-05-09T12:05:58.497 回答
1

您需要包含一个命名空间:

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

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

于 2012-05-09T12:03:59.837 回答
0

此示例将向您展示如何使用 JAXP 解析根据您的 XSD 模式来验证 XML 文件。

于 2012-07-20T11:16:17.997 回答