2011-06-26 112 views
5

我得到了一個簡單的XML文件,我想根據XSD進行驗證。 當我和一些隨機的驗證驗證,我總是得到以下錯誤:在針對XSD驗證XML時出錯

Invalid content was found starting with element 'Entities'. One of '{Entities}' is expected.

這裏的XML:

<BusinessModel xmlns="http://schemas.testxyzxyz.de/xyz/BusinessModel" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<Entities> 
    <Entity Name="Customer"> 
     <Attribute Name="Forename" Type="String" /> 
     <Attribute Name="Surname" Type="String" /> 
     <Attribute Name="Birthday" Type="Date" /> 
    </Entity> 
</Entities> 
</BusinessModel> 

還有XSD:

<?xml version="1.0"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     targetNamespace="http://schemas.testxyzxyz.de/xyz/BusinessModel" 
     xmlns="http://schemas.testxyzxyz.de/xyz/BusinessModel"> 

<xsd:element name="BusinessModel" type="BusinessModelType" /> 

<xsd:complexType name="BusinessModelType"> 
    <xsd:choice minOccurs="0" maxOccurs="unbounded"> 
     <xsd:element name="Entities" type="EntitiesType" /> 
    </xsd:choice> 
</xsd:complexType> 

<xsd:complexType name="EntitiesType"> 
    <xsd:sequence> 
     <xsd:element name="Entity" type="EntityType" maxOccurs="unbounded" /> 
    </xsd:sequence> 
</xsd:complexType> 

<xsd:complexType name="AttributeType"> 
    <xsd:attribute name="Name" type="xsd:string" use="required" /> 
    <xsd:attribute name="Type" type="xsd:string" use="required" /> 
</xsd:complexType> 

<xsd:complexType name="EntityType"> 
    <xsd:sequence> 
     <xsd:element name="Attribute" type="AttributeType" maxOccurs="unbounded" minOccurs="1" /> 
    </xsd:sequence> 
     <xsd:attribute name="Name" type="xsd:string" use="required" /> 
</xsd:complexType> 
</xsd:schema> 

尋找那問題,因爲小時,我仍然沒有發現一個錯誤。你能發現我正確的方向嗎? )

回答

3

XML Representation of Element Declaration Schema Components

{target namespace}

If form is present and its actual value is qualified , or if form is absent and the actual value of elementFormDefault on the <schema> ancestor is qualified , then the actual value of the targetNamespace [attribute] of the parent <schema> element information item, or absent if there is none, otherwise absent.

由於elemeFormDefault的默認值是unqualified,除非另有指定的本地元素必須是不合格的。

由於您設置了xmlns="http://schemas.testxyzxyz.de/xyz/BusinessModel",因此Entities已合格。 解決的辦法是設置elementFormDefault="qualified" @polishchuk寫道。

+0

謝謝,解決了這個問題:) –

0

嘗試這種架構:

<?xml version="1.0"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://schemas.testxyzxyz.de/xyz/BusinessModel" xmlns:b="http://schemas.testxyzxyz.de/xyz/BusinessModel"> 
    <xsd:element name="BusinessModel" type="b:BusinessModelType" /> 
    <xsd:complexType name="BusinessModelType"> 
    <xsd:choice minOccurs="0" maxOccurs="unbounded"> 
     <xsd:element name="Entities" type="b:EntitiesType" /> 
    </xsd:choice> 
    </xsd:complexType> 
    <xsd:complexType name="EntitiesType"> 
    <xsd:sequence> 
     <xsd:element name="Entity" type="b:EntityType" maxOccurs="unbounded" /> 
    </xsd:sequence> 
    </xsd:complexType> 
    <xsd:complexType name="AttributeType"> 
    <xsd:attribute name="Name" type="xsd:string" use="required" /> 
    <xsd:attribute name="Type" type="xsd:string" use="required" /> 
    </xsd:complexType> 
    <xsd:complexType name="EntityType"> 
    <xsd:sequence> 
     <xsd:element name="Attribute" type="b:AttributeType" maxOccurs="unbounded" minOccurs="1" /> 
    </xsd:sequence> 
    <xsd:attribute name="Name" type="xsd:string" use="required" /> 
    </xsd:complexType> 
</xsd:schema>