~ubuntu-branches/ubuntu/trusty/pxp/trusty

« back to all changes in this revision

Viewing changes to doc/manual/html/ref/Intro_namespaces.html

  • Committer: Package Import Robot
  • Author(s): Stéphane Glondu
  • Date: 2013-07-11 11:21:26 UTC
  • mfrom: (6.1.3 sid)
  • Revision ID: package-import@ubuntu.com-20130711112126-5wysiuf0cgjo376r
Tags: 1.2.4-1
* Team upload
* New upstream release
* Update Vcs-*

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
<title>PXP Reference : Intro_namespaces</title>
43
43
</head>
44
44
<body>
45
 
<div class="navbar"><a href="Intro_extensions.html">Previous</a>
46
 
&nbsp;<a href="index.html">Up</a>
47
 
&nbsp;<a href="Intro_events.html">Next</a>
 
45
<div class="navbar"><a class="pre" href="Intro_extensions.html" title="Intro_extensions">Previous</a>
 
46
&nbsp;<a class="up" href="index.html" title="Index">Up</a>
 
47
&nbsp;<a class="post" href="Intro_events.html" title="Intro_events">Next</a>
48
48
</div>
49
 
<center><h1>Intro_namespaces</h1></center>
50
 
<br>
 
49
<h1>Intro_namespaces</h1>
51
50
<br>
52
51
This text explains how PXP deals with the optional namespace
53
52
declarations in XML text.
86
85
for such a URI. For example:
87
86
<p>
88
87
 
89
 
<pre></pre><code class="code">&nbsp;&lt;x:q&nbsp;xmlns:x=<span class="string">"http://company.org/namespaces/project1"</span>&gt;...&lt;/q&gt;&nbsp;</code><pre></pre>
 
88
<code class="code">&nbsp;&lt;x:q&nbsp;xmlns:x=<span class="string">"http://company.org/namespaces/project1"</span>&gt;...&lt;/q&gt;&nbsp;</code>
90
89
<p>
91
90
 
92
91
The "xmlns:x" attribute is special, and declares that for this
116
115
to enable all that:
117
116
<p>
118
117
 
119
 
<pre></pre><code class="code">&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;nsmng&nbsp;=&nbsp;<span class="constructor">Pxp_dtd</span>.create_namespace_manager()<br>
 
118
<code class="code">&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;nsmng&nbsp;=&nbsp;<span class="constructor">Pxp_dtd</span>.create_namespace_manager()<br>
120
119
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;config&nbsp;=&nbsp;<br>
121
120
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<span class="constructor">Pxp_types</span>.default_config&nbsp;<span class="keyword">with</span><br>
122
121
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enable_namespace_processing&nbsp;=&nbsp;<span class="constructor">Some</span>&nbsp;nsmng<br>
125
124
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;spec&nbsp;=&nbsp;<span class="constructor">Pxp_tree_parser</span>.default_namespace_spec<br>
126
125
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;doc&nbsp;=&nbsp;<span class="constructor">Pxp_tree_parser</span>.parse_document_entity&nbsp;config&nbsp;source&nbsp;spec<br>
127
126
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;root&nbsp;=&nbsp;doc<span class="keywordsign">#</span>root<br>
128
 
</code><pre></pre>
 
127
</code>
129
128
<p>
130
129
 
131
130
The namespace-aware implementations of the <code class="code">node</code> class type define
151
150
for the XHTML namespace:
152
151
<p>
153
152
 
154
 
<pre></pre><code class="code">&lt;h:html&nbsp;xmlns:h=<span class="string">"http://www.w3.org/1999/xhtml"</span>&gt;&nbsp;<br>
 
153
<code class="code">&lt;h:html&nbsp;xmlns:h=<span class="string">"http://www.w3.org/1999/xhtml"</span>&gt;&nbsp;<br>
155
154
&nbsp;&nbsp;&lt;h:head&gt;<br>
156
155
&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:title&gt;<span class="constructor">Virtual</span>&nbsp;<span class="constructor">Library</span>&lt;/h:title&gt;&nbsp;<br>
157
156
&nbsp;&nbsp;&lt;/h:head&gt;&nbsp;<br>
159
158
&nbsp;&nbsp;&nbsp;&nbsp;&lt;h:p&gt;<span class="constructor">Moved</span>&nbsp;<span class="keyword">to</span>&nbsp;&lt;h:a&nbsp;href=<span class="string">"http://vlib.org/"</span>&gt;vlib.org&lt;/h:a&gt;.&lt;/h:p&gt;&nbsp;<br>
160
159
&nbsp;&nbsp;&lt;/h:body&gt;&nbsp;<br>
161
160
&lt;/h:html&gt;<br>
162
 
