Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[newbie] Validation XSD/XML

7 views
Skip to first unread message

apolloj

unread,
Oct 9, 2009, 6:48:57 PM10/9/09
to
Hi,

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

Mickaël Wolff

unread,
Oct 9, 2009, 7:10:31 PM10/9/09
to
apolloj wrote:

> <?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

apolloj

unread,
Oct 10, 2009, 5:34:57 AM10/10/09
to
Bonjour,

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 :

Mickaël Wolff

unread,
Oct 10, 2009, 10:56:10 AM10/10/09
to
apolloj wrote:
> En fait,
> services-test apparait 2 fois. C'est un fichier non modifiable (utilisᅵ
> ailleurs aussi et qui est ᅵ *priori* validᅵ)
Il n'apparait pas deux fois. Ce sont deux concepts diffᅵrents. Tu
devrais lire les spᅵcifications du W3C.

> 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">

0 new messages