Méta modèle en XML

En alternative à l’article que j’ai donné ici : http://sqlpro.developpez.com/cours/modelisation/metadonnees/
voici un exemple de méta modélisation fait en XML avec MS SQL Server…

PARTIE 1 – LES BASES DU META MODÈLE

1 – La table avec une colonne de méta données XML

CREATE TABLE T_PERSONNE_PRS
(PRS_ID           INT IDENTITY PRIMARY KEY,
 PRS_NOM          CHAR(32) NOT NULL,
 PRS_PRENOM_USUEL VARCHAR(25) NOT NULL,
 PRS_DATA         XML);
GO

2 – les données du test :

SQL_xml

INSERT INTO T_PERSONNE_PRS
VALUES
('DUPONT', 'Marc',
N'
<data>
  <date_de_naissance datatype="date">2001-01-12</date_de_naissance>
  <sexe datatype="char(5)">homme</sexe>
  <date_de_deces datatype="date">2014-07-18</date_de_deces>
</data>'
),
('MARTIN', 'Élise',
N'
<data>
  <date_de_naissance datatype="date">1988-06-07</date_de_naissance>
  <sexe datatype="char(5)">femme</sexe>
  <telephone_fixe datatype="varchar(20)">0622441189</telephone_fixe>
</data>'
);
GO

Deux personnes sont insérées avec des métadonnées différentes.

3 – La requête magique, qui extrait toutes les méta données d’un seul coup avec affichage du type !

SELECT X.PRS_ID, PRS_NOM, PRS_PRENOM_USUEL,  
       Txml.XMLdata.VALUE('fn:local-name(.)', 'NVARCHAR(256)') AS BALISE,
       Txml.XMLdata.VALUE('.', 'NVARCHAR(256)') AS VALEUR,
       Txml.XMLdata.VALUE('@datatype', 'NVARCHAR(256)') AS TYPE
FROM   T_PERSONNE_PRS AS X
       OUTER APPLY X.PRS_DATA.nodes('data/*') AS Txml(XMLdata);

Resultat :

PRS_ID   PRS_NOM    PRS_PRENOM_USUEL  BALISE              VALEUR          TYPE
-------- ---------- ----------------- ------------------- --------------- ----------
3        DUPONT     Marc              date_de_naissance   2001-01-12      date
3        DUPONT     Marc              sexe                homme           char(5)
3        DUPONT     Marc              date_de_deces       2014-07-18      date
4        MARTIN     Élise             date_de_naissance   1988-06-07      date
4        MARTIN     Élise             sexe                femme           char(5)
4        MARTIN     Élise             telephone_fixe      0622441189      varchar(20)

Il ne reste plus qu’à :
1) indexer le XML
2) faire de la requête finale une vue
3) implémenter la méthode modify sur le XML si vous voulez le modifier (ajout ou suppression d’un nœud, ou modification de la valeur dans un nœud existant).

Le livre sur Microsoft SQL Server 2014 : développez et administrez pour la performance – éditions Eyrolles

Frédéric Brouard, alias SQLpro, ARCHITECTE DE DONNÉES
Expert  S.G.B.D  relationnelles   et   langage  S.Q.L
Moste  Valuable  Professionnal  Microsoft  SQL Server
Société SQLspot  :  modélisation, conseil, formation,
optimisation,  audit,  tuning,  administration  SGBDR
Enseignant: CNAM PACA, ISEN Toulon, CESI Aix en Prov.

L’entreprise SQL Spot
Le site web sur le SQL et les SGBDR

MVP Microsoft SQL
Server

2 réflexions au sujet de « Méta modèle en XML »

  1. Avatar de lohwormlohworm

    Bonjour,

    Il faut écrire .value et non .VALUE dans la requête («  »VALUE » is not a valid function, property, or field. ») :

    SELECT X.PRS_ID, PRS_NOM, PRS_PRENOM_USUEL,
    Txml.XMLdata.value(‘fn:local-name(.)’, ‘NVARCHAR(256)’) AS BALISE,
    Txml.XMLdata.value(‘.’, ‘NVARCHAR(256)’) AS VALEUR,
    Txml.XMLdata.value(‘@datatype’, ‘NVARCHAR(256)’) AS TYPE
    FROM T_PERSONNE_PRS AS X
    OUTER APPLY X.PRS_DATA.nodes(‘data/*’) AS Txml(XMLdata);

    Laurent

    PS : bravo et mille mercis pour vos articles et tutoriels !!!

    1. Avatar de SQLproSQLpro Auteur de l’article

      Malheureusement l’éditeur de développez est tellement bugué que des choses disparaissent ou sont mise en forme dans d’autres casses ce qui rend invalide les requêtes. J’ai d’ailleurs décidé de quitter DVP…
      Cela fait des années que je râle et qu’aucune solution n’est apportée !

Laisser un commentaire