Archive for the ‘XML/XSD’ Category

January 16th, 2009 @ 7:51pm | njames | Categories Java, XML/XSD | No Comments »
Voici une façon de le faire rapidement et proprement. Ici le but du jeu est de mettre à jour le contenu texte du nœud name (en lui appliquant un trim-plus-plus, version améliorée d'un String.trim()).
String file_path = dir_dataset_path + "/" + dir_path + "/" + file_name;
 
Document d = null;
try {
	d = dbfactory.newDocumentBuilder().parse(new InputSource(file_path));
} catch (SAXException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
} catch (ParserConfigurationException e) {
	e.printStackTrace();
}
NodeList nl = d.getElementsByTagName("name");
for (int i = 0; i < nl.getLength(); ++i) {
	Node n = nl.item(i);
	n.setTextContent(trimpp(n.getTextContent()));
}
Result result = new StreamResult(new File(file_path));
Source source = new DOMSource(d);
try {
	transformer.transform(source, result);
} catch (TransformerException e) {
	e.printStackTrace();
}
Mais cela reste du DOM, quand j'aurais le temps je garderai du côté de StAX ou WAX...
January 16th, 2009 @ 5:07pm | njames | Categories Java, XML/XSD | No Comments »
Pour écrire des scripts XQuery sous Eclipse, il n'y a pas pléthore de plugins pour apporter de l'autocomplétion, coloration syntaxique, et de la vérification de syntaxe.
  • DataDirect XQuery
  • XQDT
  • xqIde: coloration syntaxique, vérification de syntaxe, génération de xqDoc, et intégration avec la database Marklogic pour l'exécution de requête XQuery.
Bug avec XQDT: Si dans votre précédente session d'Eclipse, le Workbench contenait un ficher .xq ouvert, le prochain lancement d'Eclipse est bloqué par l'exception suivante:
Exception in thread "Thread-2" org.eclipse.swt.SWTException: Device is
disposed
at org.eclipse.swt.SWT.error(SWT.java:3777)
at org.eclipse.swt.SWT.error(SWT.java:3695)
at org.eclipse.swt.SWT.error(SWT.java:3666)
at org.eclipse.swt.widgets.Display.error(Display.java:1142)
at org.eclipse.swt.widgets.Display.wake(Display.java:4068)
at
org.eclipse.ui.application.WorkbenchAdvisor$1.run(WorkbenchAdvisor.java:797
)
Cette exception bloque complètement le chargement d'Eclipse. Si il n'y a pas de .xq d'ouvert dans la session précédente de Eclipse, il n'y a pas de problèmes, le plugin fonctionne correctement. Problème rencontré avec Java1.6, Ubuntu 8.04 Hardy Heron et Eclipse Ganymede for Java developer Linux GTK.
November 1st, 2008 @ 1:58am | njames | Categories CBIR, Research, XML/XSD | No Comments »
J'investigue sur LabelMe, en ce moment sur les annotations faites manuellement et disponible sous la forme de fichiers XML générés par la toolbox MATLAB du projet. Ainsi je traite les documents XML, et un outil très pratique est http://www.hitsw.com/xml_utilites/ pour retrouver une grammaire XSD à partir d'une instance, c'est très pratique. Cela m'a permis d'obtenir une grammaire des annotations LabelMe, d'où la génération d'un XML-Binding et un (un)marshalling en Java.
October 31st, 2008 @ 3:41pm | njames | Categories Java, XML/XSD | No Comments »
Pour un petit projet j'ai intégré une grammaire XSD de DublinCore avec l'élément import dans une grammaire perso issue de mes travaux, imageLibrary.xsd. A propos, une ressource documentaire très intéressante sur les XSD est: http://www.datypic.com/books/defxmlschema/chapter04.html. Dans le cas présent, c'est une application Web de recherche d'imagette de livre depuis les AWS, Amazon Web Services, et l'ajout ou le retrait d'une imagette à un profil de lecture en quelque sortes. Les imagettes sont stockées en local sur le serveur, et un fichier XML pour chaque profil contient les informations sur les fichiers images (metadata physiques, i.e. location, size etc.) ainsi que les données relatives au document obtenues par les AWS et intégrées dans des éléments XML DublinCore (creator, title etc.). Je génère des pages XHTML qui contiennent mes éléments DublinCore marshallés, il faut ainsi que JAXB génère des fragments XML et non un document XML complet. Pour faire en sorte que JAXB ne génère pas l'instruction processing du document XML lors de l'opération de marshalling, il faut utiliser la propriété suivante:
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
m étant un Marshaller. Autre point: bien que j'ai spécifié que mon élément contenant mes données DublinCore comme élément du document XML, (i.e. il fait partie des éléments déclarés dans ma XSD), JAXB ne veut pas marshaller uniquement cet élément. Une exception est levée disant qu'il manque l'annotation @XmlRootElement dans la classe de binding de cet élément. Ce post sur java.net en parle mais ne répond pas vraiment au problème. Ajouter cette annotation à la classe de binding résout le problème mais l'élément étant déclaré dans ma XSD, cette modification ne devrait pas être nécessaire... Cependant, pour Unmarshaller un fragment XML, on peut passer par un XMLStreamReader, et passer cet objet à l'unmarshaller (une rapide overview), on doit pouvoir en faire de même pour le marshalling.
March 31st, 2008 @ 3:49pm | njames | Categories CBIR, XML/XSD | No Comments »
Dans le cadre d'un prototype sur mes recherches, j'investigue sur MPEG-7. Au début, j'avais définit un format de fichier de description, j'ai écrit une grammaire XML assez sommaire pour avancer assez rapidement, et produire des fichiers XML pour décrire, stocker des descripteurs, et annoter mes documents multimédia, mais au fur et à mesure que j'avançais, je m'approchais vraiment de ce que propose la norme. C'est pourquoi depuis quelques temps, je m'attaque à un XML binding en Java de la norme MPEG-7.
Java XML binding
Le langage Java propose dans son API un mécanisme de XML binding (depuis Java1.6, dans les versions précédente de Java c'était l'API Jaxb, Java API for XML binding, qui était située dans un package externe, le JWSDP Java Web Services Developer Pack), et pour les normes comme MPEG-7 basé sur des XML-schemas, c'est très pratique. (J'aurais bientôt a travailler sur MPEG-21 pour les besoins d'un projet de labo, j'essayerai la même approche pour la production d'une requête MPEG-21, j'en reparlerai ici en temps et en heure). Pour la génération du binding, il y a JAXB (Sun) et XMLBeans (Apache), avec ces 2 frameworks, il y a des problèmes de compilations du bindings (grammaire non valide), dans les deux cas il semble y avoir un problème avec des définitions d'éléments au noms identique, ce n'est pas un problème de définition dans la norme, mais plutôt des outils JAXB et XMLBeans2.3 qui ne gèrent pas correctement l'inheritance à outrance utilisé dans la norme MPEG-7. (réf. nécessaire). Quelques liens web parlant du problème: Il semble plus sérieux d'utiliser XMLBeans2.3, car malgré une petite modification aux schemas MPEG-7 à faire, la modification reste acceptable. JAXB quand à lui nécessite de modifier le nom de certains éléments, ce qui pourrait amener à des problèmes (fichiers MPEG-7 générés non MPEG-7 compliant).
Avec JAXB
Avec JAXB (version java1.6) des collisions de noms sont un problème, voir http://cbvr.ims.tuwien.ac.at/user-documentation/mpeg7-java-binding-1.pdf. Il y en a plusieurs, c'est bloquant. La correction à apporter aux schemas est de modifier les noms de plusieurs éléments (à priori pas très pratique donc, car le MPEG-7 résultant ne valide plus la norme). La correction proposée ci-dessous pour XMLBeans2.3 fonctionne également avec JAXB, mais elle ne suffit pas, il y a des propriétés au nom identique dans mds-2001.xsd et Jaxb génère une erreur "already define"; Une solution pour contourner cela semble l'utilisation de custumizations JAXB.
Avec XMLBeans
Avec XMLBeans2.3, il y a un problème dans audio-2001.xsd mais qui peut être corrigé rapidement, voir http://iiss039.joanneum.at/cms/index.php?id=231 (recherche menée par Joanum Research propose également un profile mpeg-7, le DAVP detailed AudioVisual Profile, pour la description de contenu audiovisuel simple, dans le sens de single);
Quelques liens:
  • VizIR web server project: équipe autrichienne, membre du noe DELOS, utilise JAXB pour la génération du binding;
  • le laboratoire Joaennum propose une librairie en C++ pour manipuler des documents MPEG-7, (avec un XML-binding en C++ développé maison), cette librairie de contient pas de features extractors. Ce laboratoire propose également une génération de XML-binding en Java utilisant XMLBeans (déjà cité plus haut);
  • mpeg-7 and mpeg-21 community portal, voir dans la section "software and tools" une liste de projet autour de ou utilisant MPEG-7;
  • LAS, Lightweigth Application Server for mpeg-7, utilise XMLBeans, dans le cadre du projet MECCA;
  • un projet d'élève de l'université polytechnique de catalogne d'annotation de photographie, utilise XMLBeans. D'autres projets d'élèves de la même université qui utilise également XMLBeans;
  • le site du NIST pour récupérer les schemas, et qui propose un validateur;


 Valid XHTML 1.0 Transitional Valid CSS! WordPress