Announcement

Collapse
No announcement yet.

eine XML-Datei, die die DTD für Docbook verwendet erstellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • eine XML-Datei, die die DTD für Docbook verwendet erstellen

    Hallo,


    könnt ihr mir bitte helfen?


    Ich möchte gern eine XML-Datei schreiben, die eine öffentliche DTD verwendet. Dazu habe ich mir die "DTD für Docbook" rausgesucht.
    Bei OASIS habe ich die Zip-Datei zu "DTD DocBook XML V4.5//EN" gedownloaded und auf meinem Rechner entpackt.
    Als Editor verwende ich "Visual Studio Community 2019".
    Die XML-Datei, die ich erstellt habe heißt "book.xml" und befindet sich im selben Verzeichnis wie die DTD.


    In der XML-Datei "book.xml" soll ein Element "book" verwendet werden, das ausschließlich
    das Vokabular der "DTD DocBook" verwendet, schreiben.
    Das Wurzelelement heiß dem entsprechend also in der XML-Datei und in der DTD "book".


    Und nun kommt das Problem. VisualStudio erkennt jedes Element, als ein gültiges Element an.
    Aber ich will ja nur, dass Elemente die das Element "book" auch hat als gültige Elemente erkannt werden.


    Zum Beispiel "hund" oder "haus" werden als gültige Element nach der DTD anerkannt, obwohl die nicht in der DTD stehen.


    Könnt ihr mir Bitte helfen?


    Im Anhang anbei alle Dateien zu meinem Projekt.


    Mit freundlichen Grüßen



    Michael
    Attached Files

  • #2
    Kann ich so nicht nachvollziehen
    https://ibb.co/D9YzVhT
    Christian

    Comment


    • #3
      Hallo Christian,

      danke für deine Rückmeldung.
      Im Link anbei habe ich erstmal, die Kommentare vom englischen zurück ins deutsche übersetzt.
      Dann sieht das ganze so aus.

      https://ibb.co/rMHdX4c

      Das Element <dog> hat in der Originaldatei allerdings Start- und Endtag.
      Damit wird dann auch kein Fehler angezeigt.
      Was kannst Du genau nicht nachvollziehen?

      Michael

      Comment


      • #4
        Ich kann nicht nachvollziehen, dass dog oder house akzeptiert werden
        Mit der DTD von http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd die ja zum prüfen genutzt wird, sind die Elemente nicht erlaubt -> Siehe Fehlermeldung

        Vielleicht musst du unterscheiden, ob in deinem Editor Fehler angezeigt werden ODER beim validieren gegen die DTD.
        Eingeben in einem Editor kann man vieles.
        Weiß auch nicht was die DTD und das XML machen sollen, aber eigentlich sind DTDs schon lange veraltet und es sollten Schema genutzt werden
        Christian

        Comment


        • #5
          Originally posted by Christian Marquardt View Post
          Ich kann nicht nachvollziehen, dass dog oder house akzeptiert werden
          Mit der DTD von http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd die ja zum prüfen genutzt wird, sind die Elemente nicht erlaubt -> Siehe Fehlermeldung

          Vielleicht musst du unterscheiden, ob in deinem Editor Fehler angezeigt werden ODER beim validieren gegen die DTD.
          Eingeben in einem Editor kann man vieles.
          Weiß auch nicht was die DTD und das XML machen sollen, aber eigentlich sind DTDs schon lange veraltet und es sollten Schema genutzt werden
          Danke für Deine Rückmeldung.

          Du verstehst also genau wie ich auch nicht warum der Editor "Visual Studio Community 2019" ungültige Elemente als gültige Elemente erkennt.


          Du hast ja die Idee gehabt, dass der Editor nur auf Wohlgeformheit achtet und nicht auf Gültigkeit. Habe nachgeschaut bei der Internetseite von "Visual Studio" und die sagen, dass
          der Editor "XML-Dokumente automatisch auf Gültigkeit prüft".

          Ich habe auch selber eine DTD geschrieben und dann ein XML-Dokument geschrieben, dass die DTD verwendet. Dann hat der Editor mir aber die ungültigen Elemente als ungültigen Elemente erkannt.

          Also der Editor hat folgendes erkannt:

          <dog> und <house> --> als ungültige Elemente erkannt. Der Editor zeigt einen Fehler an.
          <title> , <subtitle> als gültige Elemente erkannt.

          Somit kann das nicht mein Fehler sein.

          Danke trotzdem.

          Ich weiß, dass DTDs veraltet sind und möchte sie auch nicht benutzen. Nur mache ich zur Zeit ein Fernstudium zum CSH-Programmierer und der Fernlehrer möchte, dass man eine öffentliche DTD
          verwenden kann. Ich habe mir schon Bücher zu dem Thema geholt, mehrere Tage recherchiert, youtube geguckt, ABER nichts gefunden.
          Eigentlich arbeite ich als Bürokaufmann und bin Programmieranfänger. Ich weiß einfach nicht mehr weiter, wie ich zu einer Lösung für meine simplen Wunsch komme:

          Der Wunsch ist eine öffentliche DTD verwenden und eine XML-Datei erstellen, die diese DTD verwendet.

          Hat jemand so was schon gemacht?

          Mit freundlichen Grüßen

          Michael

          Comment


          • #6
            Normalerweise haben Editoren 2 Buttons:
            - einer prüft die Wohlgeformheit
            - einer prüft gegen ein Schema oder DTD

            Du hast doch schon ein XML, welches gegen die DTD prüft.
            Es erkennt, dass dog und house ungültig sind. Das ist richtig.
            Dein XML-Dokument prüft aber nicht auf die eigene DTD, sondern auf die, die im Head steht.
            Des Weiteren ist es imho nicht möglich, dass in einer Ebene Elemente mal gültig sind und mal nicht. Es kann also nicht sein,
            dass in den Zeilen 5-13 dog verboten ist und ab 14 erlaubt.

            Wenn du eine öffentliche DTD verwenden musst/sollst, warum schreibst du dann eine eigene?
            Du brauchst doch nur eine XML-Datei zu erstellen

            Wenn du die freie Auswahl hast, warum eine dermaßen komplexe DTD?
            Zuletzt editiert von Christian Marquardt; 27.12.2022, 21:47.
            Christian

            Comment


            • #7
              Danke für Deine Rückmeldung und Hilfe.

              Jetzt habe ich erstmal den Editor, den Du mir empfohlen hast, installiert. Bei der Überprüfung auf Gültigkeit bekomme ich folgende Fehlermeldung.

              https://ibb.co/x3YKqzX



              Habe dann Fehler bei Google eingegeben und herausgefunden, dass erst mit dem nächsten Release von dem Editor, die Entwickler den Bug beheben, so dass man wieder
              DTDs verwenden kann.

              https://sourceforge.net/p/xml-copy-editor/bugs/218/

              https://sourceforge.net/p/xml-copy-editor/bugs/

              Im Ticketsystem steht der Auftrag als offen an und das Ticket ist noch von 2015. Da wird sich so schnell wohl nichts tun.



              Habe aber einen neuen Ansatz, wie ich mein Problem lösen könnte.
              Bestimmt gibt es in diesem Forum Leute, die erst kürzlich auch so ein Fernstudium gemacht haben und auch eine XML-Datei
              erstellen mussten, die sich auf eine öffentliche DTD bezieht.
              Wenn mir jemand so ein Projket als zip-Ordner hochladen könnte wäre das super.


              Michael



              Comment


              • #8
                Der Fehler kommt, weil dein Kommentar nicht als solcher gekennzeichnet ist

                Wenn du die freie Auswahl hast, warum eine dermaßen komplexe DTD?
                Christian

                Comment


                • #9
                  Danke für Deine Rückmeldung und Hilfe.

                  Asche Aufs Haupt. Was ich gesagt habe, dass man mit dem Programm "xml-copy-editor" keine DTDs verwenden kann ist falsch.

                  Habe im Programm "xml-copy-editor" schon eine XML-Datei, die eine nichtöffentlichte DTD verwendet UND von der ich weiß das sie funktioniert, geöffnet und das Programm "xml-copy-editor" hat auch erkannt das die
                  xml-Datei gültig ist.

                  Entschuldigung.


                  Ich finde deinen Vorschlag gut, eine einfachere DTD zu verwenden. Die DTD "Docbook.dtd" ist für mich zu komplex, um sie zu verstehen.
                  Hast Du oder jemand anderes ein einfaches Projekt, wo eine XML-Datei erstellt wird, die zu Überprüfung ihrer Gültigkeit eine öffentlichen DTD verwendet?

                  Mit freundlichen Grüßen

                  Michael

                  Comment


                  • #10
                    Nein, man benutzt meist Schema heutzutage
                    Christian

                    Comment


                    • #11
                      XHTML 1 hat (allerdings drei, strict, transitional, frameset https://www.w3.org/TR/xhtml1/dtds.html) auch eine öffentliche DTD. Allerdings hat das W3C schon seit Jahren die Policy, Zugriffe auf Ihren Serven auf diese DTDs zu drosseln oder zu blockieren und erwartet, dass man ein lokale Kopie bzw. in der Regel einen Katalog verwendet (der bindet dann lokale Kopien an öffentliche "public ids" und/oder URIs. Kataloge unterstützt Microsoft meines Wissens nicht, hat aber z.B. im .NET Framework (und vermutlich auch in .NET Core) diverse W3C DTDs einfach in System.Xml Assemblies eingebunden. Ob Visual Studio diese benutzt, bin ich nicht sicher, aber ich habe mal meine (allerdings VS 2022) Editor Einstellungen bzg. XML durchsucht und da findet sich eine Checkbox (die per default nicht aktiviert war), Schemata und DTD automatisch zu laden. So ich diese Checkbox aktiviere und dann ein XHTML 1.0 Dokument wie z.b.
                      Code:
                      <?xml version="1.0" encoding="utf-8"?>
                      <!DOCTYPE html
                                PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
                                "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                      <html xml:lang="de">
                          <head>
                              <title>Beispiel</title>
                          </head>
                          <body>
                              <h1>Beispiel</h1>
                              <p>Dies ist ein Beispiel.</p>
                              <division></division>
                      
                          </body>
                      </html>
                      editiere, bekomme ich wegen des "division" Elementes (müsse ein "div" Element sein) die korrekte Fehlermeldung "Das Element 'body' hat ein ungültiges untergeordnetes Element 'division'. Erwartet wurde die Liste der möglichen Elemente: 'p, h1, h2, h3, h4, h5, h6, div, ul, ol, dl, pre, hr, blockquote, address, fieldset, table, form, noscript, ins, del, script'.".

                      Also eventuell, so VS 2019 auch diese Einstellung hat, wurde die Docbook DTD gar nicht heruntergeladen/gelesen, weil die Einstellung nicht aktiviert war, und so du diese aktivierst, bekommst du sowohl für Docbook oder XHTML DTDs, wonach du suchst.

                      Comment


                      • #12
                        Hallo Martin,

                        danke für Deine Rückmeldung und Deine bisherige Hilfe. Leider habe ich Deinen Lösungsweg noch nicht ganz verstanden.

                        Die erste Frage, die ich mir stelle ist: Was kann ich mit den DTDs für eine XML-Datei erstellen?
                        Ich beantworte diese Frage wie folgt:
                        Ich denke, dass man mit den DTDs eine XHTML-Datei erstellen kann.
                        Das Codebeispiel von dir zeigt ja eine gültige XHTML-Datei, außer dass es kein gültiges Element "division" gibt.
                        Habe ich das richtig so verstanden?

                        Ich habe mir die Zip-Datei und die GZip-Datei gedownloaded. Die Zip-Datei habe ich extrahieren können aber die GZip-Datei konnte WinZip nicht extrahieren.
                        Alle drei DTDs waren im Zip-Ordner. Zweite Frage: Brauche ich dann die GZip-Datei?

                        Weiter habe ich verstanden, dass ich eine Einstellung in Visual Studio machen, muss damit die DTDs erkannt werden.
                        Bis jetzt habe ich XML-Dateien, die nach einer DTD aufgebaut sind wie folgt erstellt:

                        1. Ich habe kein neues Projekt in VisualStudio angelegt. Stattdessen habe ich die XML-Datei und die DTDs in einem gleichen Ordner im WindowsExplorer abgespeichert.
                        2. Dann habe ich in VisualStudio die Dateien geöffnet und so die XML-Datei und die DTDs in VisualStudio sehen können.
                        3. Ich habe es bei VisualStudio so verstanden, dass die einen validierendenParser verwenden, der im Hintergrund aktiv ist und mir Fehler zeigt, wenn ich ungültige Elemente verwende.
                        Das funktioniert, solange ich selbsterstellte DTD verwende. Nur wenn ich eine öffentliche DTD verwende, zeigt mir der Parser keine Fehler an.
                        Stimmt meine Vorstellung über den validierenden Parser im Hintergrund oder nicht?

                        Dritte Frage: Wie hast Du genau dein Testprogramm geschrieben? Kannst Du mir das Testprogramm zuschicken, das Du ausprobiert hast?

                        Ich werde VisualStudio2019 deinstallieren und auf 2022 umsteigen. Dann sollte dein Testprogramm auch bei mir laufen.

                        Mit freundlichen Grüßen

                        Michael




                        Comment


                        • #13
                          Deinstalliere WinZip und installiere https://www.7-zip.de/

                          ja, das Beispiel zeigt eine UNGÜLTIGE xhtml-Seite
                          https://ibb.co/gD8yfm9

                          Das ist dann eine gültige xhtml-Seite
                          https://ibb.co/d0P5Q6X

                          Kenne VisualStudio nicht, aber üblicherweise läd man sich die DTD NICHT runter. Durch die Angabe im Doctype weiß der Editor wo sich die DTD befindet und nutzt diese direkt


                          https://www.youtube.com/watch?v=HMw2ki-bauQ
                          Christian

                          Comment


                          • #14
                            Was die VS Einstellungen angeht: hier ein Screenshot: https://ibb.co/8bnGMp7

                            Comment


                            • #15
                              Guten Abend ,

                              erstmal ein gesundes Neues an alle.

                              Vielen Dank für eure Rückmeldungen und bisherige Unterstützung.
                              Tut mir leid, dass ich mich erst jetzt melde.

                              Bin im Moment noch dabei eure Hilfestellungen auszuprobieren. Allerdings brauche ich noch ein paar Tage, um sagen zu können, ob mein Problem gelöst ist.

                              Bis dahin

                              Mit freundlichen Grüßen

                              Michael

                              Comment

                              Working...
                              X