# Kann man XML direkt in DTD umwandeln?



## michaelhugel (18. Mrz 2021)

Hi, ich hab das letzte mal vor ca. 12 Jahren mit XML zutun gehabt und heute kam mein Chef auf die Idee, da ich ja nicht viel zutun habe, das ich es seinem Sohn erkläre. Weil ich es mal kurz im  Studium hatte. Jetzt meine frage, ich habe eine fertige XML und kann ich die automatisch in eine DTD umwandeln? ich kann es mir sonst nur noch grob vorstellen wie es funktionionierte. Ich denk das ist eigentlich ziemlich einfach, aber wenn man da 12 Jahre nix mit am Hut hatte...

Also ganz grob geht es um ein Rezept, mit mehreren definierten zutaten und eine zubereitungsanleitung

Wenn die XML so aussieht:

<?xml version="1.0" encoding="UTF-8"?>
  <title>Pfannkuchen</title>
<zutaten>
<zutat>
<menge einheit="g">500</menge> <art>Mehl</art>
</zutat>
<zutat>
<menge einheit="g">120</menge> <art>Zucker</art>
</zutat>
<zutat>
<menge>6</menge> <art>Eier</art>
</zutat>
<zutat>
<menge einheit="Prise">1</menge> <art>Salz</art>
</zutat>
<zutat>
<menge einheit="l">1/2</menge> <art>Milch</art>
</zutat>
<zutat>
<menge einheit="g">120</menge> <art>Butter</art>
</zutat>
</zutaten>
<zubereitung>
<schritt>Mehl, Zucker, Salz und die Eier verrühren.</schritt>
<schritt>Die Milch langsam dazugeben, so dass keine Klümpchen
entstehen.</schritt>
<schritt>Teig 20 min. quellen lassen.</schritt>
<schritt>Fett in der Pfanne erhitzen, den Pfannkuchen bei mittlerer Hitze
backen, bis die Unterseite goldbraun ist. </schritt>
<schritt>Wenn sich die Außenseiten kräuseln, den Pfannenkuchen drehen, und wie
oben noch mal backen.</schritt>
<dauer>30 min.</dauer>
</zubereitung>
</rezept>

von meinem noch vorhandenen Verständnis sehe ich das folglicher maßen:

Hauptelement ist Rezept und dann kommen Titel (in dem Fall Pfannkuchen) Zutaten und Zubereitung.
Title ist ja gegeben und ändert sich nicht wirklich.
Wobei Zutaten wiederum in Zutat - Einheit - menge unterteilt wird.
Die Zubereitung wird in schritte und Dauer unterteilt.

Vom Verständnis her hab ich es noch im Kopf. Aber dann haperts..


<!ELEMENT rezept (titel,zutaten+,zubereitung+)>
<!ELEMENT titel (#PCDATA)>

das scheint schon falsch Zusein..

Also ich wäre fuer jede Hilfe bzw. Lösungsansetze wirklich dankbar..


----------



## mihe7 (18. Mrz 2021)

michaelhugel hat gesagt.:


> Jetzt meine frage, ich habe eine fertige XML und kann ich die automatisch in eine DTD umwandeln?


Mit xml2dtd erstellt:


```
<!ELEMENT art ( #PCDATA ) >
<!ELEMENT dauer ( #PCDATA ) >
<!ELEMENT menge ( #PCDATA ) ><!ATTLIST menge einheit NMTOKEN #IMPLIED >

<!ELEMENT rezept ( title, zutaten, zubereitung ) >
<!ELEMENT schritt ( #PCDATA ) >
<!ELEMENT title ( #PCDATA ) >
<!ELEMENT zubereitung ( schritt+, dauer ) >
<!ELEMENT zutat ( menge, art ) >
<!ELEMENT zutaten ( zutat+ ) >
```


----------



## michaelhugel (18. Mrz 2021)

Brilliant. Nun nochmal eine Frage dazu. Wenn ich nur folgende Einheiten  ( Werte g, l und Prise) im DTD schreiben möchte, als die Zeile <!ATTLIST menge einheit NMTOKEN #IMPLIED > abändern?

Vom Prinzip her hab ich es wieder verstanden. Schonmal vielen Dank.


----------



## mihe7 (18. Mrz 2021)

Würde mal sagen

```
<!ATTLIST menge einheit (g|l|Prise) #IMPLIED >
```


----------



## michaelhugel (19. Mrz 2021)

komisch.. hatte das gestern auch so nochmal in meinem File geschrieben und der Compiler zeigte Error. aber ich weiß jetzt was mein Fehler war... oh man. Danke dir vielmals


----------

