Bonjour,
je cherche à créer une définition XML SCHEMA pour typer une colonne XML dans MS SQL Server (le parser).
Mes documents XML finaux (utilisateur) doivent avoir la forme suivante :
Exemple :
Il peut bien entendu y avoir un nombre quelconque de DATA et META_DATA est ma racine (elle ne doit pas être présentée dans le XSD).
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 <META_DATA> <DATA> <NAM="PERMIS_DE_CONDUIRE"/> <VAL="A"/> <TYP="string"/> </DATA> <DATA> <NAM="DATE_NAISSANCE"/> <VAL="1960-04-21"/> <TYP="date"/> </DATA> <DATA> <NAM="POIDS"> <VAL="79"> <TYP="BIGINT"/> </DATA> </META_DATA>
J'ai réussit à créer ceci :
Qui dit la chose suivante :
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 CREATE XML SCHEMA COLLECTION dbo.XML_XSD_META AS N'<?xml version="1.0" encoding="UTF-16"?> <xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:complexType name="DATA"> <xsd:sequence minOccurs="1" maxOccurs="unbounded"> <xsd:element name="NAM" minOccurs="1" maxOccurs="1"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="128"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="VAL" minOccurs="1" maxOccurs="1"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="256"/> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:schema>';
l'élément DATA est constitué d'au moins une occurrence et au plus d'un nombre quelconque
il contient :
- une élément NAM présent impérativement 1 fois de valeur string et de longueur 128
- une élément VAL présent impérativement 1 fois de valeur string et de longueur 256
Mais il manque la qualification de l'élément TYP...
Pour ce qui est de ce troisième élément (TYP), celui ci doit être de type string et ne peut avoir que les valeurs suivantes :
DATE, DATETIME2(0), TIME, FLOAT, BIGINT, VARCHAR(256), NVARCHAR(256), BIT
Pour ceci j'ai essayé les syntaxes suivantes :
ou encore :
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 <xsd:unique name="TYP"> <xsd:selector xpath="sqlType"/> <xsd:field xpath="sqlName"/> </xsd:unique> ... <sqlType> <sqlName>VARCHAR(256)</sqlName> <sqlName>NVARCHAR(256)</sqlName> <sqlName>DATE</sqlName> <sqlName>TIME</sqlName> <sqlName>DATETIME2(0)</sqlName> <sqlName>FLOAT</sqlName> <sqlName>BIGINT</sqlName> <sqlName>BIT</sqlName> </sqlType>
Mais j'avoue que je suis à sec ! Rien ne marche et je trouve pas de doc sur le sujet !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <xsd:element name="TYP" minOccurs="1" maxOccurs="1"> <xsd:complexType> <xsd:choice> <xsd:element ref="VARCHAR(256)"/> <xsd:element ref="NVARCHAR(256)"/> <xsd:element ref="DATE"/> <xsd:element ref="TIME"/> <xsd:element ref="DATETIME2(0)"/> <xsd:element ref="FLOAT"/> <xsd:element ref="BIGINT"/> <xsd:element ref="BIT"/> </xsd:choice> </xsd:complexType> </xsd:element>
D'avance merci
A +
Partager