Associer un champs xml a son bon schema xml

Résolu
dedzep Messages postés 54 Date d'inscription vendredi 1 février 2002 Statut Membre Dernière intervention 8 février 2007 - 20 déc. 2006 à 15:43
dedzep Messages postés 54 Date d'inscription vendredi 1 février 2002 Statut Membre Dernière intervention 8 février 2007 - 30 janv. 2007 à 11:09
j'ai créé une base sql server 2005 contenant des articles
ces articles contiennent des objets tres different (une voiture, un cheval, un ordi, un voyage)
les caracteristiques de ces articles sont donc tres differents
je vais les stocker dans un champs xml
pour cela j'ai créé autant de schema xml que de caracteristiques
je veux donc lorsque je lis un article et que je sais que c'est un micro-onde, lire le champs xml avec le bon format (celui du schema "micro-ondes")




suivant les recommandant Microsoft j'ai créé et stocké mes schemas dans sql server 2005 dans le dossier suivant :
MaBase > Programmability > Types > XML schema Collection
ceci par la fonction
/****** Object:  XmlSchemaCollection [dbo].[SchemaXMLMicro-ondes]    Script Date: 10/20/2006 14:14:04 ******/
CREATE XML SCHEMA COLLECTION [dbo].[SchemaXMLMicro-ondes] AS N' ect...
comme cela mes schemas sont sauvegardés avec ma base




Mon probleme est le suivant :
lorsque je lis dans VS2005 ASP.VB un enregistrement de ma table il faut que je recupere le schema associé à mon champs xml.


Dans ma page aspx je lis mon enregistrement et je sais que c'est un four micro-ondes par exemple.
De là il faut que je crée un bloc affichant les caracteristiques de mon produit se trouvant dans le champs XML de l'enregistrement.

C'est la que je bloque !
si le schema est dans un fichier sur mon site, je sais faire : (par exemple en vb)

    Private Const document As String = "..\books.xml"
    Private Const xsdDocument As String = "..\books.xsd"


 Dim schemaInfo As New XmlSchemaInfo()
 Dim serializer As XmlSerializer = Nothing
 Dim myBooks As Books = Nothing


 Using reader As StreamReader = New StreamReader(document)
  serializer = New XmlSerializer(GetType(Books))
  myBooks = CType(serializer.Deserialize(reader), Books)
 End Using


 Dim xsv As XmlSchemaValidator = CreateValidator()
 xsv.Initialize()


 xsv.ValidateElement("books", "http://www.example.com/my-bookshelf", schemaInfo)


 xsv.ValidateEndOfAttributes(schemaInfo)


 Dim book As bookType
 For Each book In myBooks.book
  xsv.ValidateElement("book", "http://www.example.com/my-bookshelf", schemaInfo)
 ect...
 

Mais si le schema est stocké dans sql server 2005 ?????
comment faire en T-sql ou en asp.net vb ?

 ---------------------------

Léo dit dedZep
----------------------
pour acheter sur le Net il faut une carte bleue
Léo Tseu

1 réponse

dedzep Messages postés 54 Date d'inscription vendredi 1 février 2002 Statut Membre Dernière intervention 8 février 2007
30 janv. 2007 à 11:09
mon schema n'est pas un fichier xsd mais un champs que je recupere sur sql server via cette requette

SELECT XML_SCHEMA_NAMESPACE(sch.name, xsd.name)
FROM sys.xml_schema_collections AS xsd
JOIN sys.schemas AS sch ON xsd.schema_id = sch.schema_id
WHERE xsd.name = 'SchemaXML_4x4'

maintenant (et juste pour rire) je suis incapable de recuperer le contenu de ce flux.
plus exactement je ne recupere que les intitulés de niveau 1
(remplacer les "*" pas le symbole "plusGrandQue" ou "PlusPetitQue")

*xsd:element name="COMMENTAIRES"*
*xsd:element name="CONSOMMATION"*
*xsd:element name="OPTIONS"*
*xsd:element name="PERSONNALISATION"*
*xsd:element name="items"*

mais pas
*xsd:element name="ville" type="xsd:string" /*
*xsd:element name="route" type="xsd:string" /*
*xsd:element name="mix" type="xsd:string" /*
contenus dans
*xsd:element name="CONSOMMATION"*

et là je galere grave :-(

Léo dit dedZep
----------------------
pour acheter sur le Net il faut une carte bleue
Léo Tseu
3
Rejoignez-nous