2009-07-19 7 views
3

ich eine XML haben definierenden Eigenschaften wie:XSD: Modell-Eigenschaften (Name/Wert-Paare)

<properties> 
    <property name="play_sound" value="true" /> 
    <property name="duration" value="30" /> 
</properties> 

Ist es möglich, mit einem XML-Schema, geben Sie Bedingungen wie „wenn die Eigenschaft Name ist‚Dauer‘ dann muss der Wert eine ganze Zahl sein ". Ich denke, dass es nicht möglich ist, was ist der empfohlene Weg, um diese Art von Informationen in einer XML-Datei zu modellieren?

Ich habe über so etwas wie denken:

<properties> 
    <play_sound>true</play_sound> 
    <duration>30</duration> 
</properties> 

diese Weise kann ich Typ restrictionos in meinem Schema definieren können. Aber was passiert, wenn ich Hunderte von verschiedenen Eigenschaften habe, die wahrscheinlich in der Zukunft wachsen werden ...?

Vielen Dank.

Antwort

1

XML Schema 1.0 hat diese Art von Einschränkungen nicht.

XML Schema 1.1, die derzeit in Entwicklung ist, tut.

Wenn Sie die Saxon XSLT/XQuery-Engine verwenden, ist eine frühe Implementierung von XML Schema 1.1 zum Experimentieren enthalten.

Eine andere Option ist Schematron zu verwenden.

Aber normalerweise werden diese innerhalb der Anwendung behandelt. XML Schema beschreibt die Struktur der Daten recht gut, ist aber nicht so gut darin, den Inhalt zu validieren.

1

Ich glaube nicht, dass Sie dies durch Eigenschaftsname erzwingen können. Sie könnten wahrscheinlich etwas mit Schematron tun.

Es gibt eine allgemeine Abwägung zwischen dem ausführlichen strikten Schema und dem entspannten kompakten Schema. Sie müssen entscheiden, was in Ihrer Situation besser ist, basierend darauf, wofür die XML-Datei verwendet wird und wie das Xsd verwendet wird.

1

Es gibt keine bedingte Unterstützung in XSD, um das zu tun, was Sie wollen. Ist es für Sie absolut entscheidend, dass Ihr XML vom Parser validiert wird?

Wenn ja, Ihre einzigen Optionen definieren Eigenschaften als Typen (wie Sie es noch beschrieben) oder als Attribute (zB <my_object play_sound="true" duration="30"/>)

Üblicherweise jedoch ist es egal, ob die Prüfung zu einem späteren Zeitpunkt stattfindet (Wenn Ihr XML beispielsweise von Ihrer Anwendung verdaut wird), dann ist es einfach, das zu tun, was Sie wollen.

2

Der empfohlene Weg wäre, Ihr XML mit bestimmten Attributen oder Elementen mit bestimmten Typen zu modellieren.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="properties"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="play_sound" type="xs:boolean"/> 
       <xs:element name="duration" type="xs:byte"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

<properties> 
    <play_sound>true</play_sound> 
    <duration>30</duration> 
</properties> 
Verwandte Themen