</code><pre></pre>
 
161
</code>
163
162
<p>
164
163
 
165
164
In this example, normalization changes nothing, because the prefix
173
172
prefix "x" is changed in the inner node:
174
173
<p>
175
174
 
176
 
<pre></pre><code class="code">&lt;x:address&nbsp;xmlns:x=<span class="string">"http://addresses.org"</span>&gt;<br>
 
175
<code class="code">&lt;x:address&nbsp;xmlns:x=<span class="string">"http://addresses.org"</span>&gt;<br>
177
176
&nbsp;&nbsp;&lt;x:name&nbsp;xmlns:x=<span class="string">"http://names.org"</span>&gt;<br>
178
177
&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Gerd</span>&nbsp;<span class="constructor">Stolpmann</span><br>
179
178
&nbsp;&nbsp;&lt;/x:name&gt;<br>
180
179
&lt;/x:address&gt;<br>
181
 
</code><pre></pre>
 
180
</code>
182
181
<p>
183
182
 
184
183
In the outer node the prefix "x" is connected with the
189
188
After normalization, the prefixes would look as follows:
190
189
<p>
191
190
 
192
 
<pre></pre><code class="code">&lt;x:address&nbsp;xmlns:x=<span class="string">"http://addresses.org"</span>&gt;<br>
 
191
<code class="code">&lt;x:address&nbsp;xmlns:x=<span class="string">"http://addresses.org"</span>&gt;<br>
193
192
&nbsp;&nbsp;&lt;x1:name&nbsp;xmlns:x1=<span class="string">"http://names.org"</span>&gt;<br>
194
193
&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Gerd</span>&nbsp;<span class="constructor">Stolpmann</span><br>
195
194
&nbsp;&nbsp;&lt;/x1:name&gt;<br>
196
195
&lt;/x:address&gt;<br>
197
 
</code><pre></pre>
 
196
</code>
198
197
<p>
199
198
 
200
199
In order to avoid overridden prefixes, the prefix in the inner node
208
207
"addr" and "nm" instead of the quite arbitrary strings "x" and "x1":
209
208
<p>
210
209
 
211
 
<pre></pre><code class="code">dtd&nbsp;<span class="keywordsign">#</span>&nbsp;namespace_manager&nbsp;<span class="keywordsign">#</span>&nbsp;add_namespace&nbsp;<span class="string">"addr"</span>&nbsp;<span class="string">"http://addresses.org"</span>;<br>
 
210
<code class="code">dtd&nbsp;<span class="keywordsign">#</span>&nbsp;namespace_manager&nbsp;<span class="keywordsign">#</span>&nbsp;add_namespace&nbsp;<span class="string">"addr"</span>&nbsp;<span class="string">"http://addresses.org"</span>;<br>
212
211
dtd&nbsp;<span class="keywordsign">#</span>&nbsp;namespace_manager&nbsp;<span class="keywordsign">#</span>&nbsp;add_namespace&nbsp;<span class="string">"nm"</span>&nbsp;<span class="string">"http://names.org"</span>;<br>
213
 
</code><pre></pre>
 
212
</code>
214
213
<p>
215
214
 
216
215
For this to work you need access to the <code class="code">dtd</code> object before the parser
220
219
into the DTD object. The resulting program could look then like:
221
220
<p>
222
221
 
223
 
<pre></pre><code class="code">&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;nsmng&nbsp;=&nbsp;<span class="constructor">Pxp_dtd</span>.create_namespace_manager()<br>
 
222
<code class="code">&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;nsmng&nbsp;=&nbsp;<span class="constructor">Pxp_dtd</span>.create_namespace_manager()<br>
224
223
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;config&nbsp;=&nbsp;<br>
225
224
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<span class="constructor">Pxp_types</span>.default_config&nbsp;<span class="keyword">with</span><br>
226
225
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enable_namespace_processing&nbsp;=&nbsp;<span class="constructor">Some</span>&nbsp;nsmng<br>
234
233
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;doc&nbsp;=&nbsp;<br>
235
234
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="constructor">Pxp_tree_parser</span>.parse_document_entity&nbsp;~transform_dtd&nbsp;config&nbsp;source&nbsp;spec<br>
236
235
&nbsp;&nbsp;<span class="keyword">let</span>&nbsp;root&nbsp;=&nbsp;doc<span class="keywordsign">#</span>root<br>
237
 
