JavaRush /Blogue Java /Random-PT /Noções básicas de XML para programadores Java - Parte 1 d...
Ярослав
Nível 40
Днепр

Noções básicas de XML para programadores Java - Parte 1 de 3

Publicado no grupo Random-PT
XML é um formato muito popular e flexível hoje em dia. Todo programador deve entender isso, é simplesmente obrigatório. Muitas tecnologias hoje o utilizam ativamente, e as modernas estão entre elas.
Noções básicas de XML para programador Java - Parte 1 de 3 - 1

Introdução

Olá, queridos leitores do meu artigo. Quero dizer desde já que este é apenas o primeiro artigo da minha série de três artigos. O principal objetivo de toda a série é iniciar cada leitor no XML e dar, se não uma explicação e compreensão completas, pelo menos um bom empurrão nessa direção, explicando os principais pontos e coisas. Todo o ciclo será para uma indicação - “Atenção aos detalhes” , sendo que a divisão em 3 artigos é feita de forma a caber no limite de caracteres nas postagens e dividir uma grande quantidade de material em porções menores para maior compreensão. O primeiro artigo será dedicado ao próprio XML e o que é, bem como a uma das formas de criar um esquema para arquivos XML - DTD. Para começar, gostaria de fazer um pequeno prefácio para quem ainda não está familiarizado com XML: não precisa se assustar. XML não é muito complicado e deve ser entendido por qualquer programador, pois é um formato de arquivo muito flexível, eficiente e popular atualmente para armazenar uma variedade de informações que você deseja. XML é usado em Ant, Maven, Spring. Qualquer programador precisa de conhecimento de XML. Agora que você reuniu forças e motivação, vamos começar a estudar. Tentarei organizar todo o material da forma mais simples possível, coletando apenas o mais importante e não entrando no mato.

XML

Para uma explicação mais clara, seria melhor visualizar o XML com um exemplo.
<?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 e XML são semelhantes em sintaxe porque têm um pai comum - SGML. Porém, em HTML existem apenas tags fixas de um padrão específico, enquanto em XML você pode criar suas próprias tags, atributos e, em geral, fazer o que quiser para armazenar os dados da maneira que mais lhe convier. Na verdade, os arquivos XML podem ser lidos por qualquer pessoa que saiba inglês. Este exemplo pode ser representado usando uma árvore. Noções básicas de XML para programadores Java - Parte 1 de 3 - 2A raiz da árvore é Companhia. É também o elemento raiz (raiz) do qual vêm todos os outros elementos. Cada arquivo XML pode ter apenas um elemento raiz. Deve ser declarado após a declaração do arquivo xml (a primeira linha do exemplo) e conter todos os demais elementos. Um pouco sobre a declaração: ela é obrigatória e necessária para identificar o documento como XML. Possui três pseudoatributos (atributos especiais predefinidos): versão (de acordo com o padrão 1.0), codificação (codificação) e autônomo (autonomia: se sim e esquemas externos estiverem conectados ao documento, então haverá um erro, o padrão é não). Elementos são entidades que armazenam dados usando outros elementos e atributos. Atributos são informações adicionais sobre um elemento especificadas ao adicionar um elemento. Se traduzirmos a explicação para um campo OOP, podemos dar o seguinte exemplo: temos um carro, cada carro tem características (cor, capacidade, marca, etc.) - são atributos, e existem entidades que estão dentro do carro : portas, janelas, motor, volante são outros elementos. Você pode armazenar propriedades como elementos individuais ou como atributos, dependendo do seu desejo. Afinal, XML é um formato extremamente flexível para armazenar informações sobre qualquer coisa. Depois das explicações, basta olhar o exemplo acima para que tudo se encaixe. No exemplo, descrevemos uma estrutura de empresa simples: há uma empresa que tem nome e escritórios, e nos escritórios há funcionários. Os elementos Funcionários e Escritórios são elementos wrapper - servem para coletar elementos do mesmo tipo, combinando-os essencialmente em um conjunto para facilitar o processamento. Piso e sala merecem atenção especial. São os atributos do escritório (andar e número), ou seja, suas propriedades. Se tivéssemos um elemento “imagem”, poderíamos transferir suas dimensões. Você pode notar que a empresa não possui um atributo de nome, mas possui um elemento de nome. Você pode simplesmente descrever as estruturas da maneira que desejar. Ninguém obriga você a escrever todas as propriedades dos elementos apenas em atributos; você pode usar apenas elementos e escrever alguns dados dentro deles. Por exemplo, podemos registrar o nome e o cargo de nossos funcionários 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 você pode ver, agora o nome e o cargo de cada funcionário são seus atributos. E você pode notar que não há nada dentro da entidade funcionário (tag), todos os elementos funcionário estão vazios. Então você pode tornar o funcionário um elemento vazio - feche-o imediatamente após declarar os atributos. Isso é feito de forma bastante simples, basta adicionar uma 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 você pode perceber, ao fechar os elementos vazios, preservamos toda a integridade das informações e encurtamos bastante o registro, tornando as informações mais concisas e legíveis. Para adicionar um comentário (texto que será ignorado ao analisar um arquivo) em XML, existe a seguinte sintaxe:
<!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
E a última construção é CDATA , que significa “dados de caracteres”. Graças a este design, é possível escrever texto que não será interpretado como marcação XML. Isso é útil se você tiver uma entidade dentro do arquivo XML que armazene a marcação XML nas informações. Exemplo:
<?xml version="1.0" encoding="UTF-8" ?>
<bean>
    <information>
        <![CDATA[<name>Ivan</name><age>26</age>]]>
    </information>
</bean>
O problema do XML é que você pode estendê-lo como quiser: use seus próprios elementos, seus próprios atributos e estruture-o como desejar. Você pode usar atributos e elementos para armazenar dados (como mostrado no exemplo anterior). No entanto, você precisa entender que pode criar seus próprios elementos e atributos instantaneamente e como quiser, mas e se você trabalhar em um projeto em que outro programador deseja mover o elemento de nome para atributos e toda a lógica do seu programa está escrito de forma que esse nome fosse um elemento? Como você pode criar suas próprias regras sobre quais elementos devem ser, quais atributos eles possuem e outras coisas, para que você possa validar arquivos XML e ter certeza de que as regras se tornarão padrão em seu projeto e ninguém as violará? Para escrever todas as regras da sua própria marcação XML, existem ferramentas especiais. Os mais famosos: DTD e XML Schema. Este artigo falará apenas sobre o primeiro.

DTD

DTD é criado para descrever tipos de documentos. O DTD já está se tornando obsoleto e agora está sendo ativamente abandonado em XML, mas ainda existem muitos arquivos XML que usam DTD e, em geral, é útil entender. DTD é uma tecnologia para validação de documentos XML . Uma DTD declara regras específicas para um tipo de documento: seus elementos, quais elementos podem estar dentro do elemento, atributos, se são obrigatórios ou não, o número de suas repetições, bem como Entidades. Semelhante ao XML, um DTD pode ser visualizado com um exemplo para uma explicação mais 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">
Aqui temos um exemplo tão simples. Neste exemplo, declaramos toda a nossa hierarquia a partir do exemplo XML: funcionário, funcionários, escritório, escritórios, nome, empresa. Para criar arquivos DTD, existem 3 construções principais usadas para descrever qualquer arquivo XML: ELEMENT (para descrever elementos), ATTLIST (para descrever atributos para elementos) e ENTITY (para substituir texto por formas abreviadas). ELEMENT Usado para descrever um elemento. Os elementos que podem ser usados ​​dentro do elemento descrito estão listados entre parênteses em forma de lista. Você pode usar quantificadores para indicar quantidade (eles são semelhantes aos quantificadores de expressões regulares): +significa 1+ *significa 0+ ?significa 0OU 1 Se nenhum quantificador foi adicionado, então presume-se que deve haver apenas 1 elemento. Se precisássemos de um grupo de elementos, poderíamos escrevê-lo assim:
<!ELEMENT company ((name | offices))>
Então seria selecionado um dos elementos: nome ou cargos, mas se houvesse dois deles dentro da empresa a validação não passaria. Você também pode notar que em funcionário existe a palavra VAZIO - isso significa que o elemento deve estar vazio. Também existe QUALQUER - qualquer elemento. #PCDATA – dados de texto. ATTLIST Usado para adicionar atributos aos elementos. Após ATTLIST segue o nome do elemento desejado, e depois dele um dicionário no formato “nome do atributo - tipo de atributo”, podendo no final adicionar #IMPLIED (opcional) ou #REQUIRED (obrigatório). CDATA – dados de texto. Existem outros tipos, mas todos estão em letras minúsculas. ENTIDADE ENTIDADE é usada para declarar abreviaturas e o texto que será colocado nelas. Na verdade, poderemos simplesmente usar em XML, em vez do texto completo, apenas o nome da entidade com um sinal & antes de e ; depois. Por exemplo: para diferenciar entre marcação HTML e apenas caracteres, o colchete angular esquerdo geralmente é escapado com lt; , você só precisa colocar & antes de lt. Então não usaremos marcação, mas simplesmente o símbolo <. Como você pode ver, tudo é bastante simples: você declara elementos, explica quais elementos os elementos declarados são capazes de conter, adiciona atributos a esses elementos e, se desejar, pode adicionar entidades para encurtar algumas entradas. E aqui você teria que perguntar: como usar nossas regras em nosso arquivo XML? Afinal, simplesmente declaramos as regras, mas não as utilizamos em XML. Existem duas maneiras de usá-los em XML: 1. Incorporação - escrever regras DTD dentro do próprio arquivo XML, basta escrever o elemento raiz após a palavra-chave DOCTYPE e colocar nosso arquivo DTD entre colchetes.
<?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>
    <!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
    <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 - escrevemos todas as nossas regras em um arquivo DTD separado, após o qual usamos a construção DOCTYPE do primeiro método no arquivo XML, apenas em vez de colchetes você precisa escrever SYSTEM e especificar um caminho absoluto ou relativo para o localização atual do arquivo.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE company SYSTEM "dtd_example1.dtd">

<company>
    <name>IT-Heaven</name>
    <!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
    <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>
Você também pode usar a palavra-chave PUBLIC em vez de SYSTEM, mas é improvável que seja útil para você. Se você estiver interessado, pode ler sobre ele (e sobre o SYSTEM também) em detalhes aqui: link . Agora não podemos usar outros elementos sem declará-los na DTD, e todo XML está sujeito às nossas regras. Você pode tentar escrever este código no IntelliJ IDEA em um arquivo separado com extensão .xml e tentar adicionar alguns novos elementos ou remover um elemento de nosso DTD e observar como o IDE indicará um erro para você. No entanto, o DTD tem suas desvantagens:
  • Possui sintaxe própria, diferente da sintaxe xml.
  • Um DTD não possui verificação de tipo de dados e só pode conter strings.
  • Não há namespace em um DTD.
Sobre o problema da sua própria sintaxe: você deve entender duas sintaxes ao mesmo tempo: sintaxe XML e sintaxe DTD. Eles são diferentes e isso pode deixá-lo confuso. Além disso, por causa disso, é mais difícil rastrear erros em arquivos XML enormes em conjunto com os mesmos esquemas DTD. Se algo não funcionar para você, você terá que verificar uma grande quantidade de texto com sintaxes diferentes. É como ler dois livros ao mesmo tempo: em russo e em inglês. E se o seu conhecimento de um idioma for pior, a compreensão do texto será igualmente difícil. Sobre o problema da verificação de tipo de dados: os atributos em DTDs têm tipos diferentes, mas são todos, em sua essência, representações de algo, listas ou links. No entanto, não se pode exigir apenas números e, especialmente, números positivos ou negativos. E você pode esquecer completamente os tipos de objetos. O último problema será discutido no próximo artigo, que será dedicado a namespaces e esquemas XML, já que discuti-lo aqui é inútil. Obrigado a todos pela atenção, tenho feito muito trabalho e continuo trabalhando para terminar toda a série de artigos no prazo. Basicamente, só preciso descobrir os esquemas XML e apresentar uma explicação deles em palavras mais claras para finalizar o segundo artigo. Metade já está feita, então você pode esperar isso em breve. O último artigo será inteiramente dedicado a trabalhar com arquivos XML usando Java. Boa sorte a todos e sucesso na programação :) Próximo artigo: [Competição] XML Basics for a Java Programmer - Parte 2 de 3
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION