2012-05-09 158 views
0

我有一個嵌套的xsd文件的問題。我有這3個文件:Company.xsd Product.xsd和Person.xsd。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:找不到元素'Company'的聲明。

你知道爲什麼嗎?

有人能幫助我嗎?

回答

1

您需要包括命名空間:

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

也有一些錯誤,在你的XML,但它應該是足夠簡單,以解決這些問題,一旦你得到從驗證更明智的輸出。

+0

好tnk回覆,但我的問題沒有解決,因爲我不想指定標籤內的xmlns。在這種情況下,我可以如何體驗XSD架構? – Asp1de

+0

爲什麼你不想指定命名空間?您可以控制哪部分,XSD,XML或兩者? – artbristol

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> 

在此之後,一切都驗證罰款。

0

This example將向您展示如何使用JAXP解析根據您的XSD架構驗證XML文件。