1/J'ai ce shᅵma info.xsd :
<?xml version="1.0" encoding="utf8" ?>
<xsd:schema xmlns=""
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="">
<xsd:element name="description" type="xsd:string"/>
<xsd:element name="services-test" type="xsd:string"/>
<!-- definition du noeud racine 'services-test' -->
<xsd:complexType name="services-test">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0"
name="mat" type="mat"/>
</xsd:sequence>
<xsd:attribute name="noNamespaceSchemaLocation"
type="xsd:token"/>
</xsd:complexType>
<!-- definition du noeud 'mat' -->
<xsd:complexType name="mat">
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="0"
name="description" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="1"
name="contrats" type="contrats"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:token" use="required"/>
</xsd:complexType>
<!-- defintion du noeud 'contrats'-->
<xsd:complexType name="contrats">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0"
name="contrat" type="contrat"/>
</xsd:sequence>
</xsd:complexType>
<!-- validation du noeud 'contrat' -->
<xsd:complexType name="contrat">
<xsd:sequence>
<xsd:element name="description" type="xsd:string"/>
<xsd:element name="etatContrat" type="etatContrat"/>
<xsd:element name="services" type="services"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:token"/>
</xsd:complexType>
<!-- Validation de noeud 'EtatContrat' -->
<xsd:complexType name="etatContrat">
<xsd:sequence>
<xsd:element name="etat" type="etat"/>
</xsd:sequence>
<xsd:attribute name="dateEffet" type="xsd:string"
use="optional"/>
</xsd:complexType>
<xsd:complexType name="etat">
<xsd:sequence>
<xsd:element name="description" type="xsd:token"/>
</xsd:sequence>
<xsd:attribute name="name" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:NMTOKEN">
<xsd:enumeration value="test:etatContrat:prevu"/>
<xsd:enumeration
value="test:etatContrat:operationnel"/>
<xsd:enumeration
value="test:etatContrat:stabilise"/>
<xsd:enumeration
value="test:etatContrat:obsolescent"/>
<xsd:enumeration value="test:etatContrat:retire"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
<xsd:complexType name="services">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0"
name="service" type="service"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="service">
<xsd:sequence>
<xsd:element name="description" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="accessPoint" type="xsd:anyURI"/>
<xsd:attribute name="name" type="xsd:string" use="required" />
<xsd:attribute name="wsdl" type="xsd:anyURI" use="required" />
</xsd:complexType>
</xsd:schema>
2/ Le fichier xml suivant :
<?xml version="1.0" encoding="utf8"?>
<services-test>
<mat name="MAN">
<description>mat</description>
<contrats>
<contrat name="CONTRAT_MAN_top2">
<description>contrat CONTRAT_MAN_top2</description>
<etatContrat>
<etat name=":etatContrat:stabilise">
<description>Stabilisᅵ</description>
</etat>
</etatContrat>
<services>
<service name="RestitutionNomenclatureInterface"
wsdl="http://192.168.31.32:1511/mannaf_CA2_Z2/services/MAN/contrat_naf"
accessPoint="http://192.168.31.32:1511/mannaf_CA2_Z2/services/MAN/contrat_naf">
<description>Description</description>
</service>
<service name="RestitutionActivitesInterface"
wsdl="http://192.168.31.32:1511/mannaf_CA2_Z2/services/MAN/contrat_naf"
accessPoint="http://192.168.31.32:1511/mannaf_CA2_Z2/services/MAN/contrat_naf">
<description>Description</description>
</service>
</services>
</contrat>
</contrats>
</mat>
</services-test>
3/ Quand j'essaie de valider le fichier xml ᅵ partir de xsd :
xmllint --noout --schema ./info.xsd ./info.xml
./info.xml:2: element services-test: Schemas validity error : Element
'services-test': No matching global declaration available.
./info.xml fails to validate
Qq'un peut-il-me donner des infos ?
Merᅵi d'avance.
PS :
xmllint --version
xmllint: using libxml version 20632
compiled with: Threads Tree Output Push Reader Patterns Writer SAXv1
FTP HTTP DTDValid HTML Legacy C14N Catalog XPath XPointer XInclude Iconv
ISO8859X Unicode Regexps Automata Expr Schemas Schematron Modules Debug
Zlib
> <?xml version="1.0" encoding="utf8" ?>
> <xsd:schema xmlns=""
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> targetNamespace="">
>
> <xsd:element name="description" type="xsd:string"/>
[snip]
> xmllint --noout --schema ./info.xsd ./info.xml
> ./info.xml:2: element services-test: Schemas validity error : Element
> 'services-test': No matching global declaration available.
> ./info.xml fails to validate
>
Le message est pourtant clair. Tu as dᅵclarᅵ que l'ᅵlᅵment
service-test est une chaine, qui ne contient *pas* d'autrs ᅵlᅵments. Or,
dans ton fichier XML, service-test contient d'autres ᅵlᅵments. Il faut
donc que tu corrige ton XSD pour que la dᅵclaration de l'ᅵlᅵment soit en
accord avec ton besoin.
--
Mickaᅵl Wolff aka Lupus Michaelis
http://lupusmic.org
Merᅵi pour la rᅵponse
En fait,
services-test apparait 2 fois. C'est un fichier non modifiable (utilisᅵ
ailleurs aussi et qui est ᅵ *priori* validᅵ)
Comment le parser fait la diffᅵrence ?
<xsd:element name="services-test" type="xsd:string"/>
<!-- definition du noeud racine 'services-test' -->
<xsd:complexType name="services-test">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="mat"
type="mat"/>
</xsd:sequence>
<xsd:attribute name="noNamespaceSchemaLocation" type="xsd:token"/>
</xsd:complexType>
Mickaᅵl Wolff a ᅵcrit :
> Comment le parser fait la diffᅵrence ?
>
>
> <xsd:element name="services-test" type="xsd:string"/>
Le problᅵme est lᅵ. La XSD est fausse. La dᅵclaration de l'ᅵlᅵment
devrait etre :
<xsd:element name="services-test" type="services-test"/>
> <!-- definition du noeud racine 'services-test' -->
Ceci n'est pas la dᅵfinition du noeud racine. C'est la dᅵfinition du
type ᅵ complexe ᅵ qui doit etre utiliser dans la dᅵclaration de l'ᅵlᅵment.
> <xsd:complexType name="services-test">