Lenguaje de marcado extensible (XML) es un lenguaje de metamarcado que se utiliza para definir documentos estructurados que pueden intercambiarse fácilmente entre sistemas heterogéneos.
Hay muchas formas de intercambiar datos entre sistemas, pero con el crecimiento de los servicios web, XML ha ganado popularidad entre los desarrolladores. La belleza de XML radica en su flexibilidad y simplicidad.
XML define un estándar que se puede utilizar para definir el formato de los documentos. Usando XML, puede estructurar y organizar varios tipos de datos. Un lenguaje de marcas (por ejemplo, HTML) consta de predefinidos etiquetas que le permiten formatear y organizar los datos. Las etiquetas se mantienen entre menos de (<) y mayor que (>) símbolos. Por ejemplo, en un documento HTML, puede abrir la etiqueta de párrafo con
y cerrarlo con
. El contenido mantenido entre las etiquetas se interpreta en consecuencia. Aquí, el contenido mantenido entrey
tiene formato de párrafo; el contenido mantenido entre
se interpreta como un encabezado.
Sin embargo, XML es un meta lenguaje de marcado, que define un lenguaje de marcado. Está diseñado para ser flexible y fácil de entender tanto para humanos como para máquinas. En XML, no hay etiquetas predefinidas; cualquier etiqueta se puede utilizar para describir el contenido.
Aunque una comprensión profunda de los documentos XML y su procesamiento está más allá del alcance de esta publicación, discutiremos la sintaxis básica de XML y veremos la biblioteca iXML proporcionada por SAP para crear documentos XML en ABAP. Comprender XML es útil cuando se exponen o consumen datos con aplicaciones externas. Esta publicación debería ayudarlo a apreciar cómo la programación orientada a objetos ayuda a diseñar bibliotecas que son fáciles de usar para los desarrolladores en sus programas.
Los archivos XML brindan una gran flexibilidad para compartir documentos estructurados. Debido a que no hay etiquetas predefinidas, puede usar etiquetas que se adapten a su dominio y que se expliquen por sí mismas. Por supuesto, el desarrollo de un estándar para el marcado de documentos facilita que los proveedores externos desarrollen software que pueda procesar archivos XML.
Por ejemplo, supongamos que tenemos un sitio web que se puede ampliar mediante la instalación de extensiones personalizadas. Las extensiones son de dos tipos: componentes y complementos (es decir, el sitio web se puede ampliar desarrollando un componente o un complemento). Hemos desarrollado un componente y queremos cargar los archivos del componente personalizado como un paquete en el servidor web. Para proporcionar la información sobre el componente a la secuencia de comandos del instalador, podemos proporcionar un archivo XML con el paquete que contiene información sobre la estructura de archivos del paquete, como se muestra en la lista a continuación. El instalador puede leer este archivo XML y cargar los archivos del paquete en las carpetas designadas en el servidor web.
<?xml version="1.0" encoding="utf-8"?>
<!—This is comment-->
<extension type="component">
<files folder="site">
<filename>index.html</filename>
<filename>site.php</filename>
</files>
<media folder="media">
<folder>css</folder>
<folder>images</folder>
<folder>js</folder>
</media>
</extension>
Como se muestra arriba, los documentos XML están organizados en una serie de elementos. El La primera línea del documento especifica la versión XML y la codificación utilizada. La sintaxis de esta sentencia es y es opcional.
La sintaxis básica para definir un elemento en XML es la siguiente:
<element_name attribute_name=attribute_value>
<!-- Element Content -->
</element_name>
En el archivo XML de ejemplo proporcionado, para el
El marcado XML distingue entre mayúsculas y minúsculas; por ejemplo, el nombre del elemento
SAP NetWeaver AS for ABAP proporciona una biblioteca iXML que se puede utilizar para procesar archivos XML. Esta biblioteca implementa varias interfaces que le permiten trabajar con archivos XML llamando a varios métodos.
La siguiente lista muestra el código para crear un archivo XML utilizando la biblioteca iXML. El archivo XML que estamos creando contiene los datos de la lista que se mostró anteriormente. En este ejemplo, estamos definiendo objetos de referencia para el documento XML de la biblioteca iXML. El objeto de referencia para el documento XML se hace referencia a la interfaz si_ixml_documentoy se define un objeto de referencia para cada elemento en el archivo XML haciendo referencia a si_ixml_elemento. El archivo XML se genera llamando a los métodos respectivos de la biblioteca, como se muestra aquí.
REPORT ZDEMO_XML.
*Declarations to create XML document
DATA: lr_ixml TYPE REF TO if_ixml. "Reference for iXML object
"Reference for XML document
DATA: lr_document TYPE REF TO if_ixml_document.
."Reference for "extension" element in document
DATA: lr_extension TYPE REF TO if_ixml_element
."Reference for "files" element in document
DATA: lr_files TYPE REF TO if_ixml_element
."Reference for "media" element in document
DATA: lr_media TYPE REF TO if_ixml_element
."Reference to set encoding
DATA: lr_encoding TYPE REF TO if_ixml_encoding
*Declarations to create output stream and render the file to
*application server directory
DATA: lr_streamfactory TYPE REF TO if_ixml_stream_factory,
lr_ostream TYPE REF TO if_ixml_ostream,
lr_renderer TYPE REF TO if_ixml_renderer.
DATA file_path TYPE string VALUE 'D:\USR\SAP\PUT\MANIFEST.XML'.
* Create iXML object
lr_ixml = cl_ixml=>create( ).
lr_document = lr_ixml->create_document( ).
*Create encoding
lr_encoding = lr_ixml->create_encoding( BYTE_ORDER = 0 CHARACTER_SET = 'UTF-8').
*Set encoding
lr_document->set_encoding( lr_encoding ).
*Create element "extension" as root
lr_extension = lr_document->create_simple_element(
name="extension"
parent = lr_document ).
*Set attribute for the "extension" element
lr_extension->set_attribute( name="Type"
VALUE = 'Component' ).
*Create "files" element with "extension" element as parent
lr_files = lr_document->create_simple_element(
name="files"
parent = lr_extension ).
*Set attribute for "files" element
lr_files->set_attribute( name="Folder"
VALUE = 'site' ).
*Create element content
lr_document->create_simple_element( name="filename"
parent = lr_files
VALUE = 'index.html' ).
lr_document->create_simple_element( name="filename"
parent = lr_files
VALUE = 'site.php' ).
*Create "media" element with "extension" element as parent
lr_media = lr_document->create_simple_element(
name="media"
parent = lr_extension ).
**Set attribute for "media" element
lr_media->set_attribute( name="Folder"
VALUE = 'media' ).
*Create element content
lr_document->create_simple_element( name="folder"
parent = lr_media
VALUE = 'css' ).
lr_document->create_simple_element( name="folder"
parent = lr_media
VALUE = 'images' ).
lr_document->create_simple_element( name="folder"
2305-3.book Seite 316 Dienstag, 23. August 2022 6:41 18
parent = lr_media
VALUE = 'js' ).
* Create stream factory
lr_streamfactory = lr_ixml->create_stream_factory( ).
* Create output stream
lr_ostream = lr_streamfactory->create_ostream_uri( system_id = file_path ).
* Create renderer
lr_renderer = lr_ixml->create_renderer( ostream = lr_ostream
document = lr_document ).
* Set pretty print
lr_ostream->set_pretty_print( abap_true ).
* Renders the attached document into output stream
lr_renderer->render( ).
La lista de códigos que se muestra arriba guarda el archivo XML en el directorio del servidor de aplicaciones, como se muestra aquí.
Nota del editor: Esta publicación ha sido adaptada de una sección del libro. ABAP completo por Kiran Bandari
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073