Freigeben über


XML-Funktionen

Um die Implementierung des Datenaustausches durch XML-Formatierung zu vereinfachen, stellt Visual FoxPro neue Funktionen und Funktionalität in den Funktionen XMLUPDATEGRAM( ), CURSORTOXML( ) und XMLTOCURSOR( ) zur Verfügung.

Sowohl beim Importieren von XML-Daten mit Hilfe von XMLTOCURSOR( ) als auch beim Exportieren von Daten mit Hilfe von CURSORTOXML( ) enthalten gültige Dokumente wohlgeformten XML-Code.

Wohlgeformte Dokumente

Alle durch Visual FoxPro erstellten XML-Dokumente sind wohlgeformt, d. h., dass sie den Grundregeln von XML entsprechen. Folgende Merkmale treffen zu:

  • Jedes XML-Dokument muss ein eindeutiges Stammelement haben (ein Element, das das gesamte Dokument einschließt).

  • Alle Start- und Endtags stimmen überein. Bei XML-Tags wird die Groß-/Kleinschreibung berücksichtigt.

  • Für jedes Starttag ist ein entsprechendes Endtag vorhanden. Leere Elemente können durch ein spezielles kurzes Tag gekennzeichnet werden.

  • Es gibt keine überlappenden Elemente. D. h., dass Start- und Endtags ordnungsgemäß in andere Elemente geschachtelt sein müssen.

  • Bestimmte reservierte Zeichen sind Teil der XML-Syntax und werden nicht als Zeichen interpretiert, falls sie im Datenteil eines Elements verwendet werden. Sie müssen Abfolgen mit Sonderzeichen (in XML als "Entität" bezeichnet) wie folgt ersetzen:

    Zeichen Datentyp Entitätscodierung
    &   (Und-Zeichen)
    <   (spitze Klammer links)
    >   (spitze Klammer rechts)
    "   (Anführungszeichen)
    '   (Apostroph)
    Zeichenfolge
    Zeichenfolge
    Zeichenfolge
    Zeichenfolge
    Zeichenfolge
    Ersetzen durch &amp;
    Ersetzen durch &lt;
    Ersetzen durch &gt;
    Ersetzen durch &quot;
    Ersetzen durch &apos;

    Bei anderen Datentypen folgt die Codierung gemäß folgender Regeln:

    Datentyp Zeichen und Entitätscodierung
    Datum Muss dem Format ISO 8601 entsprechen.
    Zahlen Bei den Trennzeichen müssen die Regeln für Englisch (USA) verwendet werden. So müssen Sie z. B. einen Punkt als Dezimaltrennzeichen verwenden. Zahlen können Exponenten enthalten.
    Boolesch False = -1, True = 1. (SQL XML gibt 1 und 0 zurück).
    BLOB Es wird die MIME Base64-Codierung verwendet.

Es folgt ein Beispiel für ein wohlgeformtes XML-Dokument:

<?xml version="1.0"?>
<Data>
<ORDER>
 <CUSTOMER>Nancy Davolio</CUSTOMER>
  <ITEM>Mom&apos;s Boston Crab Meat</ITEM>
 <PRICE>$10.00</PRICE>
 <QUANTITY>1 Bottle</QUANTITY>
 </ORDER>
</Data>

