Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Funktion und Sinn von XML Schemata (https://www.delphipraxis.net/108925-funktion-und-sinn-von-xml-schemata.html)

Luckie 21. Feb 2008 10:33


Funktion und Sinn von XML Schemata
 
Ich beschäftige mich gerade auf Geheiß meines Chefs mit XML Schemata. Mein Problem ist ein grundlegendes Verständnisproblem auf dass ich bisher noch keine Antwort gefunden habe. Alles, was ich bisher gefunden habe, bezog sich auf die Erstellung von XML Schemata, aber mein Problem ist:

Was sind XML Schemata?
Wozu benötigt man sie? Wann setzt man sie ein?
Wie funktionieren XML Schemata mit XML-Dateien zusammen?

API 21. Feb 2008 10:42

Re: Funktion und Sinn von XML Schemata
 
Schon mal http://de.wikipedia.org/wiki/XML_Schema durchgelesen?

Luckie 21. Feb 2008 10:47

Re: Funktion und Sinn von XML Schemata
 
Ja, aber wie gesagt, das
Zitat:

XML Schema ist eine Empfehlung des W3C zum Definieren von XML-Dokumentstrukturen. Anders als bei den klassischen XML-DTDs wird die Struktur in Form eines XML-Dokuments beschrieben. Darüber hinaus wird eine große Anzahl von Datentypen unterstützt.
und das
Zitat:

XML Schema ist eine komplexe Schemasprache zur Beschreibung eines XML-Typsystems. Dieses XML-Typsystem umfasst die Spezifikation neuer XML-Elemente, deren Attribute, sowie deren Kindelemente. Im Gegensatz zu DTDs kann bei Verwendung von XML Schema zwischen dem Namen des XML-Typs und dem in der Instanz verwendeten XML-Tagnamen unterschieden werden.

Vermutlich werden DTDs irgendwann vollständig von XML-Schemata abgelöst. Allerdings sind XML-Schemata durch ihre erweiterten Möglichkeiten wesentlich komplexer und nicht so einfach ohne Hilfsmittel auszuwerten. Neben XML Schema existieren weitere Ansätze zur Definition von XML-Strukturen. Ein konkretes XML-Schema wird auch als eine XSD (XML-Schema-Definition) bezeichnet und hat üblicherweise die Dateiendung ".xsd".
Hilft mir nicht wirklich weiter, weil es meine Fragen zum grundlegenden Verständnis nicht beantwortet. Oder wenn es der Text doch tut, dann verstehe ich es nicht.

Ich bräuchte einfach eine Antwort, wie:
"Ein XML-Schema macht das und das. Und man braucht es dafür. Und es kann hier sinnvoll eingesetzt werden."

Das will ich wissen. ;)

franktron 21. Feb 2008 11:00

Re: Funktion und Sinn von XML Schemata
 
So schwer ist das gar nicht ein XML Schema beschreibt was alles in der XML möglich ist und ist primär dafür da um zu überprüfen ob eine XML Konform ist.

Ich hab die Schemas bis jetzt auch nur als Beschreibung der Felder in der XML gesehen um eine XML zu lesen und zu schreiben (Schnnittsstellenbeschreibung)

Luckie 21. Feb 2008 11:08

Re: Funktion und Sinn von XML Schemata
 
Zitat:

Zitat von franktron
als Beschreibung der Felder in der XML gesehen um eine XML zu lesen und zu schreiben (Schnnittsstellenbeschreibung)

Genau das ist ein Punkt den ich nicht verstehe. Ich lege fest, welche Knoten und Attribute in einer XML-Datei vorkommen dürfen. Aber was oder wer hindert mich daran nicht definierte Knoten hinzuzufügen? Wie kann ich eine XML-Datei mittels eines Schemas validieren?

shmia 21. Feb 2008 11:10

Re: Funktion und Sinn von XML Schemata
 
Zitat:

Zitat von Luckie
"Ein XML-Schema macht das und das. Und man braucht es dafür. Und es kann hier sinnvoll eingesetzt werden."

Ein Schema sorgt dafür, dass XML - Daten überprüft werden können ob sie ein bestimmte vereinbarte Struktur haben.
Beispiel: folgende Struktur wurde vereinbart:
XML-Code:
<Verlag>
  <Author> ... <Author/>
  <Author> ... <Author/>
