Announcement

Collapse
No announcement yet.

DTD mit Ordnerstruktur

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

  • DTD mit Ordnerstruktur

    Hallo,

    ich möchte gern CAD-Befehlsfavoriten in einer Exportdatei abspeichern. Das Ganze soll als XML-Datei geschehen. In der XML-Datei wird auch das Schema abgelegt. Das Schema soll die Möglichkeit bieten, sowohl Favoriten als auch untergeordnete Ordner abzulegen, ähnlich der Ordnerstruktur im Windows Explorer. Der User hat später die Möglichkeit, eigene Ordner, Unterordner und darin Befehlsfavoriten beliebig zu verschachteln und zu verwalten. Zum Zwecke der Weitergabe der gesamten Struktur soll der ganze Baum als XML in eine Austauschdatei gepackt werden.

    Das Ganze funktioniert im Prinzip schon, allerdings zeigen Peter's XML Editor und Open XML Editor einen Fehler. Ich vermute, dass die von mir gewünschte Art der Verschachtelung von Macros und untergeordneten Ordnern so nicht ganz korrekt umgesetzt ist.

    OpenXML Editor-Fehlermeldung: Element contains another element which does not match the content model: [ScMacros]
    Peter's XML Editor: Element content is invalid according to the DTD/Schema. Expecting: ScMacro.

    Das Schema sieht jetzt so aus:

    Code:
    <!DOCTYPE ScMacroExportFile [
      <!ELEMENT ScMacroExportFile ( ScMacros* )>
      <!ATTLIST ScMacroExportFile
        version    CDATA    #REQUIRED
        created    CDATA    #IMPLIED
      >
      <!ELEMENT ScMacros ( ScMacros* , ScMacro* )>
      <!ATTLIST ScMacros
        name    CDATA    #REQUIRED
      >
      <!ELEMENT ScMacro ( #PCDATA )>
      <!ATTLIST ScMacro
        type    CDATA    #REQUIRED
        name    CDATA    #REQUIRED
        file    CDATA    #IMPLIED
      >
    ] >
    Die XML-Datei sieht beim ersten Test erst mal so aus:

    Code:
    <?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
    <!DOCTYPE ScMacroExportFile [
      <!ELEMENT ScMacroExportFile ( ScMacros* )>
      <!ATTLIST ScMacroExportFile
        version    CDATA    #REQUIRED
        created    CDATA    #IMPLIED
      >
      <!ELEMENT ScMacros ( ScMacros* , ScMacro* )>
      <!ATTLIST ScMacros
        name    CDATA    #REQUIRED
      >
      <!ELEMENT ScMacro ( #PCDATA )>
      <!ATTLIST ScMacro
        type    CDATA    #REQUIRED
        name    CDATA    #REQUIRED
        file    CDATA    #IMPLIED
      >
    ]>
    <ScMacroExportFile version="2.0" created="2007-10-09 21:27:45">
      <ScMacros name="***ROOT***">
        <ScMacro type="0" name="Ausrichten" file=""><![CDATA[_align]]></ScMacro>
        <ScMacros name="Programmierung">
          <ScMacros name="Datenbanken">
          </ScMacros>
          <ScMacros name="Objekte">
            <ScMacro type="1" name="Eigenschaften untergeordneter Objekte" file=""><![CDATA[(progn (graphscr) (tlm (son)) (textscr))]]></ScMacro>
            <ScMacro type="1" name="Objekteigenschaften und -methoden" file=""><![CDATA[(progn (graphscr) (tlm (so)) (textscr))]]></ScMacro>
          </ScMacros>
          <ScMacros name="Tabellen">
          </ScMacros>
          <ScMacros name="Anwendung">
            <ScMacro type="2" name="Gezeichnete Auswahl schraffieren" file="O:\\USR\\macros\\schraffthem.lsp"><![CDATA[schraffthem]]></ScMacro>
          </ScMacros>
        </ScMacros>
      </ScMacros>
    </ScMacroExportFile>
    Wer kennt sich mit DTD-Schemata aus und kann mir einen Tipp für ein Schema für eine Ordnerstruktur geben?

    VG, Fred

  • #2
    ANY wärs gewesen

    Hallo,

    habe eine Lösung gefunden, nicht schön, aber es erscheinen keine Fehler mehr. Dass aber ScMacro unterhalb von ScMacros sitzen muss, wird nicht ganz deutlich.

    Code:
    <!DOCTYPE ScMacroExportFile [
      <!ELEMENT ScMacroExportFile ( ScMacros+ )>
      <!ATTLIST ScMacroExportFile
        version    CDATA    #REQUIRED
        created    CDATA    #IMPLIED
      >
      <!ELEMENT ScMacros ANY>
      <!ATTLIST ScMacros
        name    CDATA    #REQUIRED
      >
      <!ELEMENT ScMacro ( #PCDATA )>
      <!ATTLIST ScMacro
        type    CDATA    #REQUIRED
        name    CDATA    #REQUIRED
        file    CDATA    #IMPLIED
      >
    ] >
    Gibt es bessere Ansätze?

    VG, Fred

    Comment


    • #3
      Versuche es mit
      Code:
      <!ELEMENT ScMacros (ScMacros | ScMacro)*>

      Comment


      • #4
        Danke

        Danke, das funktioniert.
        Aber: was bedeutet der senkrechte Strich, der ist mir noch nicht bekannt.

        Danke,
        VG, Fred

        Comment


        • #5
          | steht für alternative Auswahlmöglichkeiten im Sinne von EXKLUSIV ODER.

          Comment


          • #6
            Hm, richtig verstanden?

            Hm,

            danke, aber habe ich es richtig verstanden, dass unterhalb eines Ordners entweder nur weitere Unterordner (ScMacros) ODER ausschließlich Elemente vom Typ ScMacro enthalten sein dürfen, JEDOCH NIEMALS beides gleichzeitig enthalten sein darf?

            Ich will nur sicher sein EXKLUSIV ODER richtig interpretiert zu haben.

            VG, Fred

            Comment


            • #7
              Doch, beide gleichzeitig wären auch erlaubt. In Deinem Ausgangsbeispiel kommen ja beide Elemente innerhalb von ScMacros vor:

              Code:
              <ScMacros name="***ROOT***">
                  <ScMacro type="0" name="Ausrichten" file=""><![CDATA[_align]]></ScMacro>
                  <ScMacros name="Programmierung">
                  ...
              c (a | b)* sagt aus, dass es unterhalb von c entweder a oder b, jedoch beliebig oft geben darf, also auch in jeder Folge.

              c (a | b) würde dagegen entweder genau ein a oder genau ein b unterhalb von c fordern.

              Comment


              • #8
                aha

                Ja, das ist sehr schön danke!

                VG, Fred

                Comment

                Working...
                X