wobei Folgendes gilt:

  • <?xml version="1.0"?>
    Deklariert dieses Dokument als XML-Dokument und gibt die Versionsnummer an. Die Deklaration ist optional, sie wird jedoch für alle XML-Dokumente empfohlen.

  • <ORDER>
    Gibt das Stammelement an, das das gesamte Dokument einschließt.

  • <CUSTOMER> ... </CUSTOMER>
    Gibt eine Gruppe mit einem Starttag und einem Endtag an, die ein Datenelement beschreibt. In diesem Beispiel handelt es sich um den Namen des Kunden.

    Anmerkung   Jede Taggruppe, wie z. B. <CUSTOMER> ... </CUSTOMER>, verfügt sowohl über Start- als auch über Endtags. Es wird die Groß-/Kleinschreibung berücksichtigt, und die Gruppe ist ordnungsgemäß geschachtelt. Beachten Sie zudem die Entität "&apos". sie wird zu einem Apostroph (') umgewandelt, wenn die Daten von der empfangenen Anwendung importiert werden. Das Apostroph erfüllt in einem XML-Dokument einen bestimmten Zweck und kann falsch interpretiert werden, wenn es direkt im Text verwendet wird. Die konvertierten Daten werden folgendermaßen angezeigt: Mom's Boston Crab Meat.

Zur Verbesserung der Lesbarkeit können Sie Leerzeichen im gesamten Dokument verwenden.

Wenn Sie während des Exportierens aus Visual FoxPro ein Schema angeben, gelten die exportierten XML-Dokumente als gültige XML-Daten. Dies bedeutet, dass die Dokumente nicht nur wohlgeformt sind, sondern auch einem definierten Schema entsprechen.

Wenn Sie XML mit Hilfe von XMLTOCURSOR( ) importieren, verwendet Visual FoxPro ein externes oder internes Schema, um die Cursor- oder Tabellenstruktur zu ermitteln. Wird kein Schema angegeben, verwendet Visual FoxPro die geeignetste Methode zum Interpretieren von XML-Daten. Dazu gehören zwei Durchläufe durch die XML-Daten: beim ersten Durchlauf wird die Datenstruktur ermittelt, und beim zweiten Durchlauf wird die tatsächliche Konvertierung ausgeführt. Beachten Sie, das XML-Daten nicht nur wohlgeformt sein müssen, sondern auch einem Format entsprechen müssen, das als Tabelle interpretiert werden kann. Wohlgeformter XML-Code, der nicht auf einfache Art und Weise in ein Tabellenformat umgewandelt werden kann, schlägt beim Import fehl.

Schemas

Schemas beschreiben die Struktur von Daten in einem gängigen Format, das von Kunden, anderen Webbrowsern und einer Vielzahl von XML-aktivierten Softwareprogrammen erkannt wird. Die Beschreibung definiert die Regeln eines XML-Datendokuments einschließlich Elementnamen und Datentypen, welche Elemente in Kombination angezeigt werden können und welche Attribute für jedes Element verfügbar sind. Schemas stellen ein Modell für ein XML-Datendokument zur Verfügung, das die Anordnung von Tags und Text in allen Dokumenten definiert, die auf das Schema verweisen. Visual FoxPro unterstützt den XML-Schemastandard (XSD), eine grundlegende Infrastruktur für die Beschreibung des Typs und der Struktur von XML-Dokumenten.

Durch die Verwendung eines Schemas können Sie sicherstellen, dass jedes zum Importieren oder Exportieren von Daten verwendete XML-Dokument spezifische Daten enthält und einer definierten Struktur entspricht. Sie können das Schema anderen Unternehmen und Anwendungen zur Verfügung stellen, so dass diese die für Sie bereitgestellten Daten strukturieren können, und so kann Ihnen im Gegenzug auch ihr Schema zur Verfügung gestellt werden.

Visual FoxPro unterstützt das W3C XSD-Schemaformat. Es folgt ein Beispiel für ein XSD-Schema als Ausgabe durch die CURSORTOXML( )-Funktion:

<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
<xsd:schema id="VFPSchema" targetNamespace="http://microsft.com" xmlns="https://microsoft.com" xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" elementFormDefault="qualified">
   <xsd:element name="atxm">
      <xsd:complexType>
         <xsd:all>
            <xsd:element name="ikey" minOccurs="0" type="xsd:int"/>
            <xsd:element name="nc00" minOccurs="0">
               <xsd:simpleType>
                  <xsd:restriction base="xsd:decimal">
                     <xsd:precision value="10"/>
                     <xsd:scale value="4"/>
                  </xsd:restriction>
               </xsd:simpleType>
            </xsd:element>
            <xsd:element name="mc03" minOccurs="0">
               <xsd:simpleType>
                  <xsd:restriction base="xsd:string">
                     <xsd:maxLength value="2147483647"/>
                  </xsd:restriction>
               </xsd:simpleType>
            </xsd:element>
            <xsd:element name="cc04" minOccurs="0">
               <xsd:simpleType>
                  <xsd:restriction base="xsd:string">
                     <xsd:maxLength value="128"/>
                  </xsd:restriction>
               </xsd:simpleType>
            </xsd:element>
            <xsd:element name="lc05" minOccurs="0" type="xsd:boolean"/>
            <xsd:element name="fc06" minOccurs="0" type="xsd:double"/>
            <xsd:element name="yc07" minOccurs="0" type="xsd:decimal"/>
            <xsd:element name="ic08" minOccurs="0" type="xsd:int"/>
            <xsd:element name="bc09" minOccurs="0" type="xsd:double"/>
            <xsd:element name="dc10" minOccurs="0" type="xsd:date"/>
            <xsd:element name="tc11" minOccurs="0" 
type="xsd:timeInstant"/>
            <xsd:element name="ts12" minOccurs="0">
               <xsd:simpleType>
                  <xsd:restriction base="xsd:binary">
                     <xsd:encoding value="base64"/>
                  </xsd:restriction>
               </xsd:simpleType>
            </xsd:element>
         </xsd:all>
      </xsd:complexType>
   </xsd:element>
   <xsd:element name="VFPData" msdata:lsDataSet="true">
      <xsd:complexType>
         <xsd:choice maxOccurs="unbounded">
            <xsd:element ref="atxm"/>
         </xsd:choice>
      </xsd:complexType>
   </xsd:element>
</xsd:schema>

Das XSD-Schemaformat basiert auf der Ausgabe "W3C 24 Oct 2000 Working Draft" der XSD-Schemaspezifikation: Primer, Structures, and Datatypes. Weitere Einzelheiten finden Sie unter http://www.w3.org/TR/2000/CR-xmlschema-0-20001024/.

In der aktuellen Version exportiert Visual FoxPro XML in die folgenden Formate:

  • Elementzentriert Alle Felder in einem resultierenden Cursor oder Quellcursor bzw. in einer resultierenden Tabelle oder Quelltabelle werden durch ein Unterelement des Elements der obersten Ebene dargestellt.

    Anmerkung   Die XSD/XML-Spezifikation (Okt. 2000) erfordert die Konvertierung des Datentyps Boolesch zum Literal mit dem Wert True oder False wie unten gezeigt.

    <?xml version="1.0" encoding="Windows-1252" standalone="yes" ?> 
    <!-- Note targetNamespace in root (VfpData) element. If set to default (""), xmlns attrib is not written -->
    <VfpData xmlns="https://www.microsoft.com">
       <alltypesxm>
          <ikey>2</ikey> 
          <nc00>1.1111</nc00> 
          <mc03>H1111111111111111111</mc03> 
          <cc04>H111111111111111111</cc04> 
          <lc05>true</lc05> 
          <fc06>-1111000</fc06> 
          <yc07>-111111111.1111</yc07> 
          <ic08>-11111111</ic08> 
          <bc09>-111111111111.1</bc09> 
          <dc10>1999-03-02T08:00:00</dc10> 
          <tc11>1999-03-02T09:01:01</tc11> 
          <ts12>AAAAAAAAAr8=</ts12>
       </alltypesxm>
    </VfpData>
    
  • Attributzentriert Der Cursor wird durch das Schlüsselwort "root" identifiziert, und alle Felder in einem resultierenden Cursor oder Quellcursor bzw. einer resultierenden Tabelle oder Quelltabelle werden durch ein Attribut des Stammelements dargestellt.

    <?xml version="1.0" encoding="Windows-1252" ?>
    <!-- Note targetNamespace in root element -->
    <root xmlns="http://www.microoft.com">
       <atxm_attr ikey="2" nc00="12345.1111" 
          mc03="H1111111111111111111" cc04="H111111111111111111" lc05="1" 
          fc06="-1111000.0000" yc07="-111111111.1111" ic08="-11111111" 
          bc09="-111111111111.100000" dc10="1999-03-02" 
          tc11="1999-03-02T01:01:01" ts12="AAAAAAAAAr0=" /> 
       <atxm_attr ikey="3" nc00="2.1111" mc03="H2222222222222222222"
          cc04="H222222222222222222" lc05="1" fc06="22220000.0000"
          yc07="2222222222.2222" ic08="222222222"
          bc09="222222222222.2200000" 
          tc11="2000-10-03T02:02:02" ts12="AAAAAAAAAr8=" /> 
    </root>
    
  • Zeile Alle Zeilen in einem resultierenden Cursor oder Quellcursor bzw. einer resultierenden Tabelle oder Quelltabelle werden durch ein XML-Element mit dem allgemeinen Bezeichner "row" dargestellt, und alle Spaltenwerte werden einem Attribut des row-Elements zugeordnet, wobei der Attributname mit dem Spaltennamen identisch ist. Dieses Format ist mit dem attributzentrierten Format identisch, mit Ausnahme von "row" als Name des Elements der obersten Ebene.

    <?xml version="1.0"?>
    <!-- Note no targetNamespace in root element -->
    <root>
       <row CustomerID="CACTU" CompanyName="Cactus Comidas para llevar"
          ContactName="Patricio Simpson" ContactTitle="Sales Agent"
          Address="Cerrito 333" City="Buenos Aires" PostalCode="1010"
          Country="Argentina" Phone="(1) 135-5555" Fax="(1) 135-4892"/> 
    </root>
    

Datentypzuordnung

In der folgenden Tabelle wird die Zuordnung von Visual FoxPro-Daten zu XSD-Typen erläutert.

Visual FoxPro-Typ XSD-Typ Kommentar
Zeichen String mit Einschränkung
<xsd:maxLength value="128"/>
 
Währung Decimal  
Numerisch Decimal mit Einschränkung
 <xsd:precision value="10"/>
      <xsd:scale value="4"/>
Gibt die Anzahl der Dezimalstellen ohne das Dezimaltrennzeichen an.
Gleitkomma Decimal mit Einschränkung
<xsd:precision value="10"/>
      <xsd:scale value="4"/>
       "
Datum date  
DatumZeit timeInstant  
Double double  
Integer int  
Logisch boolean  
Memo String mit Einschränkung
<xsd:maxLength value="2147483647"/>
 
Objektfeld Nicht unterstützt  
Zeichen (binär) Binary mit Einschränkung
<xsd:encoding value="base64"/>
 
Memo (binär) Binary mit Einschränkung
<xsd:encoding value="base64"/>
 

Gebietsschemaattribut

Wenn das Gebietsschema des Systems nicht auf "us-en" festgelegt ist, wird das Gebietsschemaattribut in das XSD-Schemaelement und das Tabellennamenelement geschrieben. Dazu ist auch die msprop-Namespacedeklaration erforderlich.

Gebietsschema msdata:Locale
Deutschland de
Spanisch es
Frankreich fr

Siehe auch

CURSORTOXML( )-Funktion | XMLTOCURSOR( )-Funktion | XMLUPDATEGRAM ( )-Funktion | VFPXMLProgID