<Verlag/>
Also das Element <Author> muss unterhalb des <Element> Verlag auftauchen und darf beliebig oft erscheinen.
Würde jetzt folgende XML-Datei auftauchen:
XML-Code:
<Verlag>
  <Author>
    <Verlag> ... <Verlag/>
  <Author/>
  <Author> ... <Author/>
<Verlag/>
dann kann man mit einem Schema sofort entscheiden "das ist falsch, <Verlag> darf nicht unter <Author> auftauchen" !
Ein Schema geht aber noch wesentlich weiter; so kann z.B. definiert werden, welchen Inhalt die Element haben dürfen (String, Integer, float, boolean, GUID,...)

Luckie 21. Feb 2008 11:16

Re: Funktion und Sinn von XML Schemata
 
Ah, ja. Das hilft mir schon mal sehr viel weiter in meinem Verständnis. Un dich nehme an diese Überprüfung kann man auch programmiertechnisch machen, in dem man eine XML-Datei läd und ein XML Schema vorgibt?

MathiasSimmack 21. Feb 2008 11:20

Re: Funktion und Sinn von XML Schemata
 
Als Beispiel kannst dir ja mal die XML- und XSL-Datei angucken, die bei der Registrierung der Tutorials-Hilfedokumente im Zielordner liegen. Ist das gleiche Prinzip. Das Tool wertet die XML-Datei mit Hilfe der XSL aus, und sollte irgendwas nicht passen, meldet sich der Parser unter Angabe des Fehlers usw.


btw, die Antwort auf deine Frage ist Ja. Bei Bedarf suche ich die Schnippsel aus dem CSharp- und/oder Delphitool raus.

Luckie 21. Feb 2008 11:25

Re: Funktion und Sinn von XML Schemata
 
CSharp wäre nicht schlecht, weil ich es auch für C# dann bräuchte. Danke schon mal für eure Mühe.

Khabarakh 21. Feb 2008 11:28

Re: Funktion und Sinn von XML Schemata
 
Ist auch ziemlich nützlich, wenn man XML, für das man ein Schema besitzt, von Hand schreiben will: Mit einem brauchbaren Editor muss man nicht mehr für jedes Element in der Doku nachschauen, welche Attribute und Unterelemente erlaubt sind, per Intellisense schreibt sich das Dokument in einem Fluss.
Wenn XML nur zum Austausch von Daten zwischen zwei Programmen benutzt wird, könnten sich diese natürlich auch "privat" über die Struktur einigen, im Sinne von "Aha, ein Element A, das muss ein Element B als Child haben, denn so ist der Exporter eben programmiert". Ein XSD ist einfach eine öffentliche, formelle Formulierung dieser Übereinkunft, was besonders Drittanbietern die Arbeit erleichtert.
Zitat:

Zitat von Luckie
Un dich nehme an diese Überprüfung kann man auch programmiertechnisch machen, in dem man eine XML-Datei läd und ein XML Schema vorgibt?

Es gibt auch Tools (zum Bleistift für .Net :zwinker:), die aus einem Schema eine entsprechende Klassenhierarchie (also Code) erstellen und umgekehrt. Imho übelst genial, damit wird die Arbeit mit XML leichter als mit jeder Ini- oder CSV-Datei.

madas 21. Feb 2008 11:31

Re: Funktion und Sinn von XML Schemata
 
Zitat:

Zitat von Luckie
CSharp wäre nicht schlecht, weil ich es auch für C# dann bräuchte. Danke schon mal für eure Mühe.

Link

Luckie 21. Feb 2008 11:31

Re: Funktion und Sinn von XML Schemata
 
Zitat:

Zitat von Khabarakh
Es gibt auch Tools (zum Bleistift für .Net :zwinker:), die aus einem Schema eine entsprechende Klassenhierarchie (also Code) erstellen und umgekehrt. Imho übelst genial, damit wird die Arbeit mit XML leichter als mit jeder Ini- oder CSV-Datei.

Kannst du ein paar solcher Tools empfehlen?

Dax 21. Feb 2008 11:50

Re: Funktion und Sinn von XML Schemata
 
Zitat:

Zitat von Luckie
Kannst du ein paar solcher Tools empfehlen?

xsd.exe ;) Das ist in jedem .net-SDK enthalten.

Luckie 21. Feb 2008 12:37

Re: Funktion und Sinn von XML Schemata
 
[quote="shmia"]
Zitat:

Zitat von Luckie
Beispiel: folgende Struktur wurde vereinbart:
XML-Code:
<Verlag>
  <Author> ... <Author/>
  <Author> ... <Author/>
