IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Valider XML Discussion :

Streaming avec balises null


Sujet :

Valider XML

  1. #1
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut Streaming avec balises null
    Bonjour à tous,

    Nous nous tournons vers la communauté car nous sommes confronté à un problème avec plus aucune autre idée ou piste pour le résoudre.

    Nous sommes parti de xsd.exe afin de générer les classes associées au schema cityGML (scéma standartisé représentant la sémantisation d'une ville). Comme pour kml, les attributs représentant l'adresse d'un bâtiment sont définis dans un schéma externe, xAL.xsd que nous avons utilisé pour généré notre lib.

    En outre, lorsque l'on essaye de lire un élément par streaming/parsing, tout se passe (presque) bien : les élément xAL sont bien là (et valider via le schéma), mais toutes les valeurs des balises sont lues comme étant NULL. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <?xml version="1.0" encoding="utf-8"?>
    <!-- CityGML Version No. 2.0, February 2012 -->
    <!-- CityGML - GML 3.1.1 application schema for 3D city models -->
    <!-- International encoding standard of the Open Geospatial Consortium, see http://www.opengeospatial.org/standards/citygml -->
    <!-- Jointly developed by the Special Interest Group 3D (SIG 3D) of GDI-DE, see http://www.sig3d.org               -->
    <!-- For further information see: http://www.citygml.org -->
    <CityModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/citygml/2.0"
    	xmlns:xAL="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" xmlns:xlink="http://www.w3.org/1999/xlink"
    	xmlns:gml="http://www.opengis.net/gml" xmlns:dem="http://www.opengis.net/citygml/relief/2.0"
    	xmlns:bldg="http://www.opengis.net/citygml/building/2.0"
    	xsi:schemaLocation="http://www.opengis.net/citygml/building/2.0 ../../CityGML/building.xsd http://www.opengis.net/citygml/relief/2.0 ../../CityGML/relief.xsd urn:oasis:names:tc:ciq:xsdschema:xAL:2.0 http://docs.oasis-open.org/election/external/xAL.xsd">
    	<gml:name>3D city model LOD2 without Appearance</gml:name>
    	<gml:boundedBy>
    		<gml:Envelope srsDimension="3" srsName="urn:ogc:def:crs,crs:EPSG::25832,crs:EPSG::5783">
    			<gml:lowerCorner>458868.0 5438343.0 112.0</gml:lowerCorner>
    			<gml:upperCorner>458892.0 5438362.0 117.0</gml:upperCorner>
    		</gml:Envelope>
    	</gml:boundedBy>
     
    	<cityObjectMember>
    		<bldg:Building gml:id="GML_7b1a5a6f-ddad-4c3d-a507-3eb9ee0a8e01">
    			<bldg:address>
    				<Address>
    					<xalAddress>
    						<xAL:AddressDetails>
    							<xAL:Country>
    								<xAL:CountryName>Truite</xAL:CountryName>
    							</xAL:Country>
    						</xAL:AddressDetails>
    					</xalAddress>
    				</Address>
    			</bldg:address>
    		</bldg:Building>
    	</cityObjectMember>
     
    </CityModel>
    nous donne à la lecture la bonne structure du fichier, mais la balise CountryName n'a pas de valeur (le noeud est vide), et c'est le cas pour tous les éléments définis dans xAL.

    Le problème pourrait venir de xerces, mais dans ce cas, nous n'arrivons pas à voir d'où cela pourrait venir.

    Quelqu'un a-t-il déjà rencontré un problème similaire (avec xerces ou xsd) ? Toutes idées est la bienvenue car de notre côté on sèche totalement...
    For crying out loud !

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Faites voir la ligne que vous utilsez pour obtenir la "valeur" de CityName, avec ça on peut faire une idée quel genre de parseur et modèle d'objets est mis au travail?

  3. #3
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    ok, désolé pour le manque de précision.

    Pour parser, on utilise, à priori xerces 3.1, et la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            auto_ptr<CityModelType> iCity( CityModel(_fileXML), xml_schema::flags::keep_dom) );
    J'ai également associé les flags dont_validate & dont_initialize selon toutes les configurations possibles.

    Je suis aussi rentré dans le code du parseur afin de voir l'implémentation de CityModel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
      ::std::auto_ptr< ::core::CityModelType >
      CityModel (const ::std::string& u,
                 ::xml_schema::flags f,
                 const ::xml_schema::properties& p)
      {
        ::xsd::cxx::xml::auto_initializer i (
          (f & ::xml_schema::flags::dont_initialize) == 0,
          (f & ::xml_schema::flags::keep_dom) == 0);
     
        ::xsd::cxx::tree::error_handler< char > h;
     
        ::xml_schema::dom::auto_ptr< ::xercesc::DOMDocument > d (
          ::xsd::cxx::xml::dom::parse< char > (
            u, h, p, f));
     
        h.throw_if_failed< ::xsd::cxx::tree::parsing< char > > ();
     
        ::std::auto_ptr< ::core::CityModelType > r (
          ::core::CityModel (
            d, f | ::xml_schema::flags::own_dom, p));
     
        return r;
      }

    Et un exemple de la fonction parse pour les éléments xAL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     void Country::
      parse (::xsd::cxx::xml::dom::parser< char >& p,
             ::xml_schema::flags f)
      {
        for (; p.more_elements (); p.next_element ())
        {
          const ::xercesc::DOMElement& i (p.cur_element ());
          const ::xsd::cxx::xml::qualified_name< char > n (
            ::xsd::cxx::xml::dom::name< char > (i));
     
          // CountryName
          //
          if (n.name () == "CountryName" && n.namespace_ () == "urn:oasis:names:tc:ciq:xsdschema:xAL:2.0")
          {
            ::std::auto_ptr< CountryName_type > r (
              CountryName_traits::create (i, f, this));
     
            this->CountryName_.push_back (r);
            continue;
          }
    Le code étant au départ généré par xsd est plutôt complexe et je ne maitrise (pas encore )tout
    For crying out loud !

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je ne suis pas qualifié du tout pour travailler sur un code cpp de ce genre, mais c'est un rendrement cpp en parallel avec jaxb en java. Le texte du CountryName devrait engendrer dans le
    auto_ptr<Country> c
    et de par
    c->CountryName()
    un peu comme ce document sur CodeSynthesis
    http://www.codesynthesis.com/products/xsd/
    Est-ce que le r est sur la monnaie ou près, je n'en sais rien: regardez le... Désolé que je ne suis pas capable de aider dans ce contexte du langage.

Discussions similaires

  1. Popup avec balise div
    Par Kerod dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/05/2005, 15h16
  2. Addition avec terme NULL
    Par blackfelix dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/10/2004, 08h53
  3. [JDBC] retour de requete sql avec valeur NULL
    Par maxxou dans le forum JDBC
    Réponses: 3
    Dernier message: 13/09/2004, 14h40
  4. Pb requete avec valeurs nulles
    Par James85 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/04/2004, 10h20
  5. generer xsl depuis xml avec balises inconues ?
    Par cedre dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 24/06/2003, 09h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo