Rene: Schema Problem

Hallo Leute!

Ich möche ein Schema schreiben, dass folgendes XML validieren kann:

<root>
   <test1 />
   <test2 />
   <test2 />
   <test3 />
   <test2 />
   <test4 />
   <test3 />
   <test2 />
</root>

Beschreibung: die Tags <test1 /> und <test4 /> dürfen genau 1 mal (oder kein mal) als child vorkommen (Position egal), <test2 /> und <test3 /> dürfen von 0 bis n vorkommen (auch hier ist die Position des einzelnen Elements egal).

Ist dieses Problem mit Schemas überhaupt lösbar?
Es geht mir hier rein um die Gruppierung nicht ob es sich um Leertags etc. handelt.

LG
Rene'

  1. Hallo,

    Beschreibung: die Tags <test1 /> und <test4 /> dürfen genau 1 mal (oder kein mal) als child vorkommen (Position egal), <test2 /> und <test3 /> dürfen von 0 bis n vorkommen (auch hier ist die Position des einzelnen Elements egal).

    Ist dieses Problem mit Schemas überhaupt lösbar?

    Klar: Da sollte sogar eine DTD für ausreichen.

    Gruß,
    Leeloo

    --
    "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
    1. Hallo,

      Beschreibung: die Tags <test1 /> und <test4 /> dürfen genau 1 mal (oder kein mal) als child vorkommen (Position egal), <test2 /> und <test3 /> dürfen von 0 bis n vorkommen (auch hier ist die Position des einzelnen Elements egal).

      Ist dieses Problem mit Schemas überhaupt lösbar?

      Klar: Da sollte sogar eine DTD für ausreichen.

      Gruß,
      Leeloo

      Sorry, aber so klar ist das für mich nicht.
      Hab schon etliche Workarounds gemacht, aber scheitere immer daran, dass <test1 /> und <test4 /> wirklich nur 1 einziges mal als child vorkommen dürfen. Man kann ja keine sequenz machen, da es ja keine Sequenz ist!?!?

      Muss das leider gegen ein Schema validieren!

      1. Hallo,

        Beschreibung: die Tags <test1 /> und <test4 /> dürfen genau 1 mal (oder kein mal) als child vorkommen (Position egal), <test2 /> und <test3 /> dürfen von 0 bis n vorkommen (auch hier ist die Position des einzelnen Elements egal).

        Ist dieses Problem mit Schemas überhaupt lösbar?

        Klar: Da sollte sogar eine DTD für ausreichen.

        Sorry, aber so klar ist das für mich nicht.
        Hab schon etliche Workarounds gemacht, aber scheitere immer daran, dass <test1 /> und <test4 /> wirklich nur 1 einziges mal als child vorkommen dürfen. Man kann ja keine sequenz machen, da es ja keine Sequenz ist!?!?

        Muss das leider gegen ein Schema validieren!

        Vielleicht habe ich das ganze zu schnell gelesen. Es gibt doch aber die Möglichkeit in einer DTD anzugeben, ob ein Element nur einmal, miindestens einmal oder beliebigoft oder keinmal angegeben werden kann.

        Also:
        einmal: (kind)
        mindestens einmal und beliebig oft: (kind)+
        beliebig oft oder keinmal: (kind)*

        Also am Beispiel mal:
        (test1)
        (test4)
        (test2)*
        (test3)*

        Das "oder kein mal" stand bei dir in Klammern und wäre so jetzt nicht möglich. Kennst du XSDs? Da kann man noch exakter angeben wie oft ein Element vorkommen soll. Da kann man dann sagen, dass test1 und test4 keinmal oder nur einmal vorkommen soll. Und für test2 und test3 sagt man dann 0 bis unbounded.
        Hier geht zu XSD oder z.B. hier XML Schema.

        Erklär mir, warum es keine Sequenz ist!

        Gruß,
        Leeloo

        --
        "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
        1. Also:
          einmal: (kind)
          mindestens einmal und beliebig oft: (kind)+
          beliebig oft oder keinmal: (kind)*

          Also am Beispiel mal:
          (test1)
          (test4)
          (test2)*
          (test3)*

          Erklär mir, warum es keine Sequenz ist!

          Gruß,
          Leeloo

          Eine Sequenz wird nach der Reihe abgearbeitet. Beispiel in Pseudocode:
          <sequence>
          (test1)  0 bis 1 mal
          (test4)  0 bis 1 mal
          (test2)  0 bis unbound
          (test3)  0 bis unbound
          </sequence>

          nun muss die Reihenfolge (test1), (test4), (test2) und (test3) eingehalten werden. Ich möchte aber die Möglichkeit haben (test2) das erste mal zwischen (test1) und (test4) anzugeben und dann z.B. 5x hinter (test3).

          Klaro?

          1. Hallo,

            Darf ich nochmal auf https://forum.selfhtml.org/?t=138502&m=899900 hinweisen?

            Grüße
            Thomas

  2. Hallo,

    Ich möche ein Schema schreiben, dass folgendes XML validieren kann:

    <root>
       <test1 />
       <test2 />
       <test2 />
       <test3 />
       <test2 />
       <test4 />
       <test3 />
       <test2 />
    </root>

    Beschreibung: die Tags <test1 /> und <test4 /> dürfen genau 1 mal (oder kein mal) als child vorkommen (Position egal), <test2 /> und <test3 /> dürfen von 0 bis n vorkommen (auch hier ist die Position des einzelnen Elements egal).

    Ist dieses Problem mit Schemas überhaupt lösbar?

    Nein, nicht wirklich.
    Das Problem was du immer wieder haben wirst ist die Regel der "Unique Particle Attribution", was die eindeutige Partikelzuornung verlangt (d.h. keine mehrdeutige (nicht deterministische) Inhaltsmodelle).

    Im Klartext: der Schema-Prozessor wird nicht wissen (ohne vorauszuschauen) welches Element er als nächstes zu erwarten hat. Dies deshalb weil alle Elemente Optional sind.

    Grüße
    Thomas