2016-10-27 23 views
1

この質問は何度も尋ねられましたが、私の問題の解決策は見つかりませんでした。だから、エラーは次のとおりです。XSD検証エラー:要素 'xs:schema'の宣言が見つかりません

Error on line 2 of document file...doc.xsd: cvc-elt.1: Cannot find the declaration of element 'xs:schema'

XSDファイルのコード:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:element name="Collection" > 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="Description" type="xs:string"/> 
     <xs:element name="Recipe" minOccurs="0" maxOccurs="unbounded"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element name="Title" type="xs:string"/> 
        <xs:element name="Ingredients"> 
         <xs:complexType> 
          <xs:element name="Ingredient" minOccurs="0" maxOccurs="unbounded"> 
           <xs:complexType> 
            <xs:attribute name="name" type="xs:string" use="required"/> 
            <xs:attribute name="amount" type="xs:integer" use="required"/> 
            <xs:attribute name="unit" type="xs:string" use="required"/> 
           </xs:complexType> 
          </xs:element> 
         </xs:complexType> 
        </xs:element> 
        <xs:element name="Preparation"> 
         <xs:complexType> 
          <xs:element name="Step" type="xs:string minOccurs="0" maxOccurs="unbounded"/>" 
         </xs:complexType> 
        </xs:element> 
        <xs:element name="Comment" type="xs:string" minOccurs="0"/> 
        <xs:element name="Nutrients"> 
         <xs:complexType> 
          <xs:attribute name="proteins" type="xs:integer" use="required"/> 
          <xs:attribute name="carbohidrati" type="xs:NMTOKEN" use="required"/> 
          <xs:attribute name="fat" type="xs:integer" use="choice"/> 
          <xs:attribute name="vitamins" type="xs:NMTOKEN" use="required"/> 
          <xs:attribute name="calories" type="xs:float" use="required"/> 
         </xs:complexType> 
        </xs:element> 
       </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

XMLファイルのコード:

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

<Collection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="src/doc.xsd"> 
<Description>Nu prea merge</Description> 
<Recipe> 
<Title>Paste</Title> 
<Ingredients> 
    <Ingredient name="paste" amount="1" unit="pachet"></Ingredient> 
</Ingredients> 
<Preparation> 
    <Step>Fierbere</Step> 
    <Step>Servire</Step> 
</Preparation> 
<Nutrients proteins="2" carbohidrati="2" fat="da" vitamins="4" calories="1000.9"></Nutrients> 
</Recipe> 
</Collection> 

Javaでコードクラス:

import java.io.File; 
import java.io.IOException; 

import org.jdom2.Document; 
import org.jdom2.JDOMException; 
import org.jdom2.input.SAXBuilder; 
import org.jdom2.input.sax.XMLReaders; 
import org.jdom2.output.Format; 
import org.jdom2.output.XMLOutputter; 


public class Main { 
    public static void main(String[] args) { 
     File newFile = new File("src/doc.xsd"); 
     Document doc = null; 

     SAXBuilder sbd = new SAXBuilder(XMLReaders.XSDVALIDATING); 

     try { 

      doc = sbd.build(newFile); 
     } catch (JDOMException | IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     XMLOutputter outputDoc = new XMLOutputter(); 
     outputDoc.setFormat(Format.getPrettyFormat()); 
     try{ 
      outputDoc.output(doc,System.out); 
      //outputDoc.output(doc, new FileWriter("src/myXmlDoc2.xml")); 
     } 
     catch(Exception e){ 
      System.out.println("Eroare la parsarea documentului XML!"); 
     } 
} 

} 

誰かが考えられる問題について考えているなら、私を助けてください!

+0

あなたはXSDにタイプミスがあります。 – Andreas

+0

私はタイプミスを修正しましたが、それは問題ではありませんでした... – sixfeet

+0

その他のいくつかの問題があります... – kjhughes

答えて

2

次のように、あなたはあなたのXSDを変更する必要があり、あなたのXMLが固定されていると仮定すると:@Andreasで述べたように

  1. は余分な"を修正。
  2. xs:sequencexs:complexTypeの下に2箇所追加します。
  3. @fatのタイプをxs:stringに変更してください。
  4. use="choice"からuse="optional"に変更してください。全体で

、このXSDは正常にXMLを検証します:もちろん

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Collection" > 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Description" type="xs:string"/> 
     <xs:element name="Recipe" minOccurs="0" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Title" type="xs:string"/> 
       <xs:element name="Ingredients"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="Ingredient" minOccurs="0" maxOccurs="unbounded"> 
         <xs:complexType> 
         <xs:attribute name="name" type="xs:string" use="required"/> 
         <xs:attribute name="amount" type="xs:integer" use="required"/> 
         <xs:attribute name="unit" type="xs:string" use="required"/> 
         </xs:complexType> 
        </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
       <xs:element name="Preparation"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="Step" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
        </xs:sequence> 
       </xs:complexType> 
       </xs:element> 
       <xs:element name="Comment" type="xs:string" minOccurs="0"/> 
       <xs:element name="Nutrients"> 
       <xs:complexType> 
        <xs:attribute name="proteins" type="xs:integer" use="required"/> 
        <xs:attribute name="carbohidrati" type="xs:NMTOKEN" use="required"/> 
        <xs:attribute name="fat" type="xs:string" use="optional"/> 
        <xs:attribute name="vitamins" type="xs:NMTOKEN" use="required"/> 
        <xs:attribute name="calories" type="xs:float" use="required"/> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

を、また、あなたのJavaコードをチェックする必要があります。 (ヒント:あなたのXSDに対してあなたのXMLを本当に検証したいときにあなたのXSDをXMLとして検証していないことを確認してください)

+0

@sixfeet大部分のXSDをEclipseに貼り付けるだけで、すべてのエラーが表示されます(間違ったタイプの@feetを除いて) – Andreas

+0

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@? Andreas:Eclipse Lunaを使用しましたが、エラーは通知されませんでした。 – sixfeet

関連する問題