Gibt es eine sinnvolle Möglichkeit, Elemente mit stark typisierten einfachen Typen und auch Attributen zu haben?
Okay, ich habe ein XSD-Schema, das eine Million (äh, hundert) Elemente hat, die so aussehen könnten:
<xsd:element name="DocumentDescription" type="xsd:string" />
<xsd:element name="DocumentDateTime" type="xsd:dateTime" />
<xsd:element name="DocumentSize" type="xsd:int" />
Das ist prima. Allerdings möchte ich wirklich alle diese Elemente auch einige gemeinsame Attribute auf sie wie, sagen wir, "Format" und "isVisible" haben. d.h. haben ein Schema wie:
<DocumentDescription isVisible="true">doc description</DocumentDescription>
<DocumentDateTime format="dd/mm/yyyy" isVisible="true">1/1/2008</DocumentDescription>
<DocumentSize format="0.00 KB" isVisible="false">5403</DocumentSize>
Ich könnte es manuell tun, und schrecklich, indem ich alle solche Attribute in die XSD, wenn ich es generieren, etwas wie dieses hinzufügen:
<xsd:element name="DocumentDescription" />
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="format" type="xsd:string" />
<xsd:attribute name="isVisible" type="xsd:boolean" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:element name="DocumentDateTime" />
... etc
...aber in einer idealen Welt würde ich es lieber als einen complexType definieren:
<xsd:complexType name="customType">
<xsd:complexContent>
<xsd:extension base="???">
<xsd:attribute name="format" type="xsd:string" />
<xsd:attribute name="isVisible" type="xsd:boolean" />
...was bedeutet, dass ich es einfach tun könnte:
<xsd:element name="DocumentDescription" type="customType" baseType="xsd:string" />
<xsd:element name="DocumentDateTime" type="customType" baseType="xsd:dateTime" />
<xsd:element name="DocumentSize" type="customType" baseType="xsd:int" />
Das Problem mit meinem "Idealwelt"-Code ist, dass:
a) Ich habe keine gültigen <xsd:extension base-"???"
>, denn eigentlich ist es mir egal, was ich erweitere; ich möchte alle Typen erweitern. Es scheint, dass "xsd:anyType" angemessen ist, doch dann wird das Element zu einem schwach typisierten Container, nicht wahr?
b) Ich kann den einfachen Typ nicht mehr in der <xsd:element
>, denn jetzt ist der Typ der komplexe "customType", den ich definiert habe. Daher das imaginäre Attribut "baseType", das ich dort eingefügt habe...
Kann ich also Attribute zu einfachen Typen hinzufügen, ohne dass es umständlich wird? Oder muss ich ein Dutzend complexTypes definieren, die bis auf den einfachen Typ, den sie erweitern, alle identisch sind?
Elemente mit starker Typisierung beschreiben nicht nur die Daten sinnvoller, sondern wenn ich sie für die XML-Zuordnung in Excel verwende (und das ist der eigentliche Zweck dieser Elemente), bedeutet die starke Typisierung, dass Excel die Zellformatierung auf der Grundlage des Typs korrekt einstellt.
Ich sehe das wahrscheinlich ganz falsch! Jeder Rat ist willkommen.
0 Stimmen
Ich habe eine Ausgabe annulliert, die in der Umbenennung aller Vorkommen von starker Typ mit eingebaute einfache Typen ( W3C-Wortlaut ). Eine solche Formulierung hätte mir geholfen, Ihre Frage zu finden. Jetzt bin ich mir nicht mehr sicher, ob die Bearbeitung sinnvoll ist, und ich bin froh über meinen Kommentar mit dieser Formulierung, damit ich Ihre Frage in Zukunft wiederfinden kann.