JavaRush /Blog Java /Random-ES /Conceptos básicos de XML para programadores Java: parte 1...
Ярослав
Nivel 40
Днепр

Conceptos básicos de XML para programadores Java: parte 1 de 3

Publicado en el grupo Random-ES
XML es un formato muy popular y flexible hoy en día. Todo programador debería entenderlo, es simplemente imprescindible. Hoy en día, muchas tecnologías lo utilizan activamente, y las modernas se encuentran entre ellas.
Conceptos básicos de XML para programadores Java - Parte 1 de 3 - 1

Introducción

Hola, queridos lectores de mi artículo. Quiero decir de inmediato que este es solo el primer artículo de mi serie de tres artículos. El objetivo principal de toda la serie es iniciar a cada lector en XML y darle, si no una explicación y comprensión completas, al menos un buen empujón hacia ello, explicando los puntos y cosas principales. El ciclo completo será para una nominación - “Atención al detalle” , y la división en 3 artículos se realiza para ajustarse al límite de caracteres en las publicaciones y dividir una gran cantidad de material en porciones más pequeñas para una mayor comprensión. El primer artículo estará dedicado al XML en sí y qué es, así como a una de las formas de crear un esquema para archivos XML: DTD. Para empezar, me gustaría hacer un pequeño prefacio para aquellos que aún no están familiarizados con XML: no hay por qué asustarse. XML no es muy complicado y cualquier programador debería entenderlo, ya que es un formato de archivo muy flexible, eficiente y popular hoy en día para almacenar una variedad de información que desee. XML se utiliza en Ant, Maven, Spring. Cualquier programador necesita conocimientos de XML. Ahora que has reunido fuerzas y motivación, comencemos a estudiar. Intentaré diseñar todo el material de la manera más sencilla posible, recopilando solo lo más importante y sin entrar en la maleza.

XML

Para una explicación más clara, sería mejor visualizar el XML con un ejemplo.
<?xml version="1.0" encoding="UTF-8"?>
<company>
    <name>IT-Heaven</name>
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee>
                    <name>Maksim</name>
                    <job>Middle Software Developer</job>
                </employee>
                <employee>
                    <name>Ivan</name>
                    <job>Junior Software Developer</job>
                </employee>
                <employee>
                    <name>Franklin</name>
                    <job>Junior Software Developer</job>
                </employee>
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee>
                    <name>Herald</name>
                    <job>Middle Software Developer</job>
                </employee>
                <employee>
                    <name>Adam</name>
                    <job>Middle Software Developer</job>
                </employee>
                <employee>
                    <name>Leroy</name>
                    <job>Junior Software Developer</job>
                </employee>
            </employees>
        </office>
    </offices>
