# einfaches Problem XML + XSD + jedit



## ernst (18. Jan 2013)

Hallo allerseits,
1)
hoffentlich bin ich im richtigen Forum.
Ich versuche gerade etwas mit xml und xsd zu experimentieren.
Ich habe eine einfache Datei musik3.xml und will sie gegen die Datei musik3.xsd validieren.
Eigentlich müsste es bei der Validierung eine Fehlermeldung geben, da der Tag
<schrott> nicht in der Datei musik3.xsd definiert wurde.
Aber es gibt diese Fehlermeldung nicht!
Warum ?

Hier meine Vorgehensweise:
2)
Ich habe dies im Editor  jedit wie folgt gemacht:
Plugins --> XML --> set Schema:
Dort habe ich musik3.xsd ausgewählt.
Dann habe ich folgendes gemacht:
Plugins --> XML --> parse as XML
Dann wird ein Fenster mit Namen "Sidekick" geöffnet und so eine Art der folgenden Ordnerstruktur angezeigt:
(was auffällt: ganz unten fehlt <PRICE>)
---------------------------------------
<SONGS>
  <SONG>
    <schrott>
    <TITLE>
    <COMPOSER>
    <PRODUCER>
    <PUBLISHER>
    <LENGTH>
    <YEAR>
    <ARTIST>
    <PRICE>

  <SONG>
    <TITLE>
    <COMPOSER>
    <PRODUCER>
    <PUBLISHER>
    <LENGTH>
    <YEAR>
    <ARTIST>
---------------------------------------


3) Die Inhalte der Dateien

a) Inhalt der Datei musik3.xml:
-----------------------------------------------------
<?xml version="1.0"?>
<SONGS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="musik3.xsd">

  <SONG>
    <schrott>teste</schrott>
    <TITLE>Yes I Am</TITLE>
    <COMPOSER>Melissa Etheridge</COMPOSER>
    <PRODUCER>Hugh Padgham</PRODUCER>
    <PUBLISHER>Island Records</PUBLISHER>
    <LENGTH>4:24</LENGTH>
    <YEAR>1993</YEAR>
    <ARTIST>Melissa Etheridge</ARTIST>
    <PRICE>$1.25</PRICE>
  </SONG>

  <SONG>
    <TITLE>x1</TITLE>
    <COMPOSER>x2</COMPOSER>
    <PRODUCER>x3</PRODUCER>
    <PUBLISHER>x4</PUBLISHER>
    <LENGTH>4:12</LENGTH>
    <YEAR>1978</YEAR>
    <ARTIST><Nobody</ARTIST>
    <PRICE>$0.00</PRICE>
  </SONG>

</SONGS>
-----------------------------------------------------


b) Inhalt der Datei musik3.xsd:
-----------------------------------------------------
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.note.org"
elementFormDefault="qualified">


<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"  

  <xsd:element name="SONGS" type="SongTypes"/>
  <xsd:complexType name="SongType">
  <xsd:complexType name="SongType">
    <xsd:sequence>
      <xsd:element name="SONG" type="xsd:SongTypes"/>
    </xsd:sequence>
  </xsd:complexType>


  <xsd:element name="SONG" type="SongType" minOccurs="0" maxOccurs="10"/>
  <xsd:complexType name="SongType">
    <xsd:sequence>
      <xsd:element name="TITLE" type="xsd:string"/>
      <xsd:element name="COMPOSER" type="xsd:string"/>
      <xsd:element name="PRODUCER" type="xsd:string"/>
      <xsd:element name="PUBLISHER" type="xsd:string"/>
      <xsd:element name="LENGTH" type="xsd:string"/>
      <xsd:element name="YEAR" type="xsd:string"/>
      <xsd:element name="ARTIST" type="xsd:string"/>
      <xsd:element name="PRICE" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>

</xsd:schema>
-----------------------------------------------------


mfg
ernst


----------



## nillehammer (18. Jan 2013)

Das von Dir gepostete Schema ist schon an mehreren Stellen fehlerhaft (schema-Element kommt zwei Mal vor, davon einmal nicht mal vollständig, name="SongType" kommt zwei Mal vor, davon einmal nicht geschlossen...). Es kann so garnicht für eine Validierung genutzt werden.

