Element type restriction in XSD

Sveta

Herzlich willkommen!
Hallo alle,

ich bin ganz neu in diesem Bereich und würde mich sehr freuen wenn mir jemand
bei meinem Problem helfen könnte.

Ich habe in meinem XSD folgende Definition eines Elementes:

<xs:element name="cif_settings">
<xs:complexType>
<xs:sequence>
<xs:element name="content" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
...
</xs:sequence>
<xs:attribute name="item" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>

<!-- hier kommt mein Problem -->
<xs:element name="active_item">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="?"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

</xs:sequence>
</xs:complexType>
</xs:element>

Das Problem ist dass element "active_item" nur die Werte annehmen darf, die
als Namen des Attributes "item" in XML-Datei vorkommen. Wie kann man das
in XSD ausdrücken, ist es überhaupt möglich??
Wie gesagt, ich bin neu in diesem Gebiet und flehe um die Hilfe.
Vielen Dank im voraus fürr weitere Hinweise!

Gruß, Sveta
 
Erst einmal Herzlich Willkommen! Setz Dich aufs Boardsofa und mach es Dir gemütlich :)

Nun zum Problem:
Du willst also dem element active_item Werte zuweisen, oder verstehe ich das falsch?

Im Prinzip kannst Du das doch dadurch erreichen, indem Du im enumeration value alles einträgst, was dort hinein soll bzw darf.
Code:
<xsd:restriction base="xsd:string">
   <xsd:enumeration value="erster Wert"/>
   <xsd:enumeration value="zweiter Wert"/>
   <xsd:enumeration value="dritter Wert"/>
   <!-- und so weiter ... -->
</xsd:restriction>

Oder soll das automatisch passieren? Dann müsste ich passen, XML Schema hab ich bisher nur ganz am Rande gestreift, aber vielleicht weiß ja ein anderer Boardie etwas dazu...

edit:
So könnte man das Ganze natürlich mit einem Reguären Ausdruck (Regular Expression) lösen:
Code:
<xsd:restriction base="xsd:integer">
      <xsd:pattern value="\d{5}\/d{5}"/>
</xsd:restriction>
Dies würde z.B. den Wert auf eine 5 stellige Integer Zahl vor einem Slash und weiteren 5 Stellen danach einschränken. Andere reguläre Ausdrücke sind natürlich auch machbar.
Achtung, Falle! base und der Reguläre Ausdruck müssen natürlich so beschaffen sein, dass das Ganze auch möglich ist. Ich dürfte alo im Beispiel nicht einfach Buchstaben im RegExp verlangen, das ginge schief, da base im Beispiel ein integer fordert.

Aber da hört's bei mir entgültig auf, da ich natürlich nicht weiß, wie der entsprechende RegExp in Deinen Fall aussehen müsste ;)

PS: Falls Du dort eine Lösung für dein Problem bekommen solltest, würden sich die Boardies hier bestimmt auch darüber freuen - zumindestens mal einer ;)
 
Zuletzt bearbeitet:
Hallo QuHno,

danke erstmal für den Beitrag. Das ist ja das Prorblem, dass ich die Werte nicht direkt aufzählen kann, da ich die nicht kenne. Darein müssten alle Werte des Attributs "item". Sprich, wenn in XML mehrmals das Element "content" mit dem Attribut "item" vorkommt, müssen die Werte dieses Attributs beim Element "active_item" als enumeration zur verfügung gestellt werden.

Hoffentlich, ich konnte das Problem verständlich darstellen, andernfalls bin bereit ausführlicher zu erklären ;)

Gruß, Sveta
 
Oh Hilfe, da muss ich passen.

Im Prinzip wäre das ja dann eine rekursive Sache: Jedesmal, wenn im XML Dokument was eingetragen würde, müsste im Schema was nachgetragen werden, was dann natürlich das XML Dokument beeinflusst...

Ich hab keine Ahnung, ob das funktioniert, als einziges fiele mir hier die Möglichkeit des Einsatzes einer Scriptsprache an, die bei Änderungen des XML Dokuments die Sachen entsprechend nachträgt...
 
Oben