-
Notifications
You must be signed in to change notification settings - Fork 16
/
responserdf.gtw
159 lines (122 loc) · 4.76 KB
/
responserdf.gtw
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
~~LANG:EN@enman:responserdf~~
jResponseRdf permet de générer un document au format RDF. Cela est utile entre
autre lors de la réalisation d'application en XUL, pour les templates XUL. Son
alias est "rdf".
Vous avez deux moyens d'utiliser jResponseRdf :
* soit vous fournissez une liste de données et la classe s'occupe de générer
du RDF
* soit vous écrivez vous-même le code RDF dans un template, ce qui est
nécessaire pour les graphes RDF complexes.
===== Génération automatique de RDF =====
Cela ne fonctionne que pour les RDF qui representent qu'une liste simple de
données (pas de sous arbres par exemple).
Vous indiquez la liste des données au niveau de la propriété //$datas// : cela
peut être une liste de tableaux associatifs, un objet jResultSet (iterateur) que
retourne jDb::query ou les méthodes de type "select" des daos.
<code php>
$rep = $this->getResponse("rdf");
$dao = jDao::get('users');
$rep->datas = $dao->findAll();
</code>
Ou encore
<code php>
$rep->datas = array(
array('nom'=>'dupont', 'prenom'=>'georges'),
array('nom'=>'durant', 'prenom'=>'paul'),
array('nom'=>'duchemin', 'prenom'=>'jacques'),
);
</code>
Ce dernier exemple va générer le RDF suivant :
<code xml>
<RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:row="http://dummy/rdf#">
<Bag RDF:about="urn:data:row">
<li><Description>
<row:nom>dupont</row:nom>
<row:prenom>georges</row:prenom>
</Description></li>
<li><Description>
<row:nom>durant</row:nom>
<row:prenom>paul</row:prenom>
</Description></li>
<li><Description>
<row:nom>duchemin</row:nom>
<row:prenom>jacques</row:prenom>
</Description></li>
</Bag>
</RDF>
</code>
jResponseRdf donne par défaut le namespace "http://dummy/rdf#" aux éléments
contenant les données, namespace déclaré avec le préfixe "row". Vous pouvez
changer cela via respectivement les propriétés //$resNs// et //$resNsPrefix//.
<code php>
$rep->resNs = 'http://monsite.com/ns/users/';
$rep->resNsPrefix = 'user';
</code>
Vous pouvez aussi changer l'identifiant de la liste qui est par défaut
"urn:data:row" :
<code php>
$rep->resUriRoot = 'urn:monsite:users';
</code>
Enfin, pour diverses raisons, vous voudriez peut être mettre certaines
informations en tant qu'attributs, et d'autres en tant qu'elements. Il faut
alors l'indiquer via les propriétés //$asElement// et //$asAttribute//.
<code php>
$rep->asAttribute = array('prenom');
$rep->asElement = array('nom');
</code>
Note : à partir du moment où vous changez l'une de ces deux propriétés, il faut
alors indiquer **tous** les noms des données que vous voulez voir apparaitre
dans le RDF.
Cela donne alors :
<code xml>
<RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:user="http://monsite.com/ns/users/">
<Bag RDF:about="urn:monsite:users">
<li><Description user:prenom="georges">
<user:nom>dupont</user:nom>
</Description></li>
<li><Description user:prenom="paul">
<user:nom>durant</user:nom>
</Description></li>
<li><Description user:prenom="jacques">
<user:nom>duchemin</user:nom>
</Description></li>
</Bag>
</RDF>
</code>
===== Génération à partir d'un template =====
L'autre façon d'utiliser jResponseRdf est de passer par un template pour générer
le contenu RDF. Vous devez indiquer les données pour le template via la
propriété //$datas//, elles seront ainsi disponibles via la variable de template
"datas". Et vous devez indiquez le sélecteur du template dans la propriété
//$template//.
<code php>
$rep = $this->getResponse("rdf");
$rep->datas = array(
array('nom'=>'dupont', 'prenom'=>'georges'),
array('nom'=>'durant', 'prenom'=>'paul'),
array('nom'=>'duchemin', 'prenom'=>'jacques'),
);
$rep->template = 'monmodule~datasrdf';
</code>
Et dans datasrdf.tpl :
<code xml>
<RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:user="http://monsite.com/ns/users/">
<Bag RDF:about="urn:monsite:users">
{foreach $datas as $dt}
<li><Description user:prenom="{$data['prenom']|escxml}">
<user:nom>{$data['nom']|escxml}</user:nom>
</Description></li>
{/foreach}
</Bag>
</RDF>
</code>
Note : vous n'avez pas à mettre le prologue xml (<?xml... )
Note : les propriétés //$resNs//, //$resNsPrefix//, //$resUriRoot//,
//$asElement// et //$asAttribute// sont inutiles dans le cas de l'utilisation
d'un template.