</company>
HTML y XML son similares en sintaxis porque tienen un padre común: SGML. Sin embargo, en HTML sólo existen etiquetas fijas de un estándar específico, mientras que en XML puedes crear tus propias etiquetas, atributos y, en general, hacer lo que quieras para almacenar datos de la forma que más te convenga. De hecho, cualquier persona que sepa inglés puede leer los archivos XML. Este ejemplo se puede representar usando un árbol. Conceptos básicos de XML para programadores Java - Parte 1 de 3 - 2La raíz del árbol es Compañía. También es el elemento raíz (raíz) del que provienen todos los demás elementos. Cada archivo XML sólo puede tener un elemento raíz. Debe declararse después de la declaración del archivo xml (la primera línea del ejemplo) y contener todos los demás elementos. Un poco sobre la declaración: es obligatoria y necesaria para identificar el documento como XML. Tiene tres pseudoatributos (atributos especiales predefinidos): versión (según el estándar 1.0), codificación (codificación) e independiente (autonomía: si es así y los esquemas externos están conectados al documento, entonces habrá un error, el valor predeterminado no es). Los elementos son entidades que almacenan datos utilizando otros elementos y atributos. Los atributos son información adicional sobre un elemento que se especifica al agregar un elemento. Si traducimos la explicación a un campo OOP, podemos dar el siguiente ejemplo: tenemos un automóvil, cada automóvil tiene características (color, capacidad, marca, etc.); estos son atributos y hay entidades que están dentro del automóvil. : las puertas, las ventanillas, el motor, el volante son otros elementos. Puede almacenar propiedades como elementos individuales o como atributos, según lo desee. Después de todo, XML es un formato extremadamente flexible para almacenar información sobre cualquier cosa. Después de las explicaciones, sólo tenemos que mirar el ejemplo anterior para que todo encaje. En el ejemplo, describimos una estructura empresarial simple: hay una empresa que tiene nombre y oficinas, y en las oficinas hay empleados. Los elementos Empleados y Oficinas son elementos envolventes: sirven para recopilar elementos del mismo tipo, esencialmente combinándolos en un conjunto para facilitar el procesamiento. El suelo y la habitación merecen una atención especial. Estos son los atributos de la oficina (piso y número), es decir, sus propiedades. Si tuviéramos un elemento "imagen", entonces podríamos transferir sus dimensiones. Puede observar que la empresa no tiene un atributo de nombre, pero sí un elemento de nombre. Simplemente puede describir las estructuras de la forma que desee. Nadie te obliga a escribir todas las propiedades de los elementos solo en atributos; puedes usar solo elementos y escribir algunos datos dentro de ellos. Por ejemplo, podemos registrar el nombre y puesto de nuestros empleados como atributos:
<?xml version="1.0" encoding="UTF-8"?>
<company>
    <name>IT-Heaven</name>
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee name="Maksim" job="Middle Software Developer">

                </employee>
                <employee name="Ivan" job="Junior Software Developer">

                </employee>
                <employee name="Franklin" job="Junior Software Developer">

                </employee>
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee name="Herald" job="Middle Software Developer">

                </employee>
                <employee name="Adam" job="Middle Software Developer">

                </employee>
                <employee name="Leroy" job="Junior Software Developer">

                </employee>
            </employees>
        </office>
    </offices>
</company>
Como puedes ver, ahora el nombre y cargo de cada empleado son sus atributos. Y puedes notar que no hay nada dentro de la entidad de empleado (etiqueta), todos los elementos de empleado están vacíos. Luego puede convertir a empleado en un elemento vacío; ciérrelo inmediatamente después de declarar los atributos. Esto se hace de forma muy sencilla, basta con añadir una barra:
<?xml version="1.0" encoding="UTF-8"?>
<company>
    <name>IT-Heaven</name>
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee name="Maksim" job="Middle Software Developer" />
                <employee name="Ivan" job="Junior Software Developer" />
                <employee name="Franklin" job="Junior Software Developer" />
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee name="Herald" job="Middle Software Developer" />
                <employee name="Adam" job="Middle Software Developer" />
                <employee name="Leroy" job="Junior Software Developer" />
            </employees>
        </office>
    </offices>
</company>
Como puede ver, al cerrar los elementos vacíos, preservamos toda la integridad de la información y acortamos enormemente el registro, haciendo que la información sea más concisa y legible. Para agregar un comentario (texto que se omitirá al analizar un archivo) en XML, existe la siguiente sintaxis:
<!-- Iván недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
Y la última construcción es CDATA , que significa “datos de caracteres”. Gracias a este diseño, es posible escribir texto que no se interpretará como marcado XML. Esto es útil si tiene una entidad dentro del archivo XML que almacena el marcado XML en la información. Ejemplo:
<?xml version="1.0" encoding="UTF-8" ?>
<bean>
    <information>
        <![CDATA[<name>Ivan</name><age>26</age>]]>
    </information>
</bean>
Lo que pasa con XML es que puedes extenderlo como quieras: usa tus propios elementos, tus propios atributos y estructúralo como desees. Puede utilizar tanto atributos como elementos para almacenar datos (como se mostró en el ejemplo anterior). Sin embargo, debe comprender que puede crear sus propios elementos y atributos sobre la marcha y como quiera, pero ¿qué pasa si trabaja en un proyecto en el que otro programador quiere mover el elemento de nombre a atributos y toda la lógica de su programa? ¿Está escrito de modo que el nombre fuera un elemento? ¿Cómo puedes crear tus propias reglas sobre qué elementos deberían ser, qué atributos tienen y otras cosas, para poder validar archivos XML y estar seguro de que las reglas se convertirán en estándar en tu proyecto y nadie las violará? Para escribir todas las reglas de su propio marcado XML, existen herramientas especiales. Los más famosos: DTD y XML Schema. Este artículo sólo hablará del primero.