</code><pre></pre>
 
236
</code>
238
237
<p>
239
238
 
240
239
Alternatively, it is also possible to put special processing instructions
241
240
into the DTD:
242
241
<p>
243
242
 
244
 
<pre></pre><code class="code">&lt;?pxp:dtd&nbsp;namespace&nbsp;prefix=<span class="string">"addr"</span>&nbsp;uri=<span class="string">"http://addresses.org"</span><span class="keywordsign">?&gt;</span><br>
 
243
<code class="code">&lt;?pxp:dtd&nbsp;namespace&nbsp;prefix=<span class="string">"addr"</span>&nbsp;uri=<span class="string">"http://addresses.org"</span><span class="keywordsign">?&gt;</span><br>
245
244
&lt;?pxp:dtd&nbsp;namespace&nbsp;prefix=<span class="string">"nm"</span>&nbsp;uri=<span class="string">"http://names.org"</span><span class="keywordsign">?&gt;</span><br>
246
 
</code><pre></pre>
 
245
</code>
247
246
<p>
248
247
 
249
248
The advantage of configuring specific normprefixes is that one can now
250
249
use them directly in programs, e.g. for matching:
251
250
<p>
252
251
 
253
 
<pre></pre><code class="code">&nbsp;&nbsp;<span class="keyword">match</span>&nbsp;node<span class="keywordsign">#</span>node_type&nbsp;<span class="keyword">with</span><br>
 
252
<code class="code">&nbsp;&nbsp;<span class="keyword">match</span>&nbsp;node<span class="keywordsign">#</span>node_type&nbsp;<span class="keyword">with</span><br>
254
253
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">T_element</span>&nbsp;<span class="string">"addr:address"</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;...<br>
255
254
&nbsp;&nbsp;&nbsp;&nbsp;<span class="keywordsign">|</span>&nbsp;<span class="constructor">T_element</span>&nbsp;<span class="string">"nm:name"</span>&nbsp;<span class="keywordsign">-&gt;</span>&nbsp;...<br>
256
 
</code><pre></pre>
 
255
</code>
257
256
<p>
258
257
 
259
258
<span id="2_Gettingmoredetailsofnamespaces"><h2>Getting more details of namespaces</h2></span>
277
276
 
278
277
<ul>
279
278
<li>To find out which normprefix is used for a namespace URI, use
280
 
     <pre></pre><code class="code">&nbsp;n&nbsp;<span class="keywordsign">#</span>&nbsp;namespace_manager&nbsp;<span class="keywordsign">#</span>&nbsp;get_normprefix&nbsp;uri&nbsp;</code><pre></pre> </li>
 
279
     <code class="code">&nbsp;n&nbsp;<span class="keywordsign">#</span>&nbsp;namespace_manager&nbsp;<span class="keywordsign">#</span>&nbsp;get_normprefix&nbsp;uri&nbsp;</code> </li>
281
280
<li>To find out the reverse, i.e. which URI is represented by a certain
282
281
     normprefix, use
283
 
     <pre></pre><code class="code">&nbsp;n&nbsp;<span class="keywordsign">#</span>&nbsp;namespace_manager&nbsp;<span class="keywordsign">#</span>&nbsp;get_primary_uri&nbsp;prefix&nbsp;</code><pre></pre> </li>
 
282
     <code class="code">&nbsp;n&nbsp;<span class="keywordsign">#</span>&nbsp;namespace_manager&nbsp;<span class="keywordsign">#</span>&nbsp;get_primary_uri&nbsp;prefix&nbsp;</code> </li>
284
283
<li>To find out which namespace URI is meant by a display prefix, i.e.
285
284
     the prefix as it occurs literally in the XML text:
286
 
     <pre></pre><code class="code">&nbsp;n&nbsp;<span class="keywordsign">#</span>&nbsp;namespace_scope&nbsp;<span class="keywordsign">#</span>&nbsp;uri_of_display_prefix&nbsp;prefix&nbsp;</code><pre></pre> </li>
 
285
     <code class="code">&nbsp;n&nbsp;<span class="keywordsign">#</span>&nbsp;namespace_scope&nbsp;<span class="keywordsign">#</span>&nbsp;uri_of_display_prefix&nbsp;prefix&nbsp;</code> </li>
287
286
</ul>
288
287
 
289
288
<br>