<Verlag/>
Also das Element <Author> muss unterhalb des <Element> Verlag auftauchen und darf beliebig oft erscheinen.
Würde jetzt folgende XML-Datei auftauchen:
XML-Code:
<Verlag>
  <Author>
    <Verlag> ... <Verlag/>
  <Author/>
  <Author> ... <Author/>
<Verlag/>

wie würden denn dazu die XML- und XSD-Dateien aussehen?

Ich habe es jetzt so probiert:
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema>
  <xs:element name="verlag">
  <xs:sequence>
    <xs:element name="autor" type="xs:string"/>
  </xs:sequence>
</xsd:schema>
Und
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<artikel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="verlag.xsd">
<verlag>
  <autor>Hans Peter</autor>
  <autor>Klaus Müller</autor>
</verlag>
Der Firefox gibt mir jedoch folgende Fehlermeldung aus:
Zitat:

Code:
XML-Verarbeitungsfehler: Kein Element gefunden
Adresse: file:///D:/~ressourcen/XMLSchema/demos/verlag.xml
Zeile Nr. 6, Spalte 10:
</verlag>
---------^


shmia 21. Feb 2008 13:08

Re: Funktion und Sinn von XML Schemata
 
Zitat:

Zitat von Luckie
wie würden denn dazu die XML- und XSD-Dateien aussehen?

Dein Entwurf sieht auf den 1. Blick richtig aus.
Es kommt aber (wie üblich beim Programmieren) auf die kleinen Details an.
Ich kann dir den XML-Editor XML PAD empfehlen.
Wenn eine XML-Datei mit einem Schema verknüpft ist, prüft dieser es und unterstützt dich beim editieren.
Wenn die XML-Datei nicht auf das Schema passt, gibt der Editor an wo das Problem besteht.

Luckie 21. Feb 2008 13:37

Re: Funktion und Sinn von XML Schemata
 
Danke, ich werde mal gucken, wie weit ich damit komme.

Luckie 21. Feb 2008 13:59

Re: Funktion und Sinn von XML Schemata
 
Update.

Ich habe es jetzt so:
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="verlag">
    <xs:sequence>
      <xs:element name="autor" type="xs:string"/>
    </xs:sequence>
  </xs:element>
</xs:schema>
Und
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<artikel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="verlag.xsd">
<verlag>
  <autor>Hans Peter</autor>
  <autor>Klaus Müller</autor>
</verlag>
Fehlermeldung von XMLPad lautet:
Zitat:

no element found
und zeigt auf das schliessende Verlag-Tag in der letzen Zeile.

Lord_Stifterl 21. Feb 2008 14:17

Re: Funktion und Sinn von XML Schemata
 
Hi Luckie,

ich hab in der zweiten Zeile (im <xs>-Tag) zusätzlich nach

XML-Code:
<xs: ... XMLSchema"
noch folgendes stehen

XML-Code:
elementFormDefault="qualified" attributeFormDefault="unqualified">
Das heisst, dein XML-Schema müsste dann eigentlich so aussehen

XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:element name="verlag">
    <xs:sequence>
      <xs:element name="autor" type="xs:string"/>
    </xs:sequence>
  </xs:element>
</xs:schema>
Versuch mal ob es dann funkt. Frag mich aber bitte nicht genau was diese zwei Attribute sein sollen, habs auch nur aus einer Vorlage.

LG
Alex

madas 21. Feb 2008 14:24

Re: Funktion und Sinn von XML Schemata
 
Laut Visual Studio sollte das Schema zur XML so aussehen:

XML:

XML-Code:
<?xml version="1.0" encoding="utf-8" ?>
<verlag>
  <autor>Hans Peter</autor>
  <autor>Klaus Müller</autor>
</verlag>
Schema:

XML-Code:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="verlag">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="autor" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Luckie 21. Feb 2008 15:00

Re: Funktion und Sinn von XML Schemata
 
So geht es:

XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<verlag xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="verlag.xsd">
  <autor>Hans Peter</autor>
  <autor>Klaus Müller</autor>
</verlag>
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="verlag">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="autor" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Luckie 22. Feb 2008 12:05

Re: Funktion und Sinn von XML Schemata
 
War Käse, was ich geschrieben habe.

