Validation de valeur (choix dans une liste)
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 :
Code:
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> |
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).
J'ai réussit à créer ceci :
Code:
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>'; |
Qui dit la chose suivante :
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 :
Code:
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> |
ou encore :
Code:
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> |
Mais j'avoue que je suis à sec ! Rien ne marche et je trouve pas de doc sur le sujet !
D'avance merci
A +