2012-05-09 22 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ファイルを検証しよう
<?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 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はOKですが、TAG内にxmlnsを指定しないので、私の問題は解決しません。この場合、XSDスキーマをどのように変更できますか? – Asp1de

+0

なぜ名前空間を指定したくないのですか? XSD、XML、またはその両方の部分を制御できますか? – artbristol

1

まず、テストXMLにはエラーがあります。この:

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

はまた、あなたのXMLタグは名前空間宣言を欠いている

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

でなければなりません。名前空間宣言がなければ、タグは名前空間に全く属していないとみなされます。あなたのスキーマはタグを特定の名前空間(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ファイルを検証する方法を示します。