Ich wollte das ganze jetzt etwas erweitern:
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<verlag xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="verlag02.xsd">
  <buch>
    <titel>Der Duden</titel>
    <autor>Dieter Duderich</autor>
    <erschdat>1987</erschdat>
    <isbn>3-86680-192-9</isbn>
  </buch>
  <buch>
    <titel>Pflanzen</titel>
    <autor>Paul Pflanzer</autor>
    <erschdat>1996</erschdat>
    <isbn>3-12656-189-9</isbn>
  </buch>
</verlag>
Dazu habe ich mir folgendes Schema erstellt:
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="verlag">
    <xs:sequence>
      <xs:complexType name="buch">
        <xs:sequence>
          <xs:element name="titel" type="xs:string"/>
          <xs:element name="autor" type="xs:string"/>
          <xs:element name="erschdat" type="xs:string"/>
          <xs:element name="isbn" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
    </xs:sequence>
  </xs:element>
</xs:schema>
In Zeile vier sagt er mir:
Zitat:

Encountered child was not expected
:gruebel:

So muss es aussehen:
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="ctbuch">
    <xs:sequence>
      <xs:element name="titel" type="xs:string"/>
      <xs:element name="autor" type="xs:string"/>
      <xs:element name="erschdat" type="xs:string"/>
      <xs:element name="isbn" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="verlag">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="buch" type="ctbuch" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
;)

Khabarakh 22. Feb 2008 13:12

Re: Funktion und Sinn von XML Schemata
 
Zitat:

Zitat von Luckie
Zitat:

Encountered child was not expected
:gruebel:

VS ist da ein _wenig_ ausführlicher :stupid: :
Zitat:

Warning The element 'element' in namespace 'http://www.w3.org/2001/XMLSchema' has invalid child element 'sequence' in namespace 'http://www.w3.org/2001/XMLSchema'. List of possible elements expected: 'annotation, simpleType, complexType, unique, key, keyref' in namespace 'http://www.w3.org/2001/XMLSchema'.
So funktioniert es auch ohne benannten complexType:
XML-Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="verlag">
      <xs:complexType>
         <xs:sequence>
            <xs:element name="buch" maxOccurs="unbounded">
               <xs:complexType>
                  <xs:sequence>
                     <xs:element name="titel" type="xs:string"/>
                     <xs:element name="autor" type="xs:string"/>
                     <xs:element name="erschdat" type="xs:string"/>
                     <xs:element name="isbn" type="xs:string"/>
                  </xs:sequence>
               </xs:complexType>
            </xs:element>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
</xs:schema>

Luckie 22. Feb 2008 13:39

Re: Funktion und Sinn von XML Schemata
 
Ah, danke. Wurde als alternative aufgenommen.

Elvis 22. Feb 2008 15:47

Re: Funktion und Sinn von XML Schemata
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Luckie
Ah, danke. Wurde als alternative aufgenommen.

Das VisualStudio hat einen ziemlich coolen XSD Designer.
Damit kannst du dir schnell mal ein Dokumentenformat zusammen klicken. Ich nutze das Ding schon seit Jahren . :-)
Du kannst auch einfach eine XML im studio öffnen und dir aus der XML ein XSD geneieren lassen, was du dann als Fundament nehmen kannst.
Ich habe mal Klarabellas (:mrgreen:) Version damit etwas aufgewertet:
XML-Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="www.luckie.de/BuchBleistift"
           xmlns:bv="www.luckie.de/BuchBleistift"
           elementFormDefault="qualified">
  <xs:element name="verlag">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="buch"
                    maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="titel"
                          type="xs:string" />
              <xs:element name="autor">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:minLength value="1" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
              <xs:element name="erschdat"
                          type="xs:date" />
              <xs:element name="isbn"
                          type="bv:isbnType">
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:simpleType name="isbnType">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{3}[-][0-9]{3}[-][0-9]{3}" />
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
Aber IMO sind da zu viele Elemente. Die ISBN und das Datum hätten Attribute sein können, Titel und Author eigentlich auch...
Und wer so dumme, abgekürzte Bezeichner wie "erschtdat" in ein wirkliches Schema packen würde (nicht wie hier einen Bleistift), gehört in den Knast... :shock:

Und zum Validieren in deinem Code kannst du dir mal die Klasse XmlSchemaSet ansehen.

Luckie 22. Feb 2008 20:15

Re: Funktion und Sinn von XML Schemata
 
Dank dir auch noch mal für deine Mühe, aber das kann XMLPad auch. ;) Aber gut, dass du das mit dem VS erwähnst. Dann kann ich jetzt schon zwei Programm erwähnen die man als Editoren nutzen kann. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz