As the heavyweight title says I've found a real web service. In my last post called Finally a webservice: DREFT and SKOS for Thesaurus I found the DREFT interface but the prototype service was not available anymore. I searched the web and found version running at NBII (The National Biological Information Infrastructure). It's a long and complex title, so what is it About (my highlighting):
The National Biological Information Infrastructure (NBII) is a broad, collaborative program to provide increased access to data and information on the nation's biological resources. The NBII links diverse, high-quality biological databases, information products, and analytical tools maintained by NBII partners and other contributors in government agencies, academic institutions, non-government organizations, and private industry. NBII partners and collaborators also work on new standards, tools, and technologies that make it easier to find, integrate, and apply biological resources information. Resource managers, scientists, educators, and the general public use the NBII to answer a wide range of questions related to the management, use, or conservation of this nation's biological resources.
Excellent and keep up the good work. These fine folks have the Biocomplexity Thesaurus Project and the gem for me is a Web Service for the Biocomplexity Thesaurus - hooray.
I haven't compared the two wsdl's (SWSD wsdl and NBII wsdl) in detail but the look very similar. I was eager to give it a shot so i prepared Axis2 and ran WSDL2Code (earlier called WSDL2Java), but it only resulted in the following error message: Encoded use is not supported
, ups darn compliance. If I remember correct Encoded is banned by WS-I, so it hasn't been a priority for the Axis2 team. Back to Axis1 and the latest release, since I haven't used Axis1 for some time but I have used it for encoded services, and also the DREFT service that can be downloaded (haven't worked with it yet) was based on Axis1. I run through axis-wsdl2java without a problem, and was ready to write my first client. Well ready it not the best word for it since I have very little knowledge about neither DREFT/SKOS/RDF or the Biocomplexity Thesaurus, just with writing webservice clients. I looked for what sound the simplest and found getConceptResultsByKeyword that takes two parameters: keyword/search term as a string and the uri of the thesaurus service - uhmm what uri and why, I thought this service implementation was for a specific thesaurus? weell it turns out to be ignored, so it can be any value or null/nil. These to overloaded operations (naughty naughty) are sort of convenience methods added here, that's not part of the original DREFT service.
Search for malformations
On the search tips page the example is malformations. Here what the HTTP headers for the request looks like :
1 POST /ws/services/SKOSThesaurusService HTTP/1.0
2 Content-Type: text/xml; charset=utf-8
3 Accept: application/soap+xml, application/dime, multipart/related, text/*
4 User-Agent: Axis/1.4
5 Host: nbii-thesaurus.ornl.gov:9999
6 Cache-Control: no-cache
7 Pragma: no-cache
8 SOAPAction: ""
9 Content-Length: 840
Notice that I'm capturing this with TCPMon on port 9999. Any heres the request SOAP message (malformations-request.xml):
1 <?xml version="1.0" encoding="UTF-8"?>
2 <soapenv:Envelope
3 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
4 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
6 <soapenv:Body>
7 <ns1:getConceptResultsByKeyword
8 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
9 xmlns:ns1="http://skos.Europe.sw.y2001.w3.org">
10 <in0 xsi:type="xsd:string">malformations</in0>
11 <in1 href="#id0" />
12 </ns1:getConceptResultsByKeyword>
13 <multiRef
14 id="id0"
15 soapenc:root="0"
16 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
17 xsi:type="ns2:URI"
18 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
19 xmlns:ns2="http://www.w3.org/2001/sw/Europe/skos/namespace">
20 <uri xsi:type="xsd:string">http://localhost:9999/ws/services/SKOSThesaurusService</uri>
21 </multiRef>
22 </soapenv:Body>
23 </soapenv:Envelope>
This is readable (RPC style), and the response HTTP headers:
1 HTTP/1.1 200 OK
2 Connection: close
3 Date: Fri, 20 Apr 2007 20:29:41 GMT
4 Server: Microsoft-IIS/6.0
5 X-Powered-By: ASP.NET
6 Content-Type: text/xml;charset=utf-8
So this could look like a .NET implementation, but it is an Axis1 service (the service page (GET) has the classic "Hi there, this is an AXIS service! Perhaps there will be a form for invoking the service here...". The response SOAP message is, well terrible as in unreadable for humans due to all the references. It's also very long (approximately 1000 lines) so I'll cut it short (malformations-response.xml):
1 <?xml version="1.0" encoding="UTF-8"?>
2 <soapenv:Envelope
3 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
4 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
6 <soapenv:Body>
7 <ns1:getConceptResultsByKeywordResponse
8 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
9 xmlns:ns1="http://skos.Europe.sw.y2001.w3.org">
10 <ns1:getConceptResultsByKeywordReturn
11 xsi:type="soapenc:Array"
12 soapenc:arrayType="ns2:ConceptResult[2]"
13 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
14 xmlns:ns2="http://www.w3.org/2001/sw/Europe/skos/namespace">
15 <item href="#id0" />
16 <item href="#id1" />
17 </ns1:getConceptResultsByKeywordReturn>
18 </ns1:getConceptResultsByKeywordResponse>
19 <multiRef
20 id="id0"
21 soapenc:root="0"
22 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
23 xsi:type="ns3:ConceptResult"
24 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
25 xmlns:ns3="http://www.w3.org/2001/sw/Europe/skos/namespace">
26 <conceptRelatives
27 xsi:type="soapenc:Array"
28 soapenc:arrayType="ns3:ConceptRelatives[5]">
29 <item href="#id2" />
30 <item xsi:nil="true" />
31 <item href="#id3" />
32 <item href="#id4" />
33 <item xsi:nil="true" />
34 </conceptRelatives>
35 <concept href="#id5" />
36 </multiRef>
37 <multiRef
38 id="id1"
39 soapenc:root="0"
40 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
41 xsi:type="ns4:ConceptResult"
42 xmlns:ns4="http://www.w3.org/2001/sw/Europe/skos/namespace"
43 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
44 <conceptRelatives
45 xsi:type="soapenc:Array"
46 soapenc:arrayType="ns4:ConceptRelatives[5]">
47 <item xsi:nil="true" />
48 <item href="#id6" />
49 <item href="#id7" />
50 <item href="#id8" />
51 <item href="#id9" />
52 </conceptRelatives>
53 <concept href="#id10" />
54 </multiRef>
55 <multiRef
56 id="id5"
57 soapenc:root="0"
58 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
59 xsi:type="ns5:Concept"
60 xmlns:ns5="http://www.w3.org/2001/sw/Europe/skos/namespace"
61 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
62 <uri href="#id11" />
63 <externalID
64 xsi:type="xsd:string"
65 xsi:nil="true" />
66 <preferredLabel xsi:type="xsd:string">Limb malformations</preferredLabel>
67 <inScheme
68 xsi:type="ns5:URI"
69 xsi:nil="true" />
70 <scopeNote
71 xsi:type="xsd:string"
72 xsi:nil="true" />
73 <definition
74 xsi:type="xsd:string"
75 xsi:nil="true" />
76 <example
77 xsi:type="xsd:string"
78 xsi:nil="true" />
79 </multiRef>
80 <multiRef
81 id="id2"
82 soapenc:root="0"
83 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
84 xsi:type="ns6:ConceptRelatives"
85 xmlns:ns6="http://www.w3.org/2001/sw/Europe/skos/namespace"
86 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
87 <distance xsi:type="xsd:int">1</distance>
88 <concepts href="#id12" />
89 <relation href="#id13" />
90 </multiRef>
91 <multiRef
92 id="id9"
93 soapenc:root="0"
94 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
95 xsi:type="ns7:ConceptRelatives"
96 xmlns:ns7="http://www.w3.org/2001/sw/Europe/skos/namespace"
97 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
98 <distance xsi:type="xsd:int">1</distance>
99 <concepts href="#id14" />
100 <concepts href="#id15" />
101 <concepts href="#id16" />
102 <relation href="#id17" />
103 </multiRef>
104 <multiRef
105 id="id7"
106 soapenc:root="0"
107 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
108 xsi:type="ns8:ConceptRelatives"
109 xmlns:ns8="http://www.w3.org/2001/sw/Europe/skos/namespace"
110 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
111 <distance xsi:type="xsd:int">1</distance>
112 <concepts href="#id18" />
113 <concepts href="#id19" />
114 <concepts href="#id20" />
115 <relation href="#id17" />
116 </multiRef>
117 <multiRef
118 id="id3"
119 soapenc:root="0"
120 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
121 xsi:type="ns9:ConceptRelatives"
122 xmlns:ns9="http://www.w3.org/2001/sw/Europe/skos/namespace"
123 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
124 <distance xsi:type="xsd:int">1</distance>
125 <concepts href="#id21" />
126 <relation href="#id13" />
127 </multiRef>
128 <multiRef
129 id="id4"
130 soapenc:root="0"
131 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
132 xsi:type="ns10:ConceptRelatives"
133 xmlns:ns10="http://www.w3.org/2001/sw/Europe/skos/namespace"
134 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
135 <distance xsi:type="xsd:int">1</distance>
136 <concepts href="#id22" />
137 <relation href="#id13" />
138 </multiRef>
139 <multiRef
140 id="id6"
141 soapenc:root="0"
142 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
143 xsi:type="ns11:ConceptRelatives"
144 xmlns:ns11="http://www.w3.org/2001/sw/Europe/skos/namespace"
145 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
146 <distance xsi:type="xsd:int">1</distance>
147 <concepts href="#id23" />
148 <concepts href="#id24" />
149 <concepts href="#id25" />
150 <concepts href="#id26" />
151 <concepts href="#id27" />
152 <concepts href="#id28" />
153 <concepts href="#id29" />
154 <concepts href="#id30" />
155 <concepts href="#id31" />
156 <concepts href="#id32" />
157 <concepts href="#id33" />
158 <relation href="#id17" />
159 </multiRef>
160 <multiRef
161 id="id10"
162 soapenc:root="0"
163 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
164 xsi:type="ns12:Concept"
165 xmlns:ns12="http://www.w3.org/2001/sw/Europe/skos/namespace"
166 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
167 <uri href="#id34" />
168 <externalID
169 xsi:type="xsd:string"
170 xsi:nil="true" />
171 <preferredLabel xsi:type="xsd:string">Malformations</preferredLabel>
172 <inScheme
173 xsi:type="ns12:URI"
174 xsi:nil="true" />
175 <scopeNote xsi:type="xsd:string">Restricted to living organisms.</scopeNote>
176 <definition
177 xsi:type="xsd:string"
178 xsi:nil="true" />
179 <example
180 xsi:type="xsd:string"
181 xsi:nil="true" />
182 </multiRef>
183 <multiRef
184 id="id8"
185 soapenc:root="0"
186 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
187 xsi:type="ns13:ConceptRelatives"
188 xmlns:ns13="http://www.w3.org/2001/sw/Europe/skos/namespace"
189 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
190 <distance xsi:type="xsd:int">1</distance>
191 <concepts href="#id35" />
192 <concepts href="#id36" />
193 <relation href="#id17" />
194 </multiRef>
195 <multiRef
196 id="id30"
197 soapenc:root="0"
198 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
199 xsi:type="ns14:Concept"
200 xmlns:ns14="http://www.w3.org/2001/sw/Europe/skos/namespace"
201 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
202 <uri href="#id37" />
203 <externalID
204 xsi:type="xsd:string"
205 xsi:nil="true" />
206 <preferredLabel xsi:type="xsd:string">Translocation (genetics)</preferredLabel>
207 <inScheme
208 xsi:type="ns14:URI"
209 xsi:nil="true" />
210 <scopeNote
211 xsi:type="xsd:string"
212 xsi:nil="true" />
213 <definition
214 xsi:type="xsd:string"
215 xsi:nil="true" />
216 <example
217 xsi:type="xsd:string"
218 xsi:nil="true" />
219 </multiRef>
220 <multiRef
221 id="id31"
222 soapenc:root="0"
223 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
224 xsi:type="ns15:Concept"
225 xmlns:ns15="http://www.w3.org/2001/sw/Europe/skos/namespace"
226 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
227 <uri href="#id38" />
228 <externalID
229 xsi:type="xsd:string"
230 xsi:nil="true" />
231 <preferredLabel xsi:type="xsd:string">Neural tube defects</preferredLabel>
232 <inScheme
233 xsi:type="ns15:URI"
234 xsi:nil="true" />
235 <scopeNote
236 xsi:type="xsd:string"
237 xsi:nil="true" />
238 <definition
239 xsi:type="xsd:string"
240 xsi:nil="true" />
241 <example
242 xsi:type="xsd:string"
243 xsi:nil="true" />
244 </multiRef>
245 <multiRef
246 id="id32"
247 soapenc:root="0"
248 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
249 xsi:type="ns16:Concept"
250 xmlns:ns16="http://www.w3.org/2001/sw/Europe/skos/namespace"
251 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
252 <uri href="#id39" />
253 <externalID
254 xsi:type="xsd:string"
255 xsi:nil="true" />
256 <preferredLabel xsi:type="xsd:string">Genetic abnormalities</preferredLabel>
257 <inScheme
258 xsi:type="ns16:URI"
259 xsi:nil="true" />
260 <scopeNote
261 xsi:type="xsd:string"
262 xsi:nil="true" />
263 <definition
264 xsi:type="xsd:string"
265 xsi:nil="true" />
266 <example
267 xsi:type="xsd:string"
268 xsi:nil="true" />
269 </multiRef>
270 <multiRef
271 id="id21"
272 soapenc:root="0"
273 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
274 xsi:type="ns17:Concept"
275 xmlns:ns17="http://www.w3.org/2001/sw/Europe/skos/namespace"
276 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
277 <uri href="#id40" />
278 <externalID
279 xsi:type="xsd:string"
280 xsi:nil="true" />
281 <preferredLabel xsi:type="xsd:string">Limb (animal)</preferredLabel>
282 <inScheme
283 xsi:type="ns17:URI"
284 xsi:nil="true" />
285 <scopeNote
286 xsi:type="xsd:string"
287 xsi:nil="true" />
288 <definition
289 xsi:type="xsd:string"
290 xsi:nil="true" />
291 <example
292 xsi:type="xsd:string"
293 xsi:nil="true" />
294 </multiRef>
295 <multiRef
296 id="id14"
297 soapenc:root="0"
298 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
299 xsi:type="ns18:Concept"
300 xmlns:ns18="http://www.w3.org/2001/sw/Europe/skos/namespace"
301 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
302 <uri href="#id41" />
303 <externalID
304 xsi:type="xsd:string"
305 xsi:nil="true" />
306 <preferredLabel xsi:type="xsd:string">Abnormalities</preferredLabel>
307 <nonPreferredLabels xsi:type="xsd:string">Malformations</nonPreferredLabels>
308 <inScheme
309 xsi:type="ns18:URI"
310 xsi:nil="true" />
311 <scopeNote
312 xsi:type="xsd:string"
313 xsi:nil="true" />
314 <definition
315 xsi:type="xsd:string"
316 xsi:nil="true" />
317 <example
318 xsi:type="xsd:string"
319 xsi:nil="true" />
320 </multiRef>
321 <multiRef
322 id="id28"
323 soapenc:root="0"
324 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
325 xsi:type="ns19:Concept"
326 xmlns:ns19="http://www.w3.org/2001/sw/Europe/skos/namespace"
327 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
328 <uri href="#id42" />
329 <externalID
330 xsi:type="xsd:string"
331 xsi:nil="true" />
332 <preferredLabel xsi:type="xsd:string">Nondisjunction</preferredLabel>
333 <inScheme
334 xsi:type="ns19:URI"
335 xsi:nil="true" />
336 <scopeNote
337 xsi:type="xsd:string"
338 xsi:nil="true" />
339 <definition
340 xsi:type="xsd:string"
341 xsi:nil="true" />
342 <example
343 xsi:type="xsd:string"
344 xsi:nil="true" />
345 </multiRef>
346 <multiRef
347 id="id36"
348 soapenc:root="0"
349 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
350 xsi:type="ns20:Concept"
351 xmlns:ns20="http://www.w3.org/2001/sw/Europe/skos/namespace"
352 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
353 <uri href="#id43" />
354 <externalID
355 xsi:type="xsd:string"
356 xsi:nil="true" />
357 <preferredLabel xsi:type="xsd:string">LSC</preferredLabel>
358 <inScheme
359 xsi:type="ns20:URI"
360 xsi:nil="true" />
361 <scopeNote
362 xsi:type="xsd:string"
363 xsi:nil="true" />
364 <definition
365 xsi:type="xsd:string"
366 xsi:nil="true" />
367 <example
368 xsi:type="xsd:string"
369 xsi:nil="true" />
370 </multiRef>
371 <multiRef
372 id="id18"
373 soapenc:root="0"
374 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
375 xsi:type="ns21:Concept"
376 xmlns:ns21="http://www.w3.org/2001/sw/Europe/skos/namespace"
377 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
378 <uri href="#id44" />
379 <externalID
380 xsi:type="xsd:string"
381 xsi:nil="true" />
382 <preferredLabel xsi:type="xsd:string">Teratogenesis</preferredLabel>
383 <inScheme
384 xsi:type="ns21:URI"
385 xsi:nil="true" />
386 <scopeNote
387 xsi:type="xsd:string"
388 xsi:nil="true" />
389 <definition
390 xsi:type="xsd:string"
391 xsi:nil="true" />
392 <example
393 xsi:type="xsd:string"
394 xsi:nil="true" />
395 </multiRef>
396 <multiRef
397 id="id34"
398 soapenc:root="0"
399 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
400 xsi:type="ns22:URI"
401 xmlns:ns22="http://www.w3.org/2001/sw/Europe/skos/namespace"
402 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
403 <uri xsi:type="xsd:string">http://thesaurus.nbii.gov/Concept/5093</uri>
404 </multiRef>
405 <multiRef
406 id="id20"
407 soapenc:root="0"
408 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
409 xsi:type="ns23:Concept"
410 xmlns:ns23="http://www.w3.org/2001/sw/Europe/skos/namespace"
411 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
412 <uri href="#id45" />
413 <externalID
414 xsi:type="xsd:string"
415 xsi:nil="true" />
416 <preferredLabel xsi:type="xsd:string">Teratogens</preferredLabel>
417 <inScheme
418 xsi:type="ns23:URI"
419 xsi:nil="true" />
420 <scopeNote xsi:type="xsd:string">Agents that raise the incidence of congenital malformations</scopeNote>
421 <definition
422 xsi:type="xsd:string"
423 xsi:nil="true" />
424 <example
425 xsi:type="xsd:string"
426 xsi:nil="true" />
427 </multiRef>
428 <multiRef
429 id="id26"
430 soapenc:root="0"
431 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
432 xsi:type="ns24:Concept"
433 xmlns:ns24="http://www.w3.org/2001/sw/Europe/skos/namespace"
434 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
435 <uri href="#id46" />
436 <externalID
437 xsi:type="xsd:string"
438 xsi:nil="true" />
439 <preferredLabel xsi:type="xsd:string">Congenital defects</preferredLabel>
440 <inScheme
441 xsi:type="ns24:URI"
442 xsi:nil="true" />
443 <scopeNote
444 xsi:type="xsd:string"
445 xsi:nil="true" />
446 <definition
447 xsi:type="xsd:string"
448 xsi:nil="true" />
449 <example
450 xsi:type="xsd:string"
451 xsi:nil="true" />
452 </multiRef>
453 <multiRef
454 id="id19"
455 soapenc:root="0"
456 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
457 xsi:type="ns25:Concept"
458 xmlns:ns25="http://www.w3.org/2001/sw/Europe/skos/namespace"
459 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
460 <uri href="#id47" />
461 <externalID
462 xsi:type="xsd:string"
463 xsi:nil="true" />
464 <preferredLabel xsi:type="xsd:string">Teratology</preferredLabel>
465 <inScheme
466 xsi:type="ns25:URI"
467 xsi:nil="true" />
468 <scopeNote xsi:type="xsd:string">
469 Science treating malformations and monstrosities of plants and animals.
470 </scopeNote>
471 <definition
472 xsi:type="xsd:string"
473 xsi:nil="true" />
474 <example
475 xsi:type="xsd:string"
476 xsi:nil="true" />
477 </multiRef>
478 <multiRef
479 id="id29"
480 soapenc:root="0"
481 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
482 xsi:type="ns26:Concept"
483 xmlns:ns26="http://www.w3.org/2001/sw/Europe/skos/namespace"
484 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
485 <uri href="#id48" />
486 <externalID
487 xsi:type="xsd:string"
488 xsi:nil="true" />
489 <preferredLabel xsi:type="xsd:string">Ring chromosomes</preferredLabel>
490 <inScheme
491 xsi:type="ns26:URI"
492 xsi:nil="true" />
493 <scopeNote
494 xsi:type="xsd:string"
495 xsi:nil="true" />
496 <definition
497 xsi:type="xsd:string"
498 xsi:nil="true" />
499 <example
500 xsi:type="xsd:string"
501 xsi:nil="true" />
502 </multiRef>
...
981 <multiRef
982 id="id43"
983 soapenc:root="0"
984 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
985 xsi:type="ns61:URI"
986 xmlns:ns61="http://www.w3.org/2001/sw/Europe/skos/namespace"
987 xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
988 <uri xsi:type="xsd:string">http://thesaurus.nbii.gov/Concept/9560</uri>
989 </multiRef>
990 </soapenv:Body>
991 </soapenv:Envelope>
So was there anything missing? I don't know :-). Had this been doc/lit the XML would have been more plain readable witch is one thing but what about the data model itself? I guess it's almost pure SKOS, but remember I really do not know anything about it, and I'm using this service to get som insight into it.
The schema in the WSDL is what I sometime call a Rag doll schema's since it is very loose. There is very little mandatory content and therefore I also sometime call them Shopping trolley schema's because they can carry almost anything but you never know what you'll end up leaving with (please bear over with my oversimplifying analogies). Here's the example with Concept:
42 <complexType name="Concept">
43 <sequence>
44 <element
45 name="uri"
46 nillable="true"
47 type="tns1:URI" />
48 <element
49 name="externalID"
50 nillable="true"
51 type="xsd:string" />
52 <element
53 name="preferredLabel"
54 nillable="true"
55 type="xsd:string" />
56 <element
57 maxOccurs="unbounded"
58 name="nonPreferredLabels"
59 nillable="true"
60 type="xsd:string" />
61 <element
62 name="inScheme"
63 nillable="true"
64 type="tns1:URI" />
65 <element
66 name="scopeNote"
67 nillable="true"
68 type="xsd:string" />
69 <element
70 name="definition"
71 nillable="true"
72 type="xsd:string" />
73 <element
74 name="example"
75 nillable="true"
76 type="xsd:string" />
77 </sequence>
78 </complexType>
This gives a span from a complete filled structure to a bunch of empty elements with xsd:nil="true". I personal prefer minoccurs="0"> over the nillable construct, giving a smaller and more exact markup. There certainly are models that need this kind of total flexibility, but on occasion it's a bad smell. Going into invariants is way over my league, so I'll just have a look and expect that this metadata stuff probably has to be that lax.
Since I have no domain knowledgde I know only what the schemas shows me, and that's not much, so I'll have a second look at the response instance. But how do I make that easier to decipher? My first try is with the J2SE XMLEncoder, here's a snippet from j2se-malformations.xml:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <java version="1.5.0_10" class="java.beans.XMLDecoder">
3 <array class="org.w3.www._2001.sw.Europe.skos.namespace.ConceptResult" length="2">
4 <void index="0">
5 <object class="org.w3.www._2001.sw.Europe.skos.namespace.ConceptResult">
6 <void property="concept">
7 <object class="org.w3.www._2001.sw.Europe.skos.namespace.Concept">
8 <void property="preferredLabel">
9 <string>Limb malformations</string>
10 </void>
11 <void property="uri">
12 <object class="org.w3.www._2001.sw.Europe.skos.namespace.URI">
13 <void property="uri">
14 <string>http://thesaurus.nbii.gov/Concept/4896</string>
15 </void>
16 </object>
17 </void>
18 </object>
19 </void>
20 <void property="conceptRelatives">
21 <array class="org.w3.www._2001.sw.Europe.skos.namespace.ConceptRelatives" length="5">
22 <void index="0">
23 <object class="org.w3.www._2001.sw.Europe.skos.namespace.ConceptRelatives">
24 <void property="concepts">
25 <array class="org.w3.www._2001.sw.Europe.skos.namespace.Concept" length="1">
26 <void index="0">
27 <object class="org.w3.www._2001.sw.Europe.skos.namespace.Concept">
28 <void property="preferredLabel">
29 <string>Malformations</string>
30 </void>
31 <void property="scopeNote">
32 <string>Restricted to living organisms.</string>
33 </void>
34 <void property="uri">
35 <object class="org.w3.www._2001.sw.Europe.skos.namespace.URI">
36 <void property="uri">
37 <string>http://thesaurus.nbii.gov/Concept/5093</string>
38 </void>
39 </object>
40 </void>
41 </object>
42 </void>
43 </array>
44 </void>
Okay, this is almost worse and never meant to be beautiful XML serialization, but let's try a more likely candidate: Jakarta Commons Betwixt. As it says on the front page Commons Betwixt : Turning beans into XML:
The Betwixt library provides an XML introspection mechanism for mapping beans to XML in a flexible way. It is implemented using an XMLIntrospector and XMLBeanInfo classes which are similar to the standard Introspector and BeanInfo from the Java Beans specification.
Betwixt provides a way of turning beans into XML as well as automatically generating digester rules in a way that can be customized on a per type manner in the same way that the BeanInfo mechanism can be used to customize the default introspection on a java object.
An a quick shot at it gives (btx-malformations.xml):
1 <Array>
2 <ConceptResult>
3 <concept>
4 <definition/>
5 <example/>
6 <externalID/>
7 <nonPreferredLabels/>
8 <preferredLabel>Limb malformations</preferredLabel>
9 <scopeNote/>
10 <uri>
11 <uri>http://thesaurus.nbii.gov/Concept/4896</uri>
12 </uri>
13 </concept>
14 <conceptRelatives>
15 <ConceptRelatives>
16 <concepts>
17 <Concept>
18 <definition/>
19 <example/>
20 <externalID/>
21 <nonPreferredLabels/>
22 <preferredLabel>Malformations</preferredLabel>
23 <scopeNote>Restricted to living organisms.</scopeNote>
24 <uri>
25 <uri>http://thesaurus.nbii.gov/Concept/5093</uri>
26 </uri>
27 </Concept>
28 </concepts>
29 <distance>1</distance>
30 <relation>
31 <description/>
32 <label>http://www.w3.org/2004/02/skos/core#useFor</label>
33 </relation>
34 </ConceptRelatives>
35 <ConceptRelatives>
36 <concepts>
37 <Concept>
38 <definition/>
39 <example/>
40 <externalID/>
41 <nonPreferredLabels/>
42 <preferredLabel>Limb (animal)</preferredLabel>
43 <scopeNote/>
44 <uri>
45 <uri>http://thesaurus.nbii.gov/Concept/4894</uri>
46 </uri>
47 </Concept>
48 </concepts>
49 <distance>1</distance>
50 <relation>
51 <description/>
52 <label>http://www.w3.org/2004/02/skos/core#useFor</label>
53 </relation>
54 </ConceptRelatives>
55 <ConceptRelatives>
56 <concepts>
57 <Concept>
58 <definition/>
59 <example/>
60 <externalID/>
61 <nonPreferredLabels/>
62 <preferredLabel>LSC</preferredLabel>
63 <scopeNote/>
64 <uri>
65 <uri>http://thesaurus.nbii.gov/Concept/9560</uri>
66 </uri>
67 </Concept>
68 </concepts>
69 <distance>1</distance>
70 <relation>
71 <description/>
72 <label>http://www.w3.org/2004/02/skos/core#useFor</label>
73 </relation>
74 </ConceptRelatives>
75 </conceptRelatives>
76 </ConceptResult>
77 <ConceptResult>
78 <concept>
79 <definition/>
80 <example/>
81 <externalID/>
82 <nonPreferredLabels/>
83 <preferredLabel>Malformations</preferredLabel>
84 <scopeNote>Restricted to living organisms.</scopeNote>
85 <uri>
86 <uri>http://thesaurus.nbii.gov/Concept/5093</uri>
87 </uri>
88 </concept>
89 <conceptRelatives>
90 <ConceptRelatives>
91 <concepts>
92 <Concept>
93 <definition/>
94 <example/>
95 <externalID/>
96 <nonPreferredLabels/>
97 <preferredLabel>Aneuploidy</preferredLabel>
98 <scopeNote/>
99 <uri>
100 <uri>http://thesaurus.nbii.gov/Concept/409</uri>
101 </uri>
102 </Concept>
103 <Concept>
104 <definition/>
105 <example/>
106 <externalID/>
107 <nonPreferredLabels/>
108 <preferredLabel>Chromosome aberrations</preferredLabel>
109 <scopeNote/>
110 <uri>
111 <uri>http://thesaurus.nbii.gov/Concept/1608</uri>
112 </uri>
113 </Concept>
114 <Concept>
115 <definition/>
116 <example/>
117 <externalID/>
118 <nonPreferredLabels/>
119 <preferredLabel>Aristapedia</preferredLabel>
120 <scopeNote/>
121 <uri>
122 <uri>http://thesaurus.nbii.gov/Concept/611</uri>
123 </uri>
124 </Concept>
125 <Concept>
126 <definition/>
127 <example/>
128 <externalID/>
129 <nonPreferredLabels/>
130 <preferredLabel>Congenital defects</preferredLabel>
131 <scopeNote/>
132 <uri>
133 <uri>http://thesaurus.nbii.gov/Concept/1860</uri>
134 </uri>
135 </Concept>
136 <Concept>
137 <definition/>
138 <example/>
139 <externalID/>
140 <nonPreferredLabels/>
141 <preferredLabel>Loss of heterozygosity</preferredLabel>
142 <scopeNote/>
143 <uri>
144 <uri>http://thesaurus.nbii.gov/Concept/4991</uri>
145 </uri>
146 </Concept>
147 <Concept>
148 <definition/>
149 <example/>
150 <externalID/>
151 <nonPreferredLabels/>
152 <preferredLabel>Nondisjunction</preferredLabel>
153 <scopeNote/>
154 <uri>
155 <uri>http://thesaurus.nbii.gov/Concept/5870</uri>
156 </uri>
157 </Concept>
158 <Concept>
159 <definition/>
160 <example/>
161 <externalID/>
162 <nonPreferredLabels/>
163 <preferredLabel>Ring chromosomes</preferredLabel>
164 <scopeNote/>
165 <uri>
166 <uri>http://thesaurus.nbii.gov/Concept/7481</uri>
167 </uri>
168 </Concept>
169 <Concept>
170 <definition/>
171 <example/>
172 <externalID/>
173 <nonPreferredLabels/>
174 <preferredLabel>Translocation (genetics)</preferredLabel>
175 <scopeNote/>
176 <uri>
177 <uri>http://thesaurus.nbii.gov/Concept/8906</uri>
178 </uri>
179 </Concept>
180 <Concept>
181 <definition/>
182 <example/>
183 <externalID/>
184 <nonPreferredLabels/>
185 <preferredLabel>Neural tube defects</preferredLabel>
186 <scopeNote/>
187 <uri>
188 <uri>http://thesaurus.nbii.gov/Concept/5758</uri>
189 </uri>
190 </Concept>
191 <Concept>
192 <definition/>
193 <example/>
194 <externalID/>
195 <nonPreferredLabels/>
196 <preferredLabel>Genetic abnormalities</preferredLabel>
197 <scopeNote/>
198 <uri>
199 <uri>http://thesaurus.nbii.gov/Concept/3611</uri>
200 </uri>
201 </Concept>
202 <Concept>
203 <definition/>
204 <example/>
205 <externalID/>
206 <nonPreferredLabels/>
207 <preferredLabel>Limb malformations</preferredLabel>
208 <scopeNote/>
209 <uri>
210 <uri>http://thesaurus.nbii.gov/Concept/4896</uri>
211 </uri>
212 </Concept>
213 </concepts>
214 <distance>1</distance>
215 <relation>
216 <description/>
217 <label>http://www.w3.org/2004/02/skos/core#useFor</label>
218 </relation>
219 </ConceptRelatives>
220 <ConceptRelatives>
221 <concepts>
222 <Concept>
223 <definition/>
224 <example/>
225 <externalID/>
226 <nonPreferredLabels/>
227 <preferredLabel>Teratogenesis</preferredLabel>
228 <scopeNote/>
229 <uri>
230 <uri>http://thesaurus.nbii.gov/Concept/8674</uri>
231 </uri>
232 </Concept>
233 <Concept>
234 <definition/>
235 <example/>
236 <externalID/>
237 <nonPreferredLabels/>
238 <preferredLabel>Teratology</preferredLabel>
239 <scopeNote>Science treating malformations and monstrosities of plants and animals.</scopeNote>
240 <uri>
241 <uri>http://thesaurus.nbii.gov/Concept/8677</uri>
242 </uri>
243 </Concept>
244 <Concept>
245 <definition/>
246 <example/>
247 <externalID/>
248 <nonPreferredLabels/>
249 <preferredLabel>Teratogens</preferredLabel>
250 <scopeNote>Agents that raise the incidence of congenital malformations</scopeNote>
251 <uri>
252 <uri>http://thesaurus.nbii.gov/Concept/8676</uri>
253 </uri>
254 </Concept>
255 </concepts>
256 <distance>1</distance>
257 <relation>
258 <description/>
259 <label>http://www.w3.org/2004/02/skos/core#useFor</label>
260 </relation>
261 </ConceptRelatives>
262 <ConceptRelatives>
263 <concepts>
264 <Concept>
265 <definition/>
266 <example/>
267 <externalID/>
268 <nonPreferredLabels/>
269 <preferredLabel>ASF</preferredLabel>
270 <scopeNote/>
271 <uri>
272 <uri>http://thesaurus.nbii.gov/Concept/9558</uri>
273 </uri>
274 </Concept>
275 <Concept>
276 <definition/>
277 <example/>
278 <externalID/>
279 <nonPreferredLabels/>
280 <preferredLabel>LSC</preferredLabel>
281 <scopeNote/>
282 <uri>
283 <uri>http://thesaurus.nbii.gov/Concept/9560</uri>
284 </uri>
285 </Concept>
286 </concepts>
287 <distance>1</distance>
288 <relation>
289 <description/>
290 <label>http://www.w3.org/2004/02/skos/core#useFor</label>
291 </relation>
292 </ConceptRelatives>
293 <ConceptRelatives>
294 <concepts>
295 <Concept>
296 <definition/>
297 <example/>
298 <externalID/>
299 <nonPreferredLabels>
300 <String>Malformations</String>
301 </nonPreferredLabels>
302 <preferredLabel>Abnormalities</preferredLabel>
303 <scopeNote/>
304 <uri>
305 <uri>http://thesaurus.nbii.gov/Concept/11</uri>
306 </uri>
307 </Concept>
308 <Concept>
309 <definition/>
310 <example/>
311 <externalID/>
312 <nonPreferredLabels>
313 <String>Malformations</String>
314 </nonPreferredLabels>
315 <preferredLabel>Anomalies (defects)</preferredLabel>
316 <scopeNote/>
317 <uri>
318 <uri>http://thesaurus.nbii.gov/Concept/458</uri>
319 </uri>
320 </Concept>
321 <Concept>
322 <definition/>
323 <example/>
324 <externalID/>
325 <nonPreferredLabels>
326 <String>Malformations</String>
327 </nonPreferredLabels>
328 <preferredLabel>Body deformations</preferredLabel>
329 <scopeNote/>
330 <uri>
331 <uri>http://thesaurus.nbii.gov/Concept/1087</uri>
332 </uri>
333 </Concept>
334 </concepts>
335 <distance>1</distance>
336 <relation>
337 <description/>
338 <label>http://www.w3.org/2004/02/skos/core#useFor</label>
339 </relation>
340 </ConceptRelatives>
341 </conceptRelatives>
342 </ConceptResult>
343 </Array>
Great it's much more readable and the length is reduced to a third, and it can even ignore the empty elements:
1 <Array>
2 <ConceptResult>
3 <concept>
4 <nonPreferredLabels />
5 <preferredLabel>Limb malformations</preferredLabel>
6 <uri>
7 <uri>http://thesaurus.nbii.gov/Concept/4896</uri>
8 </uri>
9 </concept>
10 <conceptRelatives>
11 <ConceptRelatives>
12 <concepts>
13 <Concept>
14 <nonPreferredLabels />
15 <preferredLabel>Malformations</preferredLabel>
16 <scopeNote>Restricted to living organisms.</scopeNote>
17 <uri>
18 <uri>http://thesaurus.nbii.gov/Concept/5093</uri>
19 </uri>
20 </Concept>
21 </concepts>
22 <distance>1</distance>
23 <relation>
24 <label>http://www.w3.org/2004/02/skos/core#useFor</label>
25 </relation>
26 </ConceptRelatives>
27 <ConceptRelatives>
28 <concepts>
29 <Concept>
30 <nonPreferredLabels />
31 <preferredLabel>Limb (animal)</preferredLabel>
32 <uri>
33 <uri>http://thesaurus.nbii.gov/Concept/4894</uri>
34 </uri>
35 </Concept>
36 </concepts>
37 <distance>1</distance>
38 <relation>
39 <label>http://www.w3.org/2004/02/skos/core#useFor</label>
40 </relation>
41 </ConceptRelatives>
42 <ConceptRelatives>
43 <concepts>
44 <Concept>
45 <nonPreferredLabels />
46 <preferredLabel>LSC</preferredLabel>
47 <uri>
48 <uri>http://thesaurus.nbii.gov/Concept/9560</uri>
49 </uri>
50 </Concept>
51 </concepts>
52 <distance>1</distance>
53 <relation>
54 <label>http://www.w3.org/2004/02/skos/core#useFor</label>
55 </relation>
56 </ConceptRelatives>
57 </conceptRelatives>
58 </ConceptResult>
59 <ConceptResult>
60 <concept>
61 <nonPreferredLabels />
62 <preferredLabel>Malformations</preferredLabel>
63 <scopeNote>Restricted to living organisms.</scopeNote>
64 <uri>
65 <uri>http://thesaurus.nbii.gov/Concept/5093</uri>
66 </uri>
67 </concept>
68 <conceptRelatives>
69 <ConceptRelatives>
70 <concepts>
71 <Concept>
72 <nonPreferredLabels />
73 <preferredLabel>Aneuploidy</preferredLabel>
74 <uri>
75 <uri>http://thesaurus.nbii.gov/Concept/409</uri>
76 </uri>
77 </Concept>
78 <Concept>
79 <nonPreferredLabels />
80 <preferredLabel>Chromosome aberrations</preferredLabel>
81 <uri>
82 <uri>http://thesaurus.nbii.gov/Concept/1608</uri>
83 </uri>
84 </Concept>
85 <Concept>
86 <nonPreferredLabels />
87 <preferredLabel>Aristapedia</preferredLabel>
88 <uri>
89 <uri>http://thesaurus.nbii.gov/Concept/611</uri>
90 </uri>
91 </Concept>
92 <Concept>
93 <nonPreferredLabels />
94 <preferredLabel>Congenital defects</preferredLabel>
95 <uri>
96 <uri>http://thesaurus.nbii.gov/Concept/1860</uri>
97 </uri>
98 </Concept>
99 <Concept>
100 <nonPreferredLabels />
101 <preferredLabel>Loss of heterozygosity</preferredLabel>
102 <uri>
103 <uri>http://thesaurus.nbii.gov/Concept/4991</uri>
104 </uri>
105 </Concept>
106 <Concept>
107 <nonPreferredLabels />
108 <preferredLabel>Nondisjunction</preferredLabel>
109 <uri>
110 <uri>http://thesaurus.nbii.gov/Concept/5870</uri>
111 </uri>
112 </Concept>
113 <Concept>
114 <nonPreferredLabels />
115 <preferredLabel>Ring chromosomes</preferredLabel>
116 <uri>
117 <uri>http://thesaurus.nbii.gov/Concept/7481</uri>
118 </uri>
119 </Concept>
120 <Concept>
121 <nonPreferredLabels />
122 <preferredLabel>Translocation (genetics)</preferredLabel>
123 <uri>
124 <uri>http://thesaurus.nbii.gov/Concept/8906</uri>
125 </uri>
126 </Concept>
127 <Concept>
128 <nonPreferredLabels />
129 <preferredLabel>Neural tube defects</preferredLabel>
130 <uri>
131 <uri>http://thesaurus.nbii.gov/Concept/5758</uri>
132 </uri>
133 </Concept>
134 <Concept>
135 <nonPreferredLabels />
136 <preferredLabel>Genetic abnormalities</preferredLabel>
137 <uri>
138 <uri>http://thesaurus.nbii.gov/Concept/3611</uri>
139 </uri>
140 </Concept>
141 <Concept>
142 <nonPreferredLabels />
143 <preferredLabel>Limb malformations</preferredLabel>
144 <uri>
145 <uri>http://thesaurus.nbii.gov/Concept/4896</uri>
146 </uri>
147 </Concept>
148 </concepts>
149 <distance>1</distance>
150 <relation>
151 <label>http://www.w3.org/2004/02/skos/core#useFor</label>
152 </relation>
153 </ConceptRelatives>
154 <ConceptRelatives>
155 <concepts>
156 <Concept>
157 <nonPreferredLabels />
158 <preferredLabel>Teratogenesis</preferredLabel>
159 <uri>
160 <uri>http://thesaurus.nbii.gov/Concept/8674</uri>
161 </uri>
162 </Concept>
163 <Concept>
164 <nonPreferredLabels />
165 <preferredLabel>Teratology</preferredLabel>
166 <scopeNote>Science treating malformations and monstrosities of plants and animals.</scopeNote>
167 <uri>
168 <uri>http://thesaurus.nbii.gov/Concept/8677</uri>
169 </uri>
170 </Concept>
171 <Concept>
172 <nonPreferredLabels />
173 <preferredLabel>Teratogens</preferredLabel>
174 <scopeNote>Agents that raise the incidence of congenital malformations</scopeNote>
175 <uri>
176 <uri>http://thesaurus.nbii.gov/Concept/8676</uri>
177 </uri>
178 </Concept>
179 </concepts>
180 <distance>1</distance>
181 <relation>
182 <label>http://www.w3.org/2004/02/skos/core#useFor</label>
183 </relation>
184 </ConceptRelatives>
185 <ConceptRelatives>
186 <concepts>
187 <Concept>
188 <nonPreferredLabels />
189 <preferredLabel>ASF</preferredLabel>
190 <uri>
191 <uri>http://thesaurus.nbii.gov/Concept/9558</uri>
192 </uri>
193 </Concept>
194 <Concept>
195 <nonPreferredLabels />
196 <preferredLabel>LSC</preferredLabel>
197 <uri>
198 <uri>http://thesaurus.nbii.gov/Concept/9560</uri>
199 </uri>
200 </Concept>
201 </concepts>
202 <distance>1</distance>
203 <relation>
204 <label>http://www.w3.org/2004/02/skos/core#useFor</label>
205 </relation>
206 </ConceptRelatives>
207 <ConceptRelatives>
208 <concepts>
209 <Concept>
210 <nonPreferredLabels>
211 <String>Malformations</String>
212 </nonPreferredLabels>
213 <preferredLabel>Abnormalities</preferredLabel>
214 <uri>
215 <uri>http://thesaurus.nbii.gov/Concept/11</uri>
216 </uri>
217 </Concept>
218 <Concept>
219 <nonPreferredLabels>
220 <String>Malformations</String>
221 </nonPreferredLabels>
222 <preferredLabel>Anomalies (defects)</preferredLabel>
223 <uri>
224 <uri>http://thesaurus.nbii.gov/Concept/458</uri>
225 </uri>
226 </Concept>
227 <Concept>
228 <nonPreferredLabels>
229 <String>Malformations</String>
230 </nonPreferredLabels>
231 <preferredLabel>Body deformations</preferredLabel>
232 <uri>
233 <uri>http://thesaurus.nbii.gov/Concept/1087</uri>
234 </uri>
235 </Concept>
236 </concepts>
237 <distance>1</distance>
238 <relation>
239 <label>http://www.w3.org/2004/02/skos/core#useFor</label>
240 </relation>
241 </ConceptRelatives>
242 </conceptRelatives>
243 </ConceptResult>
244 </Array>
Whereby the number of lines is reduced to a fourth of the original response, and all the extra nested uri's count for quite some.
Now I'm ready to have a further look at it and maybe work on my own small webapp to browse this Thesaurus.