Sunday, April 29, 2007

The WS-Star is still growing - new standards for Context and Notification

pencil icon, that"s clickable to start editing the post

Happy days - yet another WS-* standard has come out of the Oasis Standard Factory.

In a press release from the 25. april the happy news is that WS-Context has become an Oasis standard. Uhmm, well I haven't heard of it before, but I guess it's better with standards than drafts. The work has been done in the OASIS Web Services Composite Application Framework (WS-CAF) TC, but what is it there doing, let's see the charter. The top piecs is:

The purpose of the OASIS Web Services Composite Application Framework TC is to define a generic and open framework for applications that contain multiple services used in combination (composite applications).

Multiple web services combined in composite applications require interoperable mechanisms to set the boundaries of an activity (such as start/end, or success/failure), to create, access and manage context information, and to inform participants of changes to an activity. Composite applications might also need to work with a range of transaction models, including simple activity scoping, single and two phase commit ACID transactions, and recoverable long running activities.

Yuep, real nice, real abstract and sounds like something similar in other specs - do these Oasis Comittees really coordinate? Following the charter they should:

Interoperability, ease of implementation, and ease of use will be fundamental characteristics for WS-CAF. The TC's work should build upon similar, existing standards wherever possible and to align where appropriate with other relevant standards. Alignment means any of the following: feature reuse, bindings, guidelines on how to jointly use the specification with other related ones, or addressing requirements from other related standards.

It's not all that clear how they feel about work in progress and close to final work versus final standards, but I'll hope. As for the need I'm not near clever enough to evaluate that. But I can see that if things haven't changed since the charter was written, there are more WS-* spec's on it's way:

List of Deliverables

  • A revised WS-Context specification. Draft due within 6 months of first meeting.
  • A revised WS-Coordination Framework specification. Draft Due within 10 months of first meeting.
  • A revised WS-Transaction Management specification. Draft due within 14 months of first meeting.
  • A primer introducing the above specifications, including use cases and scenarios as appropriate.

Of all these artifacts I'm longing for the primer the most. The initial drafts were contributed by: Arjuna, Fujitsu, Iona, Oracle, and Sun Microsystems. I'm missing IBM and Microsoft, and doesn't this have a resemblance with what happened to the original WSRM ( I believe that Oracle and Sun were on that first TC). This could mean that either they think:

  • that these guys will do it right without involvement
  • that the area of work is not important
  • that they have something similar going that they'll fight over later on

Time will tell, but any ways the approved standard for WS-Context is fairly small but that's all I know for now. A quick look at the Apache Web Services project does not show any projects working on WS-Context, which I'll take as a sign that it's not that important and for sure that I'll no be able to use it with the Apache stack for some time.

Read more

Thursday, April 26, 2007

Second look at the NBII DREFT web service

pencil icon, that"s clickable to start editing the post

After my first post about the NBII DREFT web service I yesteday had a second look at it. I decided to refactor the JSP sample client source code for Demo 1 to JSPX/JSTL, beacuse I figured out that redoing the presentation would be an easy way into how data model was. That was a good idea, but not as easy as I thought. The Concept construct was relatively clear to me, but what about Concept Relatives? all ready here I was totally blank. The JSP example is sort of classes MODEL 1 web architecture with the same page both containing the form, receiving the submitted data and doing the presentation. That's not my preferred way of doing it, and neither best practice would I think, som I'll split it up with a very simple Front Controller doing the web servcice call and dispatching to XML style JSP pages, JSPX - hey man, I dig those angle brackets :-). Using JSTL I'm able to do scriptless pages, which are much easier to read/maintain.

In the JSP example there is a comment and some constants are defined like:

the following declarations are to get the associated terms off the conceptResult object. They are stored in the following order. So use the following variables or their values to retrieve the right associated group of terms
  int BROADER = 0;
  int NARROWER = 1;
  int RELATED = 2;
  int SUBJECT = 3;
  int USEFOR = 4;

I sort of didn't understand it right, because when i saw this in the code:

....
//display synonyms for a particular Term Category
if(conceptRelatives != null)
{
  if(displayAll||termGroupList.contains(BT))
  {
    //broader terms          
    ConceptRelatives btConRel = conceptRelatives[BROADER];   
    ....

I was really surprised, because it's almost like voodoo to have that kind of meaning into a sequence (the order), and what puzzled me even more was that these were not even always present, as my example showed me in the Betwixt dump of the object model. What did the schema say:

...
   95       <complexType name="ConceptResult">
   96         <sequence>
   97           <element
   98             name="conceptRelatives"
   99             nillable="true"
  100             type="impl:ArrayOf_tns1_ConceptRelatives" />
  101           <element
  102             name="concept"
  103             nillable="true"
  104             type="tns1:Concept" />
  105         </sequence>
  106       </complexType>
...
...
...
  112       <complexType name="ArrayOf_tns1_ConceptRelatives">
  113         <complexContent>
  114           <restriction base="soapenc:Array">
  115             <attribute
  116               ref="soapenc:arrayType"
  117               wsdl:arrayType="tns1:ConceptRelatives[]" />
  118           </restriction>
  119         </complexContent>
  120       </complexType>

Nothing here. This was very strange and I used quite some time figuring out what was wrong. It turned out that I has sort of fooled my self. I then ran the example and it seemed to work right, which was an even greater puzzle to me. I went back and looked at the encoded response message and found:

   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>

Those darn xsi:nil they were in the response and therefore in the object model, but Betwixt (and the J2SE XMLEncoder) didn't serialize them since they were null.

So what did I learn from that? That I vulnerable when I know almost zip about the subject, and that i oversaw the fact that they were there and that in fact there is always 5 entires in the ConceptRelatives array. Of couse it's just wated time and there is no one to blame, but it could have been avoided if the creator of the service/WSDL had been explicit about with a minOccurs="5" maxOccurs="5"> as a minimum, but to be really god the diffent semantics of the entries in the array should have been explicit and not kept in an generic type, so like <NarrowerTermCollection>. If I don't give up on this thing I'll try and make a doc/lit WSDL to the best of my knowledge later on, but with the progress rate I'm at right know that's not very likely.

Now that's one thing, another is the indicated Relations in //relation/label is always http://www.w3.org/2004/02/skos/core#useFor which most be an error.

Read more

Tuesday, April 24, 2007

The National Biological Information Infrastructure (NBII) Dreft web service for the Biocomplexity Thesaurus

pencil icon, that"s clickable to start editing the post

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.

Read more