Klingt, als ob Sie ein Meta-Format benötigen, in dem das Schema eine Möglichkeit zum Definieren der Spalten definiert, anstatt selbst bestimmte Spalten zu definieren.
Diese Art von XML neigt dazu, hässlich und ausführlich (z. B. xmlrpc und Seife) zu sein. Es bedeutet auch, dass das Schema die tatsächlichen Spalten nicht validieren kann, sondern nur, dass sie korrekt definiert wurden.
Die XML würde wie folgt aussehen:
<DataTable>
<column name="..." value="..."/>
<column name="..." value="..."/>
</DataTable>
Die XSD etwas so sein würde:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="DataTable">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="column">
<xs:complexType>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="value" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Natürlich können Sie, wenn Sie strukturierte Werte müssen (nicht nur Strings), dann Ich brauche etwas Komplexeres. Wenn Sie beliebige Objekte benötigen, können diese als Map für jedes Objekt dargestellt werden, wobei die Werte wiederum Maps sein können. Die Elementschemadefinition muss rekursiv sein, damit sie eine andere Instanz von sich selbst enthalten kann. Dies ist im Grunde, was xmlrpc und Soap tun.
EDIT Das funktioniert nicht mit Ihrem "Spalten" passen, aber ein Beispiel ist:
<object name="contact">
<object name="home">
<object name="tel">
<string name="area" value="910"/>
<string name="num" value="1234 5678"/>
</object>
</object>
<object name="work">
<object name="tel">
<string name="area" value="701"/>
<string name="num" value="8888 8888"/>
</object>
<object name="fax">
<string name="area" value="701"/>
<string name="num" value="9999 9999"/>
</object>
</object>
</object>
Grundidee der Grammatik:
V --> string | O // a Value is a string or an Object
O --> (K V)* // an Object is list of named values (Key-Value pairs)
geändert, so dass die Wurzel ist immer ein Objekt und benannt:
O ==> (string K | O)* K
Eine XSD für diese:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="object">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="string">
<xs:complexType>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="value" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element ref="object"/>
</xs:choice>
<xs:attribute name="name" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:schema>