Bonjour,
Je cherche à définir un ComplexType (par exemple bookType) qui exigerait un certain nombre d'éléments en fonction du contexte dans lequel il est utilisé.
Par exemple sur une requète getBooks, l'objet book exigerait un ID pour en obtenir les détails.
Au contraire sur un getBooksResponse, on aurait l'ID certe mais aussi le Title et l'Author.
Si j'illustre:
getBooks
et getBooksResponse
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 <?xml version="1.0" encoding="utf-8" ?> <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="bookType"> <xs:sequence minOccurs="1" maxOccurs="1"> <xs:element name="bookId" type="xs:ID" minOccurs="1" maxOccurs="1" /> </xs:sequence> </xs:complexType> <xs:element name="getBooks"> <xs:complexType> <xs:sequence minOccurs="1" maxOccurs="1"> <xs:element name="books" minOccurs="1" maxOccurs="1"> <xs:complexType> <xs:sequence minOccurs="1" maxOccurs="1"> <xs:element name="book" type="bookType" minOccurs="1" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Le problème c'est le conflit de nom de bookType.
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 <?xml version="1.0" encoding="utf-8" ?> <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="bookType"> <xs:sequence minOccurs="1" maxOccurs="1"> <xs:element name="bookId" type="xs:ID" minOccurs="1" maxOccurs="1" /> <xs:element name="title" type="xs:string" minOccurs="0" maxOccurs="1" /> <xs:element name="author" type="xs:string" minOccurs="0" maxOccurs="1" /> </xs:sequence> </xs:complexType> <xs:element name="getBooksResponse"> <xs:complexType> <xs:sequence minOccurs="1" maxOccurs="1"> <xs:element name="books" minOccurs="1" maxOccurs="1"> <xs:complexType> <xs:sequence minOccurs="1" maxOccurs="1"> <xs:element name="book" type="bookType" minOccurs="1" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Soit je le créé une seule fois dans le fichier xsd avec tous les éléments qu'il peut supporter et j'ai pas de conflit mais j'ai plus non plus de controle au niveau des champs requis contextuellement... cqfd
Soit je le créé plusieurs fois dans différents fichiers xsd puis je les regroupe via un Main.xsd mais c'est du pareil au même, yaura conflit de nom.
Je vois pas trop comment faire en fait à part bien sur faire un bookType1 et bookType2 etc... mais dans ce cas il faut que je redéfinisse chaque élément du bookType pour chaque contexte d'utilisation!
C'est quoi les best practices dans ce cas de figure?
Merci beaucoup.
Partager