Laden...

Undefinierte Node-Namen; mit XSD möglich?

Erstellt von 7.e.Q vor 11 Jahren Letzter Beitrag vor 11 Jahren 464 Views
7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 11 Jahren
Undefinierte Node-Namen; mit XSD möglich?

verwendetes Datenbanksystem: XML

Hi Leute,

ist es möglich, in einem XML Schema zu definieren, dass n Ebenen unterhalb des Rootnodes Nodes kommen, die keinen festen Namen, aber dennoch mindestens ein festes Attribut haben? Und ist es möglich, zu definieren, dass ab Ebenen unterhalb dieser n Ebenen mit unspezifiziertem Namen nur noch eine fest definierte Struktur folgen darf?

Folgender Hintergrund: ich definiere mir Adress-IDs mittels einer XML-Datei. Diese Adress-IDs bestehen aus drei Bytes. Ich verwende sie, um eine selbstentwickelte Hardware über UDP-Pakete zu steuern (die drei Adress-Bytes legen fest, welche Komponente ich anspreche). Sie sind in der XML Datei so definiert, dass ich sie per XPath direkt erreichen kann. Beispiel (rot = variabel/unspezifiziert; grün=fest/spezifiziert:


<IDTree>
<!-- Zwischen hier... -->
  <Staubsauger id="0x00">
    <Sensoren id="0x00">
      <FilterFuellstand id="0x00" />
      <DrehzahlVentilator id="0x01" />
    </Sensoren>
    <Aktoren id="0x01">
      <DrehzahlVentilator id="0x00">
<!-- ... und hier in der Hierarchie sind die Node-Namen unspezifiziert -->
<!-- Unterhalb dieser Ebene sind die Node-Namen und die Hierarchie fest spezifiziert -->
        <Description>
          <ShortDesc>Setzt die Drehzahl und Richtung des Saugventilators</ShortDesc>
          <Field type="int" bitLength="32" name="Drehzahl" />
          <Field type="byte" bitLength="8" name="Drehrichtung">
            <Value value="0x00" means="Ansaugen" />
            <Value value="0x01" means="Ausblasen" />
          </Field>
        </Description>
      </DrehzahlVentilator>
    </Aktoren>
  </Staubsauger>
</IDTree>

Somit kann ich eine Adress-Bytesequenz über /IDTree/Staubsauger/Sensoren/DrehzahlVentilator ansprechen und erhalte dadurch a) bessere Lesbarkeit, b) bessere und c) zentrale Wartbarkeit, wenn sich was an den IDs ändert. Da ich in einem Team an der Hardware arbeite, ist c) wichtig, weil Änderungen oder Erweiterungen an den Adressen natürlich für alle Bereiche des Projekts gelten sollen. Wildwuchs soll vermieden werden.

Fest spezifiziert sein sollen ausnahmslos alle Attribute, wie ich sie im Beispiel genannt habe. Das id-Attribut soll für die Adress-Zweige verpflichtend sein. Die anderen Attribute sollen teilweise optional (mit Standardwert) oder ebenfalls pflicht sein.

Unterhalb der Ebene, auf der sich beispielsweise FilterFuellstand oder DrehzahlVentilator befinden, lege ich, wie im Beispiel zu sehen, eine Dokumentationsstruktur ab. Sie ist fest definiert, beginnt mit einem Node mit spezifischem Namen "Description" und erhält darunter ein paar ebenfalls fest benamte Nodes mit definierter Hierarchie.

Nun ist die kurze und knackige Frage: ist es möglich, diese Vorgaben in ein XML Schema zu gießen?

Vielen Dank!

Cheers,
Hendrik

476 Beiträge seit 2004
vor 11 Jahren

Hallo 7.e.Q,

eine direkte Antwort auf deine Frage habe ich nicht. Aber um unspezifizierte Elemente verwenden zu können gibt es xsd:any (oder xsd:anyType als Datentyp) in der Schemadefinition. Zusammen mit dem Attribut processContents lassen sich Schemavalidierungen erzwingen, unterdrücken oder zulassen wenn vorhanden. Vielleicht lässt sich damit etwas bewerkstelligen.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

7.e.Q Themenstarter:in
925 Beiträge seit 2004
vor 11 Jahren

Ah, guck ich mir mal an, danke!