Escolar Documentos
Profissional Documentos
Cultura Documentos
Equipe
Alessandra Augusto Bruno Glauber Matheus Paulo
Definio
Podemos definir como um conjunto de regras que determina quais entidades e tipos de dados faro parte de um documento XML.
Referncia no XML
DTD Internas
<!DOCTYPE elemento-principal [elementos-contido-no-principal]>
DTD Externas
<!DOCTYPE elemento-principal SYSTEM "nome_do_arquivo">
DTD Externa
Arquivo XML: <?xml version="1.0"?> <!DOCTYPE pessoa SYSTEM arquivos_dtd.dtd"> <pessoa> <nome>Sr. Fulano</nome> <sexo>Masculino</sexo> <idade>35</idade> </pessoa> Arquivo DTD arquivo_dtd.dtd": <!ELEMENT pessoa (nome,sexo,idade)> <!ELEMENT nome (#PCDATA)> <!ELEMENT sexo (#PCDATA)> <!ELEMENT idade (#PCDATA)>
DTD Interna
Arquivo XML: <?xml version="1.0"?> <!DOCTYPE pessoa [ <!ELEMENT pessoa (nome,sexo,idade)> <!ELEMENT nome (#PCDATA)> <!ELEMENT sexo (#PCDATA)> <!ELEMENT idade (#PCDATA)> ]> <pessoa> <nome>Sr. Fulano</nome> <sexo>Masculino</sexo> <idade>35</idade> </pessoa>
Propriedades (Estrutura)
Elementos
Elementos so os principais blocos de construo de um documento XML, os mesmos podem conter textos, outros elementos, ou estar vazio. Exemplo: <pessoa> <nome>Sr. Fulano</nome> </pessoa> Podendo os mesmos serem declarados das seguintes maneiras: <!ELEMENT elemento-pai (elementos-filhos)> <!ELEMENT elemento (propriedade)> <!ELEMENT elemento (propriedade | elemento-filho | elemento-filho)*> Propriedade: EMPTY #PCDATA ANY +" *" ?" |" Elemento vazio. Aponta dados que sero analisados. Pode conter qualquer combinao de dados analisveis. Torna obrigatrio pelo menos uma ocorrncia do elemento. Permite zero ou mais ocorrncias de um elemento. Permite zero ou um ocorrncia de um elemento. Entre dois elementos, permite a escolha de um para uso.
DOM vs SAX
Definio
SAX (Simple API for XML)
um conjunto de bibliotecas escritas em java que permite o acesso a documentos XML para obter o contedo desejado.
Caractersticas
Baseada em eventos(abertura e fechamento de tags) Acesso de maneira serial, no permitindo a leitura de trechos anteriores nem saltos a trechos posteriores No carrega na memria, impossibilitando a alterao do documento, entretanto se torna uma alternativa a documentos que se carregados na memria tornariam o processamento mais demorado(documentos grandes e pouca memria)
Interface SAX
SAX 2.0
Interface XMLReader - Implementada pelo parser propriamente dito. Interface ContentHandler - Manipula eventos bsicos de marcao - incio de documento, incio de elemento, etc. Interface Attributes - Manipula atributos Interface ErrorHandler - Manipula erros Interface EntityResolver -Manipula entidades Interface Locator - Localizao de cada erro - linha/coluna Interface DTDHandler - Eventos relacionados a DTDs Interface XMLFilter - Filtro XML
Start Element :company Start Element :staff Exemplo Start Element :firstname First Name : yong SAXParserFactory factory = SAXParserFactory.newInstance(); End Element :firstname SAXParser saxParser = factory.newSAXParser(); Start Element :lastname DefaultHandler handler = new DefaultHandler() Last Name : mook kim ....... End Element :lastname public void startElement(String uri, String localName,String Start Element :nickname qName,Attributes attributes) throws SAXException { Nick Name : mkyong System.out.println("Start Element :" + qName); End Element :nickname if (qName.equalsIgnoreCase("FIRSTNAME")) { Start Element :salary bfname = true; Salary : 100000 ....... public void characters(char ch[], int start, int length) throws End Element :salary End Element :staff SAXException { if (bfname) { System.out.println("First Name : " + new String(ch, start, length)); bfname = false; } ........ saxParser.parse("c:\\Bruno\\teste.xml", handler);
Start Element :staff Start Element :firstname First Name : low End Element :firstname Start Element :lastname Last Name : yin fong End Element :lastname Start Element :nickname Nick Name : fong fong End Element :nickname Start Element :salary Salary : 200000 End Element :salary End Element :staff End Element :company
Exemplo
public class ReadXMLFile { public static void main(String argv[]) { try { SAXParserFactory factory = SAXParserFactory.newInstance();
@Override public void endElement(String uri, String localName, String qName) throws SAXException {
public void startElement(String uri, String localName,String qName,Attributes attributes) throws SAXException { System.out.println("Start Element :" + qName); if (qName.equalsIgnoreCase("FIRSTNAME")) { bfname = true; } if (qName.equalsIgnoreCase("LASTNAME")) { blname = true; } if (qName.equalsIgnoreCase("NICKNAME")) { bnname = true; } if (qName.equalsIgnoreCase("SALARY")) { bsalary = true; } }
Sada
Start Element :company Start Element :staff Start Element :firstname First Name : yong End Element :firstname Start Element :lastname Last Name : mook kim End Element :lastname Start Element :nickname Nick Name : mkyong End Element :nickname Start Element :salary Salary : 100000 End Element :salary End Element :staff Start Element :staff Start Element :firstname First Name : low End Element :firstname Start Element :lastname Last Name : yin fong End Element :lastname Start Element :nickname Nick Name : fong fong End Element :nickname Start Element :salary Salary : 200000 End Element :salary End Element :staff End Element :company
SAX