Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Je voudrais savoir s'il est possible de contrôler la structure et le contenu d'un fichier XML contenant plusieurs fichiers XSD. Le fichier xml commence ainsi :
<?xml version="1.0" encoding="UTF-8"?> <OrderResponseList xmlns="rrn:org.xcbl:schemas/xcbl/v4_0/ordermanagement/v1_0/ordermanagement.xsd" xmlns:core="rrn:org.xcbl:schemas/xcbl/v4_0/core/core.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Bien sur, nous avons à notre disposition l'ensemble des fichiers xsd, et le but étant de controler que le fichier xml respecter bien les contraintes de l'ensemble des xsd auquelles le xml fait référence.
Vos idées sont les bienvenues,
PB version 12.1 build 7000
Hors ligne
Les fonctions XMLParseFile() et XMLParseString() te permettent de vérifier la validité d'un fichier xml (ou du contenu d'un fichier si le construis ou que tu l'as préalablement lu dans une chaîne).
Je les paramètres namespaceprocessing, schemaprocessing et schemafullchecking permettent ce que tu souhaites : valider le schéma. Si ton fichier est bien formé, peu importe que le schéma soit en plusieurs .xsd qui peuvent s'inclure, ou si il y a des namespaces, la validation traitera le tout.
Ici on valide par exemple des fichiers dont le début est
<S01 creationDateTime="2013-07-29T11:25:44Z" version="1.0" xsi:schemaLocation="http://www.bcl.lu/2013/S0.1 ../S01.xsd" xmlns="http://www.bcl.lu/2013/S0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
le schéma étant composé de 3 fichiers datatypes.xsd, S01.xsd et structures.xsd, le point d'entrée du schéma appelant les 2 autres par des includes :
<xs:schema xmlns="http://www.bcl.lu/2013/S0.1" xmlns:s01="http://www.bcl.lu/2013/S0.1" xmlns:s01dt="http://www.bcl.lu/2013/S0.1/datatypes" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.bcl.lu/2013/S0.1" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0"> <xs:import namespace="http://www.bcl.lu/2013/S0.1/datatypes" schemaLocation="datatypes.xsd"/> <xs:include schemaLocation="structures.xsd"/>
Le code PB pour la validation est
li_result = XMLParseString( arg_s_data, ValAlways!, is_last_error, True , True , True )
Hors ligne