Compartir a través de


Funciones XML

Para facilitar la implementación del intercambio de datos en formato XML, Visual FoxPro ofrece nuevas funciones y nueva funcionalidad en las funciones XMLUPDATEGRAM( ), CURSORTOXML( ) y XMLTOCURSOR( ).

Ya importe datos XML mediante XMLTOCURSOR( ) o exporte datos por medio de CURSORTOXML( ), los documentos válidos contendrán XML con formato correcto.

Documentos con formato correcto

Cualquier documento XML producido por Visual FoxPro tiene formato correcto, lo que significa que cumple las reglas básicas del XML. Éstas son:

  • Cada documento XML debe tener un único elemento raíz (un elemento que abarca el documento completo).

  • Todas las etiquetas iniciales y finales coinciden. Las etiquetas XML distinguen entre mayúsculas y minúsculas.

  • Para cada etiqueta inicial existe la correspondiente etiqueta final. Los elementos vacíos pueden indicarse por medio de una etiqueta abreviada especial.

  • Los elementos no se superponen. Dicho de otra forma, las etiquetas iniciales y finales deben estar correctamente anidadas dentro de otros elementos.

  • Ciertos caracteres de reserva forman parte de la sintaxis XML y no se interpretan como ellos mismos si se utilizan en la parte de datos de un elemento. Deberá sustituirlos por una secuencia especial de caracteres (denominada "entidad" en XML), de la manera siguiente:

    Carácter Tipo de datos Codificación de la entidad
    &   ("y" comercial)
    <   (corchete angular izquierdo)
    >   (corchete angular derecho)
    "   (comillas dobles)
    '   (comillas sencillas)
    String
    String
    String
    String
    String
    Se reemplaza por &amp;
    Se reemplaza por &lt;
    Se reemplaza por &gt;
    Se reemplaza por &quot;
    Se reemplaza por &apos;

    Para otros tipos de datos, la codificación sigue estas reglas:

    Tipo de datos Codificación de caracteres y entidades
    Date Debe seguir el formato ISO 8601
    Números La puntuación debe utilizar las reglas del inglés de EE.UU. Por ejemplo, debe utilizarse un punto como separador decimal. Los números pueden incluir exponentes.
    Boolean Falso = -1, Verdadero = 1. (SQL XML devuelve 1 y 0)
    BLOB Utiliza la codificación MIME Base64

A continuación se muestra un ejemplo de documento XML con formato correcto:

<?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>

donde:

  • <?xml version="1.0"?>
    Especifica la declaración de que se trata de un documento XML y proporciona el número de versión. La declaración es opcional, pero se recomienda para cualquier documento XML.

  • <ORDER>
    Especifica el elemento raíz, que abarca el documento completo.

  • <CUSTOMER> ... </CUSTOMER>
    Especifica un conjunto de etiqueta inicial y etiqueta final que describe un elemento de datos, en este caso el nombre del cliente.

    Nota   Cada conjunto de etiquetas, como por ejemplo <CUSTOMER> ... </CUSTOMER>, tiene tanto etiqueta inicial como final, distingue entre mayúsculas y minúsculas y está correctamente anidado. Observe también la entidad &apos;, que se transformará en un apóstrofe (') cuando la aplicación receptora importe los datos. El apóstrofe tiene un propósito especial en un documento XML y puede interpretarse de forma incorrecta si se utiliza directamente en el texto. Los datos convertidos se mostrarán como Mom's Boston Crab Meat.

Puede utilizar espacios en blanco en todo el documento para mejorar la legibilidad.

Si especifica un esquema al exportar desde Visual FoxPro, se considera que los documentos XML exportados contienen código XML válido. Esto significa que, además de tener un formato correcto, los documentos se ajustan a un esquema definido.

Cuando se importa XML mediante XMLTOCURSOR( ), Visual FoxPro utiliza un esquema, externo o interno, para determinar la estructura de cursores o tablas. Cuando no se proporciona esquema, Visual FoxPro utiliza un método de "mejor aproximación" para interpretar los datos XML. Esto implica recorrer dos veces el código XML, una para determinar la estructura de los datos y otra para ejecutar realmente la conversión. Tenga en cuenta que el código XML, además de tener el formato correcto, en general debe ajustarse a un formato que se pueda interpretar como una tabla. El código XML con formato correcto que no pueda descomponerse fácilmente en un formato de tabla no se importará correctamente.

Esquemas

Los esquemas describen la estructura de los datos en un formato común que los clientes, otros exploradores Web y cualquier programa de software habilitado para XML puedan reconocer. La descripción define las reglas de un documento de datos XML, incluidos los nombres y tipos de datos de los elementos, qué elementos pueden aparecer en combinación y qué atributos hay disponibles para cada elemento. Los esquemas proporcionan un modelo, para un documento de datos XML, que define la disposición de las etiquetas y el texto dentro de los documentos que hacen referencia al esquema. Visual FoxPro es compatible con el estándar XML Schema (XSD), una infraestructura básica para describir el tipo y la estructura de los documentos XML.

Al utilizar un esquema, es posible asegurarse de que cualquier documento XML que se utilice para importar o exportar datos contiene datos específicos y se ajusta a una estructura definida. También puede proporcionar el esquema a otros negocios y aplicaciones, para que puedan estructurar los datos que le proporcionen y, a su vez, le ofrezcan su esquema.

Visual FoxPro admite el formato de esquema W3C XSD. A continuación se muestra un ejemplo de esquema XSD resultado de la función CURSORTOXML( ):

<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
<xsd:schema id="VFPSchema" targetNamespace="https://microsoft.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>

El formato del esquema XSD se basa en la edición W3C 24 Oct 2000 Working Draft de la especificación XSD Schema: Primer, Structures, and Datatypes. Para obtener información detallada, vea http://www.w3.org/TR/2000/CR-xmlschema-0-20001024/ (en inglés).

Actualmente, Visual FoxPro exporta XML en los siguientes formatos:

  • Centrado en elementos Cada campo de un cursor o tabla resultante o de origen se representa por medio de un elemento secundario del elemento de nivel superior.

    Nota   La especificación XSD/XML (Octubre de 2000) requiere que los datos de tipo Boolean se conviertan al caso literal verdadero o falso, como se muestra.

    <?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>
    
  • Centrado en atributos El cursor se identifica con la palabra clave "root"; cada campo de un cursor o tabla, resultante o de origen, se representa mediante un atributo del elemento raíz.

    <?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>
    
  • Fila Cada fila de un cursor o tabla, resultante o de origen, se representa por medio de un elemento XML con el identificador genérico "row"; cada valor de columna se asigna a un atributo del elemento row, donde el nombre del atributo es igual al nombre de la columna. Este formato es idéntico al centrado en atributos, excepto en que es "row" el nombre del elemento de nivel superior.

    <?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>
    

Asignación de tipos de datos

La tabla siguiente describe la asignación de datos de Visual FoxPro a tipos XSD.

Tipo Visual FoxPro Tipo XSD Comentarios
Character Cadena con restricción
<xsd:maxLength value="128"/>
 
Currency Decimal  
Numérico Decimal con restricción
 <xsd:precision value="10"/>
      <xsd:scale value="4"/>
La precisión es el número de dígitos, excluido el punto decimal.
Float Decimal con restricción
<xsd:precision value="10"/>
      <xsd:scale value="4"/>
       "
Date date  
DateTime timeInstant  
Double double  
Integer int  
Lógicas boolean  
Memo Cadena con restricción
<xsd:maxLength value="2147483647"/>
 
General No se admite  
Character (binario) Binario con restricción
<xsd:encoding value="base64"/>
 
Memo (binario) Binario con restricción
<xsd:encoding value="base64"/>
 

Atributo de configuración regional

Si el atributo regional del sistema no es "us-en", este atributo se escribe en el elemento del esquema XSD junto con el elemento de nombre de tabla. Esto requiere también la declaración del espacio de nombres msprop.

Configuración regional msdata:configuración regional
Alemán de
Spanish (español) es
Francés fr

Vea también

CURSORTOXML( ) (Función) | XMLTOCURSOR( ) (Función) | XMLUPDATEGRAM( ) (Función) | VFPXMLProgID (Propiedad)