P.S. Und beim Posten von Quellcode, nutze bitte den entsprechenden Tag, bzw. das entspr. Symbol über der Textbox und rücke ein wenig ein. Bei XML sieht das dann so aus:
[XML]
<SONG>
  <schrott>teste</schrott>
  <TITLE>Yes I Am</TITLE>
  <COMPOSER>Melissa Etheridge</COMPOSER>
  <PRODUCER>Hugh Padgham</PRODUCER>
  <PUBLISHER>Island Records</PUBLISHER>
  <LENGTH>4:24</LENGTH>
  <YEAR>1993</YEAR>
  <ARTIST>Melissa Etheridge</ARTIST>
  <PRICE>$1.25</PRICE>
</SONG>
[/XML]
So hat man wenigstens eine Chance, Deine Fehler zu finden.


----------



## ernst (19. Jan 2013)

nillehammer hat gesagt.:


> P.S. Und beim Posten von Quellcode, nutze bitte den entsprechenden Tag, bzw. das entspr. Symbol über der Textbox und rücke ein wenig ein. Bei XML sieht das dann so aus:


-------------------------------------------------------------------------------
Danke für dein feedback.
1)
Habe jetzt herausgefunden, wie man die Fehlermeldungen bekommt:
Plugins --> ErrorList

2)
Habe jetzt die 2 Dateien wie folgt abgeändert (und jetzt gibt es keine Fehlermeldungen mehr):
Datei musik1.xml
[XML]
<?xml version="1.0"?>
<SONG xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="C:\xml\musik1.xsd">

  <TITLE>Yes I Am</ TITLE>
  <COMPOSER>Melissa Etheridge</COMPOSER>
  <PRODUCER>Hugh Padgham</PRODUCER>
  <PUBLISHER>Island Records</PUBLISHER>
  <LENGTH>4:24</LENGTH>
  <YEAR>1993</YEAR>
  <ARTIST>Melissa Etheridge</ARTIST>
  <PRICE>$1.25</PRICE>
</SONG>
[/XML]

Datei musik1.xsd
Bem: Da hier in diesem Forum die optische  Darstellung mit [XSD] und [/XSD]
nicht funktioniert benutze ich fälschlicherweise [XML]

[XML]
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.note.org"
elementFormDefault="qualified">
  <xs:element name="SONG" type="SongType"/>
  <xs:complexType name="SongType">
    <xs:sequence>
      <xs:element name="TITLE" type="xs:string"/>
      <xs:element name="COMPOSER" type="xs:string"/>
      <xs:element name="PRODUCER" type="xs:string"/>
      <xs:element name="PUBLISHER" type="xs:string"/>
      <xs:element name="LENGTH" type="xs:string"/>
      <xs:element name="YEAR" type="xs:string"/>
      <xs:element name="ARTIST" type="xs:string"/>
      <xs:element name="PRICE" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>
[/XML]

3)
Frage1:
Oben habe ich in der xml-Datei den Verweis auf die xsd-Datei gemacht mit:
xsi:noNamespaceSchemaLocation="C:\xml\musik1.xsd">

Da bei mir die Dateien C:\xml\musik1.xml und C:\xml\musik1.xsd im gleichen Verzeichnis stehen,
habe ich gedacht, dass ich statt
xsi:noNamespaceSchemaLocation="C:\xml\musik1.xsd">
auch
xsi:noNamespaceSchemaLocation="musik1.xsd">
schreiben kann.
Leider bekomme ich da die Fehlermeldung:
"Das System kann die angegebe Datei nicht finden."
Ich will mir die Schreibweise des absoluten Pfades ersparen. 
Weisst du wie das geht ?

Frage2:
Wenn ich in der Datei musik1.xsd das Präfix xs überall durch 
xsd ersetze, gibt es eine Fehlermeldung.
Ich habe aber irgendwo mal gelesen, dass man statt xs auch xsd verwenden 
kann. Stimmt das ?

mfg
ernst


----------

