JohnMurdoch: XML-Vergleich mit Bedingungen

Hallo zusammen,

ich suche nach einem Tipp mit welcher Technik ich am besten 2 XML Dateien vergleichen (o. validieren) kann.

Damit meine ich nicht das gewöhnliche compare/diff, sondern
es muss eine möglichkeit geben bei der basis-datei bedingungen zu knüpfen.

in etwa so:

A.XML:

  
<root>  
<sub>  
<element A name='Hans'/>  
<element A name='Rudi'/>  
<element A name='Helmut'/>  
</sub>  
</root>  

BASISDATEI.XML:

  
<root>  
<sub>  
<element A name='Hans'/>  
<bedingung wert='xor'>  
         <element A name='Rudi'/>  
         <element A name='Silke'/>  
</bedingung>  
<element A name='Helmut'/>  
</sub>  
</root>  

Obiger Vergleich wäre ok, da die Basis-Datei sagt dass zwischen Hans und Helmut entweder Silke oder Rudi auftreten muss.

Frage: Gibt es eine Möglichkeit per XSD dies zu realisieren? Oder muss man sich den Aufwand machen und einen kleinen Interpreter schreiben?

ich benutze übrigens Perl

  1. Hallo,

    meines Wissens nach bietet XSD für solch ein Vorhaben keine Unterstützung.

    Du kannst mit XSD zwar Werte für Attribute auf eine Liste (enumeration) einschränken .. aber nicht die Reihenfolge in der sie auftreten müssen. (afaik)

    Datei A.XML ist reines XML, kein XSD
    BASISDATEI.XML ... dito
    A.XML wirst du nicht gegen BASISDATEI.XML validieren können.

    Du musst dir dann wohl wirklich eine kleine Komponente schreiben, welche die Logik aus BASISDATEI.XML auf A.XML anwenden kann.

    Zum Bleistift könntest du aus BASISDATEI.XML mittels XSL(T) alle möglichen XML Dateien ableiten und diese dann gegen A.XML vergleichen

    Aber ist die "Reihenfolge" nicht eigentlich unerheblich?

    Ciao,, Frnk

    1. Hallo,

      meines Wissens nach bietet XSD für solch ein Vorhaben keine Unterstützung.

      Du kannst mit XSD zwar Werte für Attribute auf eine Liste (enumeration) einschränken .. aber nicht die Reihenfolge in der sie auftreten müssen. (afaik)

      Datei A.XML ist reines XML, kein XSD
      BASISDATEI.XML ... dito
      A.XML wirst du nicht gegen BASISDATEI.XML validieren können.

      Du musst dir dann wohl wirklich eine kleine Komponente schreiben, welche die Logik aus BASISDATEI.XML auf A.XML anwenden kann.

      Zum Bleistift könntest du aus BASISDATEI.XML mittels XSL(T) alle möglichen XML Dateien ableiten und diese dann gegen A.XML vergleichen

      Aber ist die "Reihenfolge" nicht eigentlich unerheblich?

      Ciao,, Frnk

      Hallo Frank,

      leider ist die Reihenfolge wichtig, da es sich bei dem eigentlichen Inhalt der XML Dateien um Infos über Software-packages handelt welche in dieser Reihenfolge auf clients installiert werden.

      Kann ich bei den enumerationen denn auch die werte festhalten oder nur die element-/ attributnamen (wie bei dtd) ?

      Gruss
      JM

      1. Bitte nicht immer alles oben drüber oder unten drunter zitieren sondern nur das, worauf du dich im Einzelnen beziehst. Im Falle deines Postings wäre das gewesen:

        Aber ist die "Reihenfolge" nicht eigentlich unerheblich?

        Wenn dir die Reihenfolge so wichtig ist, dann versehe das XML bei der Erstellung mit Ordnungsnummern bzw. mit den Versionsnummern.

        Kann ich bei den enumerationen denn auch die werte festhalten oder nur die element-/ attributnamen (wie bei dtd) ?

        siehe XSD Facets

        Gruss, Frank