AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML XSD-Validierung: 1 Knoten, 2 Möglichkeiten
Thema durchsuchen
Ansicht
Themen-Optionen

XSD-Validierung: 1 Knoten, 2 Möglichkeiten

Ein Thema von MathiasSimmack · begonnen am 16. Mär 2005
Antwort Antwort
MathiasSimmack
(Gast)

n/a Beiträge
 
#1

XSD-Validierung: 1 Knoten, 2 Möglichkeiten

  Alt 16. Mär 2005, 13:08
Ich habe einen Knoten in einer XML-Datei, für den es zwei Darstellungsmöglichkeiten gibt. Einmal so:
Code:
<plugin parent="ParentName" child="ChildName1"/>
<plugin parent="ParentName" child="ChildName2"/>
<plugin parent="ParentName" child="ChildName3"/>
und dann so:
Code:
<plugin parent="ParentName">
  <child name="ChildName1"/>
  <child name="ChildName2"/>
  <child name="ChildName3"/>
 
</plugin>
Um nicht zu technisch zu werden: Das hat mit meinem Help 2.0-Registrierungstool zu tun. In der ersten Variante wird der ParentName-Namespace geöffnet, das Plugin (ChildName?) wird referenziert, und dann wird der Parent geschlossen und gemergt. Dann kommt das nächste Plugin, usw. usw. In der zweiten Variante wird der Parent geöffnet, dann werden die Child-Namespaces alle in einem Durchgang referenziert, und dann wird der Parent geschlossen und nur ein einziges Mal gemergt. Die Zeit verkürzt sich also im besten Fall. Aber wie gesagt, das ist Programminterna und hat mit der Validierung der XML-Steuerdatei nichts zu tun.

Ich möchte jetzt nur sicherstellen, dass entweder Variante 1 oder Variante 2 als gültig anerkannt wird. Aber nicht beide gleichzeitig! Wenn so was in der Datei steht:
Code:
<plugin parent="ParentName" child="ChildName1">
  <child name="ChildName2"/>
</plugin>
oder so was:
Code:
<plugin parent="ParentName"/>
dann soll der Validierungsvorgang den Fehler anzeigen. Okay, das würde der XML-Parser von sich aus übernehmen, wenn die Deklaration in der XSD-Datei passt. Und genau da grübele ich gerade. Für die Variante 1 würde das so aussehen:
XML-Code:
<xs:element name="plugin">
  <xs:complexType>
    <xs:attribute name="parent" type="xs:string" use="required"/>
    <xs:attribute name="child" type="xs:string" use="required"/>
  </xs:complexType>
</xs:element>
Aber wie kriege ich das hin, dass er auch Variante 2 akzeptiert. Nochmal deklarieren à la:
XML-Code:
<xs:element name="plugin">
  <xs:complexType>
    <xs:sequence minOccurs="1" maxOccurs="unbounded">
      <xs:element ref="child"/>
    </xs:sequence>
    <xs:attribute name="parent" type="xs:string" use="required"/>
  </xs:complexType>
</xs:element>

<xs:element name="child">
  <xs:complexType>
    <xs:attribute name="name" type="xs:string" use="required"/>
  </xs:complexType>
</xs:element>
geht nicht, weil "plugin" ja schon als Name für die Deklaration der ersten Variante benutzt wird. Ich könnte auch beides verbinden,
XML-Code:
<xs:element name="plugin">
  <xs:complexType>
    <xs:sequence minOccurs="1" maxOccurs="unbounded">
      <xs:element ref="child"/>
    </xs:sequence>
    <xs:attribute name="parent" type="xs:string" use="required"/>
    <xs:attribute name="child" type="xs:string" use="required"/>
  </xs:complexType>
</xs:element>
aber dann darf das "child"-Attribut natürlich nicht mehr required sein, sondern es muss sich mit dem <child>-Unterknoten irgendwie gegenseitig ausschließen. Geht so was?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz