Frage

Ich erstelle regelmäßig ein XSD-Schema durch ein proprietäres Datenmodell eines Altsystems zu verwandeln. Das funktioniert ziemlich gut. Doch nur das Legacy-System ermöglicht es mir sehr grundlegenden Attribute eines Parameter zu spezifizieren, wie der Datentyp (int, string usw.).

Ich mag die XSL-Transformation mit einem Mechanismus verbessern, die ich Meta-Daten bereitzustellen, um weitere Details für die Transformation hinzufügen kann. Ich dachte an so etwas wie die Notation Java Eigenschaften Attribute zu einem XPath zuzuweisen.

Stellen Sie sich das folgende Beispiel:

Altsystem Datenmodell (eigentlich, dass ordentlich, aber am besten zu Demonstrationszwecken)

<datamodel>
  <customer>
    <firstName type="string"/>
    <lastName type="string"/>
    <age type="int">
  <customer>
</datamodel>

Meta-Daten

customer/firstName/@nillable=false
customer/lastName/@nillable=false
customer/age/@nillable=true
customer/firstName/@minOccurs=1
customer/firstName/@maxOccurs=1
customer/lastName/@minOccurs=1
customer/lastName/@maxOccurs=1

resultierendes XSD-Schema

...
<xs:complexType name="customerType">
  <xs:sequence>
    <xs:element name="firstName" type="xs:string" nillable="false" minOccurs="1" maxOccurs="1"/>
    <xs:element name="lastName" type="xs:string" nillable="false" minOccurs="1" maxOccurs="1"/>
    <xs:element name="age" type="xs:int" nillable="true"/>
  </xs:sequence>
</xs:complexType>
...

Was halten Sie davon? Gibt es eine Möglichkeit Metadaten in einen XSL-Stylesheet enthalten?

War es hilfreich?

Lösung

Die beste Lösung wäre es, die Altdaten zu ändern, indem die fehlenden Metadaten hinzufügen.

Eine Instanz des modifizierten „Datenmodell“ Wortschatz so etwas wie dies auch sein mag:

<datamodel xmlns:nm="my:new.meta">
    <customer>
        <firstName type="string"
                   nm:nillable="false"
                   nm:minOccurs="1"
                   nm:maxOccurs="1"
                   />
        <lastName type="string"
                  nm:nillable="false"
                  nm:minOccurs="1"
                  nm:maxOccurs="1"
                  />
        <age type="int" nm:nillable="true"/>
    </customer>
</datamodel>

Setzen Sie die neuen Eigenschaften in einem eigenen Namensraum ist ein guter Weg, um sie von den bereits unterstützten Eigenschaften leicht zu unterscheiden. In der Regel mithilfe von Attributen in einem Namensraum ist nicht zu empfehlen, so dass, wenn dies vermieden werden soll, könnte man Unterelemente verwenden (gehört zur neuen Namensraum) anstelle von Attributen. Machen die neuen Attribute gehören zu einem anderen Namespace in der Legacy-Schema-Validierung führt sie nicht zu verwerfen.

Wenn aus irgendwelchen Gründen nicht möglich ist, die Legacy-Daten zu ändern, würde ich empfehlen, nicht die neuen Objekte im Stylesheet selbst aufzunehmen (dies durchaus möglich ist, zum Beispiel als definiert dies als den Inhalt eines globalen <xsl:variable> ), aber diese neuen Eigenschaften als separate XML-Datei oder als eine Reihe von einer oder mehr XML-Dateien zur Verfügung zu stellen.

Jede XML-Datei dynamisch während einer XSLT-Transformation kann unter Verwendung der XSLT-Funktion document () abgerufen. Eine Instanz der XML-Datei mit den neuen Eigenschaften wie folgt aussehen:

<newProperties xmlns:nm="my:new.meta">
    <customer>
        <firstName nm:nillable="false"
                   nm:minOccurs="1"
                   nm:maxOccurs="1"
                   />
        <lastName nm:nillable="false"
                  nm:minOccurs="1"
                  nm:maxOccurs="1"
                  />
        <age nm:nillable="true"/>
    </customer>
</newProperties>

Hoffe, dass dies geholfen hat.

Cheers,

Dimitre Novatchev

Andere Tipps

"Was denken Sie davon?"

Zwei Drei Dinge.

  1. Befestigen Sie die Legacy-Metadaten. Es ist XML. In Sachen zu. Fügen Sie einen Namespace, wenn Sie müssen.

  2. Wenn Sie die Legacy-Metadaten nicht beheben können, wer maintaint er zweite Set von Metadaten, die nicht in XML-Notation ist? Wer wird tun, um die Doppik eine Metadaten Änderung vornehmen? Was sind die Chancen von jemandem folgenden durch?

  3. Betrachten Sie XML für den zusätzlichen Verwendung von Metadaten, nicht pseudo-XPath. Konsistenz wird diejenigen, die helfen, kommen, nachdem Sie herauszufinden, was los ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top