2009-11-18 5 views
0

quelqu'un peut-il dire comment utiliser l'outil ANTLR (en Java) pour créer notre propre grammaire pour les documents xml et comment analyser ces documents en utilisant l'outil ANTLR (en java)?Comment utiliser ANTLR pour analyser le document xml

+0

Y a-t-il une raison pour laquelle vous voulez utiliser ANTLR pour cela et pas un analyseur XML? –

+0

Je voudrais créer mes propres grammaires pour les documents xml et aussi vouloir construire un analyseur pour analyser ces documents. SI il existe un autre outil disponible pour rendre la tâche plus simple? – Madhan

Répondre

1

Découvrez ANTXR, ma dérivation ANTLR qui prend en charge les balises XML dans la grammaire elle-même. Vous pouvez utiliser SAX ou XMLPull comme frontal. (Note: il est basé sur 2.x ANTLR)

http://javadude.com/tools/antxr/index.html

exemple court:

header { 
package com.javadude.antlr.sample.xml; 

import java.util.List; 
import java.util.ArrayList; 
} 

class PeopleParser extends Parser; 


document returns [List results = null] 
    : results=<people> EOF 
    ; 

<people> returns [List results = new ArrayList()] 
    { Person p; } 
    : (p=<person> { results.add(p); } )* 
    ; 

<person> returns [Person p = new Person()] 
    { 
    String first, last; 
    p.setId(@id); // attributes are read using "@xxxx" 
    } 
    : (first=<firstName> { p.setFirstName(first); } 
    | last=<lastName> { p.setLastName(last); } 
    )* 
    ; 

<firstName> returns [String value = null] 
    : pcdata:PCDATA { value = pcdata.getText(); } 
    ; 

<lastName> returns [String value = null] 
    : pcdata:PCDATA { value = pcdata.getText(); } 
    ; 
1

Si vous voulez écrire un complètement conforme (même non-validation) analyseur XML, vous devez lire la Spécification W3C (http://www.w3.org/TR/REC-xml/). Vous devrez traiter des sous-ensembles de DTD internes et externes, des entités de paramètres et des entités générales. Ce sera une tâche majeure, même avec ANTLR. Vous devrez être en mesure de résoudre les URL et de gérer les espaces de noms. Et beaucoup plus.

Je suppose que vous souhaitez analyser uniquement un sous-ensemble (bien que je ne pense pas que ce soit une bonne idée d'écrire des analyseurs non conformes pour les normes). Dans ce cas, la première chose à faire est d'écrire l'EBNF pour votre sous-ensemble. Alors il devrait être assez simple :-)

EDIT Pour être très clair: tout ce qui n'est pas conforme à la spécification complète n'est PAS XML. Vous parlez de créer votre "propre grammaire" pour XML, mais il existe déjà une grammaire définie pour XML qui ne peut pas être modifiée. Si vous souhaitez créer votre propre syntaxe qui est "comme XML" vous le pouvez, mais toute personne qui pense que c'est réellement XML sera supprimée car il y a beaucoup de constructions XML que vous ne supporterez pas (ou qui supporteront différemment).