DTD

DTD se crea para describir tipos de documentos. DTD ya se está volviendo obsoleto y ahora se está abandonando activamente en XML, pero todavía hay muchos archivos XML que usan DTD y, en general, es útil comprenderlo. DTD es una tecnología para validar documentos XML . Una DTD declara reglas específicas para un tipo de documento: sus elementos, qué elementos pueden estar dentro del elemento, atributos, si son requeridos o no, el número de sus repeticiones, así como las Entidades. De manera similar a XML, una DTD se puede visualizar con un ejemplo para una explicación más clara.
<!-- Объявление возможных элементов -->
<!ELEMENT employee EMPTY>
<!ELEMENT employees (employee+)>
<!ELEMENT office (employees)>
<!ELEMENT offices (office+)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (name, offices)>

<!-- Добавление атрибутов для элементов employee и office -->
<!ATTLIST employee
        name CDATA #REQUIRED
        job  CDATA #REQUIRED
>

<!ATTLIST office
        floor CDATA #REQUIRED
        room  CDATA #REQUIRED
>

<!-- Добавление сущностей -->
<!ENTITY M "Maksim">
<!ENTITY I "Ivan">
<!ENTITY F "Franklin">
Aquí tenemos un ejemplo tan simple. En este ejemplo, declaramos toda nuestra jerarquía a partir del ejemplo XML: empleado, empleados, oficina, oficinas, nombre, empresa. Para crear archivos DTD, se utilizan 3 construcciones principales para describir cualquier archivo XML: ELEMENT (para describir elementos), ATTLIST (para describir atributos de elementos) y ENTITY (para sustituir texto con formas abreviadas). ELEMENTO Se utiliza para describir un elemento. Los elementos que se pueden utilizar dentro del elemento descrito se enumeran entre paréntesis en forma de lista. Puede utilizar cuantificadores para indicar la cantidad (son similares a los cuantificadores de expresiones regulares): +significa 1+ *significa 0+ ?significa 0O 1 Si no se agregaron cuantificadores, entonces se supone que debe haber solo 1 elemento. Si necesitáramos uno de un grupo de elementos, podríamos escribirlo así:
<!ELEMENT company ((name | offices))>
Entonces se seleccionaría uno de los elementos: nombre o cargo, pero si dentro de la empresa hubiera dos de ellos, entonces no pasaría la validación. También puede observar que en empleado aparece la palabra VACÍO; esto significa que el elemento debe estar vacío. También hay CUALQUIER elemento. #PCDATA – datos de texto. ATTLIST Se utiliza para agregar atributos a elementos. Después de ATTLIST sigue el nombre del elemento deseado, y después un diccionario con la forma “nombre de atributo - tipo de atributo”, y al final puede agregar #IMPLIED (opcional) o #REQUIRED (obligatorio). CDATA: datos de texto. Hay otros tipos, pero todos están en minúsculas. ENTIDAD ENTIDAD se utiliza para declarar abreviaturas y el texto que se colocará en ellas. De hecho, simplemente podremos utilizar en XML, en lugar del texto completo, sólo el nombre de la entidad con un signo & delante y ; después. Por ejemplo: para diferenciar entre el marcado HTML y solo caracteres, el paréntesis angular izquierdo a menudo lleva como escape lt; , solo necesitas poner & antes de lt. Entonces no usaremos marcado, sino simplemente el símbolo <. Como puedes ver, todo es bastante simple: declaras elementos, explicas qué elementos son capaces de contener los elementos declarados, agregas atributos a estos elementos y, si lo deseas, puedes agregar entidades para acortar algunas entradas. Y aquí habría que preguntarse: ¿cómo utilizar nuestras reglas en nuestro archivo XML? Después de todo, simplemente declaramos las reglas, pero no las usamos en XML. Hay dos formas de usarlos en XML: 1. Incrustar: escribir reglas DTD dentro del propio archivo XML, simplemente escriba el elemento raíz después de la palabra clave DOCTYPE e incluya nuestro archivo DTD entre corchetes.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE company [
        <!-- Объявление возможных элементов -->
        <!ELEMENT employee EMPTY>
        <!ELEMENT employees (employee+)>
        <!ELEMENT office (employees)>
        <!ELEMENT offices (office+)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT company (name, offices)>

        <!-- Добавление атрибутов для элементов employee и office -->
        <!ATTLIST employee
        name CDATA #REQUIRED
        job  CDATA #REQUIRED
        >

        <!ATTLIST office
        floor CDATA #REQUIRED
        room  CDATA #REQUIRED
        >

        <!-- Добавление сущностей -->
        <!ENTITY M "Maksim">
        <!ENTITY I "Ivan">
        <!ENTITY F "Franklin">
]>

<company>
    <name>IT-Heaven</name>
    <!-- Iván недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee name="&M;" job="Middle Software Developer" />
                <employee name="&I;" job="Junior Software Developer" />
                <employee name="&F;" job="Junior Software Developer" />
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee name="Herald" job="Middle Software Developer" />
                <employee name="Adam" job="Middle Software Developer" />
                <employee name="Leroy" job="Junior Software Developer" />
            </employees>
        </office>
    </offices>
</company>
2. Importar: escribimos todas nuestras reglas en un archivo DTD separado, después de lo cual en el archivo XML usamos la construcción DOCTYPE del primer método, solo que en lugar de corchetes debemos escribir SISTEMA y especificar una ruta absoluta o relativa al ubicación actual del archivo.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE company SYSTEM "dtd_example1.dtd">

<company>
    <name>IT-Heaven</name>
    <!-- Iván недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee name="&M;" job="Middle Software Developer" />
                <employee name="&I;" job="Junior Software Developer" />
                <employee name="&F;" job="Junior Software Developer" />
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee name="Herald" job="Middle Software Developer" />
                <employee name="Adam" job="Middle Software Developer" />
                <employee name="Leroy" job="Junior Software Developer" />
            </employees>
        </office>
    </offices>
</company>
También puede utilizar la palabra clave PUBLIC en lugar de SISTEMA, pero es poco probable que le resulte útil. Si está interesado, puede leer sobre esto (y también sobre SISTEMA) en detalle aquí: enlace . Ahora no podemos usar otros elementos sin declararlos en la DTD y todo XML está sujeto a nuestras reglas. Puede intentar escribir este código en IntelliJ IDEA en un archivo separado con una extensión .xml e intentar agregar algunos elementos nuevos o eliminar un elemento de nuestra DTD y observar cómo el IDE le indicará un error. Sin embargo, DTD tiene sus desventajas:
  • Tiene su propia sintaxis, diferente de la sintaxis xml.
  • Una DTD no tiene verificación de tipo de datos y solo puede contener cadenas.
  • No hay ningún espacio de nombres en una DTD.
Sobre el problema de su propia sintaxis: debe comprender dos sintaxis a la vez: XML y DTD. Son diferentes y esto puede confundirte. Además, debido a esto, es más difícil rastrear errores en archivos XML enormes junto con los mismos esquemas DTD. Si algo no te funciona, tendrás que revisar una gran cantidad de texto con diferentes sintaxis. Es como leer dos libros al mismo tiempo: en ruso y en inglés. Y si su conocimiento de un idioma es peor, comprender el texto le resultará igual de difícil. Acerca del problema de la verificación de tipos de datos: los atributos en las DTD tienen diferentes tipos, pero todos son, en esencia, representaciones de cadenas de algo, listas o enlaces. Sin embargo, no se pueden exigir sólo números y, sobre todo, ni positivos ni negativos. Y puedes olvidarte por completo de los tipos de objetos. El último problema se discutirá en el próximo artículo, que estará dedicado a los espacios de nombres y esquemas XML, ya que discutirlo aquí no tiene sentido. Gracias a todos por su atención, he trabajado mucho y sigo haciéndolo para terminar toda la serie de artículos a tiempo. Básicamente, sólo tengo que descubrir los esquemas XML y dar una explicación de ellos en palabras más claras para terminar el segundo artículo. La mitad ya está hecha, por lo que puedes esperarla pronto. El último artículo estará íntegramente dedicado a trabajar con archivos XML utilizando Java. Buena suerte a todos y éxito en la programación :) Siguiente artículo: [Concurso] Conceptos básicos de XML para un programador de Java - Parte 2 de 3
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION