Académique Documents
Professionnel Documents
Culture Documents
Didier DONSEZ
Université Joseph Fourier (Grenoble 1)
IMA – IMAG/LSR/ADELE
'LGLHU'RQVH]#LPDJIU
2
Sommaire
■ Rappel XML
■ Objectif
■ Outils
• JAXB
• java.beans.XMLDecoder/XMLEncoder
• Castor
• XMLBeans
'LGLHU'RQVH]-DYD;0/ELQGLQJ
• Zeus
• JDOM
3
■ Document semi-structuré
• Bien formé
• Valide (respecte une structure DTD ou XML Schema)
■ Exemple
"[PO YHUVLRQ "!
86$GGUHVV!
QDPH!$OLFH6PLWKQDPH!
VWUHHW!+XQWLQJWRQ$YHVWUHHW!
FLW\!%RVWRQFLW\!
'LGLHU'RQVH]-DYD;0/ELQGLQJ
VWDWH!0$VWDWH!
]LS!]LS!
86$GGUHVV!
4
■ Héritage de SGML
■ Exemple
'2&7<3(86$GGUHVV >
(/(0(1786$GGUHVVQDPHVWUHHWFLW\VWDWH]LS!
(/(0(17QDPH 3&'$7$!
(/(0(17VWUHHW 3&'$7$!
(/(0(17FLW\ 3&'$7$!
(/(0(17VWDWH 3&'$7$!
(/(0(17]LS 3&'$7$!
@!
'LGLHU'RQVH]-DYD;0/ELQGLQJ
■ Critiques
• pas de typage, pas de cardinalité, pas d’imbrication, …
5
0DSSLQJ
'LGLHU'RQVH]-DYD;0/ELQGLQJ
UHVSHFWH LQVWDQFHGH
8QPDUVKDO
'RFXPHQW;0/ YDOLGDWLRQ 2EMHW-DYD
PDUVKDO
10
Usage
• Rappel WSDL
• Les champs de messages sont des types XML Schema
• Désérialisation/Sérialisation
• Java vers/depuis les paramètres des messages SOAP
11
Exemple de classe Java générée
à partir d’un schéma ou d’une DTD
■ Exemple
SXEOLFFODVV86$GGUHVV ^
SXEOLF86$GGUHVV 6WULQJQDPH6WULQJVWUHHW6WULQJFLW\
6WULQJVWDWH6WULQJ]LS^«`
SXEOLF6WULQJJHW1DPH^«`
SXEOLFYRLGVHW1DPH6WULQJQDPH^«`
SXEOLF6WULQJJHW6WUHHW^«`
SXEOLFYRLGVHW6WUHHW6WULQJVWUHHW^«`
««
SXEOLFYRLGPDUVKDO2XWSXW6WUHDP RXWWKURZV,2([FHSWLRQ ^«`
'LGLHU'RQVH]-DYD;0/ELQGLQJ
SXEOLFVWDWLF86$GGUHVVXQPDUVKDO,QSXW6WUHDP LQ
WKURZV,2([FHSWLRQ ^«`
«6$;'20«
`
12
Exemple d’usage
a.setName="Alice Dow";
'LGLHU'RQVH]-DYD;0/ELQGLQJ
Outils
■ Type
• Génération à la conception
• Possibilité de configurer les champs à lier, …
• Génération à la Exécution
• Pas de configuration
■ Procédé
• Automatique (conception, exécution)
• Se base sur l’introspection Java, JavaBeans (setter/getter)
• Manuelle (conception)
'LGLHU'RQVH]-DYD;0/ELQGLQJ
• GUI, …
■ Cibles
• Tout objet Java
• Sous typage d’une classe racine (EJB, …)
• JavaBeans seulement
14
Outils
■ Type (2)
• Centré Document
• Générer des classes Java à partir de tout type de document
DOM +/- API propriétaire
• Centré Objet
• Générer des schémas XML et DTD à partir de toute classe Java
DTDs et XML Schémas propriétaires
• Centré Données
'LGLHU'RQVH]-DYD;0/ELQGLQJ
Outils
■ Conception
• VB, C#, C++ (Microsoft COM ou .NET)
• .NET, SchemaCoder
• Java
• Exolab’s Castor http://castor.exolab.org/
• Sun’s JAXB
• ObjectWeb JORM ??
• ZOPE, Zeus (enhydra), Schema2Java, Oracle XML, Informix, …
'LGLHU'RQVH]-DYD;0/ELQGLQJ
■ Exécution
• J2SE1.4 java.beans.XMLEncoder/XMLDecoder
• XMLConverter, JSX, …
16
JAXB (SUN)
■ Remarque
• Early Access
'LGLHU'RQVH]-DYD;0/ELQGLQJ
V\PERO!&6&2V\PERO!
TXDQWLW\!TXDQWLW\!
GDWH!GDWH!
WUDGH!
WUDGHEDWFK!
18
Les DTDs
(/(0(17 WUDGH V\PERO TXDQWLW\ OLPLW"GDWH!
$77/,67 WUDGH
DFFRXQW &'$7$5(48,5('
DFWLRQ EX\ _ EX\WRFRYHU _ VHOO _ VHOOVKRUW5(48,5('
!
± &RQYHUWLVVHXUGHW\SH-DYD!
FRQYHUVLRQ QDPH SULFHW\SH MDYDPDWK%LJ'HFLPDO!
FRQYHUVLRQ QDPH GDWHW\SH MDYDXWLO'DWH
SDUVH &QYSDUVH'DWH SULQW &QYSULQW'DWH
!
$WWULEXWV-DYD!
'LGLHU'RQVH]-DYD;0/ELQGLQJ
HOHPHQW!
Classe de conversion
Utilisation
SXEOLFFODVV 7UDGH/LVWHU ^
SXEOLF VWDWLFYRLG PDLQ6WULQJ>@ DUJV WKURZV ([FHSWLRQ^
'LVSDWFKHUG 7UDGHQHZ'LVSDWFKHU
'LGLHU'RQVH]-DYD;0/ELQGLQJ
java.beans.XMLDecoder/XMLEncoder
■ Exemple codage
;0/'HFRGHUG QHZ;0/'HFRGHUQHZ)LOH,QSXW6WUHDP7HVW[PO
2EMHFWUHVXOW GUHDG2EMHFWGFORVH
-)UDPHMI -)UDPHUHVXOW
25
java.beans.XMLDecoder/XMLEncoder
■ Fiche Test.xml
"[PO YHUVLRQ HQFRGLQJ 87)"!
MDYDYHUVLRQ FODVV MDYDEHDQV;0/'HFRGHU!
REMHFW FODVV MDYD[VZLQJ-)UDPH!
YRLGSURSHUW\ QDPH!VWULQJ!6DPSOH ;0/(QFRGHUVWULQJ!YRLG!
YRLGSURSHUW\ ERXQGV!
REMHFW FODVV MDYDDZW5HFWDQJOH!
LQW!LQW!LQW!LQW!LQW!LQW!LQW!LQW!
REMHFW!
YRLG!
YRLGSURSHUW\ FRQWHQW3DQH!
'LGLHU'RQVH]-DYD;0/ELQGLQJ
YRLGPHWKRG DGG!
REMHFW FODVV MDYD[VZLQJ-%XWWRQ!
YRLGSURSHUW\ ODEHO!VWULQJ!+HOOR:RUOGVWULQJ!YRLG!
REMHFW!
YRLG!
YRLG!
YRLGSURSHUW\ YLVLEOH!ERROHDQ!WUXHERROHDQ!YRLG!
REMHFW!MDYD!
26
Castor (Exolab)
class org.exolab.castor.xml.Marshaller … {
static void marshal(Object obj, DocumentHandler handler); // SAX
static void marshal(Object obj, Node node); // DOM
static void marshal(Object obj, Writer writer); // File
…
}
class org.exolab.castor.xml.Unmarshaller … {
Object unmarshall(EventProducer events); // SAX
'LGLHU'RQVH]-DYD;0/ELQGLQJ
Castor
&UHDWH DQHZ 3HUVRQ
3HUVRQSHUVRQ QHZ 3HUVRQ$OLFH6PLWK
SHUVRQVHW'DWH2I%LUWKQHZ'DWH
&UHDWH D)LOHWRPDUVKDOWR
ZULWHU QHZ )LOH:ULWHUSHUVRQ[PO
0DUVKDO WKHSHUVRQREMHFW
0DUVKDOOHUPDUVKDOSHUVRQ ZULWHU
'LGLHU'RQVH]-DYD;0/ELQGLQJ
0DUVKDO WKHSHUVRQREMHFW
3HUVRQSHUVRQ 3HUVRQ8QPDUVKDOOHUXQPDUVKDO3HUVRQFODVV UHDGHU
SHUVRQVHW1DPH$OLFH'RZ
29
Castor - Mapping
^UHWXUQQDPH`
QRP! ILHOGQDPH QDPH!
SXEOLF YRLGVH1DPH
HPSOR\HH! ELQG[POQDPH QRP
6WULQJQDPH
QRGH HOHPHQW!
^WKLVQDPH QDPH`
ILHOG!
`
FODVV!
PDSSLQJ!
30
Castor - Mapping
/RDG0DSSLQJ
0DSSLQJPDSSLQJ QHZ 0DSSLQJ
PDSSLQJORDG0DSSLQJPDSSLQJ[PO
Apache XMLBeans
KWWS[POEHDQVDSDFKHRUJ
■ Basé sur XML Schema
• Full XML Schema support.
• Full XML Infoset fidelity.
■ 3 API
• XmlObject
• The java classes that are generated from an XML Schema are all derived
from XmlObject. These provide strongly typed getters and setters for each of
the elements within the defined XML. Complex types are in turn
XmlObjects.
• XmlCursor
'LGLHU'RQVH]-DYD;0/ELQGLQJ
• From any XmlObject you can get an XmlCursor. This provides efficient, low
level access to the XML Infoset. A cursor represents a position in the XML
instance.
• SchemaType
• XMLBeans provides a full XML Schema object model that you can use to
reflect on the underlying schema meta information.
32
JDOM (http://www.jdom.org/)
■ TODO
'LGLHU'RQVH]-DYD;0/ELQGLQJ
34
Ressources
■ http://www.rpbourret.com/xml/XMLDataBinding.htm
■ Chapitre 15
• http://www.wrox.com/Support/PDF/SampleChapter_5059.pdf
'LGLHU'RQVH]-DYD;0/ELQGLQJ