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

Starting TCPMon from ant

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

Since I love to see the brackets that tickle down the wire - that sweet ol' XML I've had great use of TCPMon. Originally it was part of Axis1 (maybe also the prior project) but with Axis2 is has been factored out to a separate project under WS-Commons as TCPMon (at the moment there isn't any link to it from the WS-Commons root folder, but that should be updated soon).

I've normally just started it from a minimal shell script, but as I was using a Windows machine the other day i stroke me that It would be easy and platform (OS) independent to start it from Ant - well it sure is:

<target name="tcpmon" description="Starts TCPMonitor">
  <java fork="yes" 
        classname="org.apache.ws.commons.tcpmon.TCPMon" 
        failonerror="true" 
        classpath="${tcpmon.jar}">
    <arg value="${tcpmon.port}" />
    <arg value="${destination.hostname}" />
    <arg value="${destination.port}" />
  </java>
</target>

Notice that the package.classname has changed due to the new project. Now it's real easy to start it either on the commandline direct through ant og though the Eclipse Ant view.

Read more

Sunday, April 22, 2007

Finally a webservice: DREFT and SKOS for Thesaurus

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

In my last post SemWeb terms: Controlled vocabulary, Taxonomy, Thesaurus and Ontology i got a decent idea of what the terms meant, but not much about serializing it to XML. In My shortcut into Taxonomy in W3C XML I did look at an example of a simple taxonomy written i OWL, and it should in general be possible to write any af these in OWL (if not everything that anyone can throw against it). OWL comes in three editions, but some have asked for an even lighter version, and that might be RDF/SKOS that's be standardized in W3C.

Simple Knowledge Organisation Systems (SKOS)

Once again wikipedia has a great definition for SKOS:

SKOS or Simple Knowledge Organisation System is a family of formal languages designed for representation of thesauri, classification schemes, taxonomies, subject-heading systems, or any other type of structured controlled vocabulary. SKOS is built upon RDF and RDFS, and its main objective is to enable easy publication of controlled structured vocabularies for the Semantic Web.

This is also close to the definition in the abstract of the current working draft. On the SKOS site there are links to the current drafts:

Looking at the dates of these documents is not encouraging, but a notice on the frontpage does indicate that this project is to be accelerated an finalized in finite time:

The new W3C Semantic Web Deployment Working Group (SWDWG) had its first teleconference meeting on 10 October. The WG has been given responsibility for developing and maintaining SKOS, and is chartered to work towards publishing SKOS as a W3C Recommendation by the first quarter of 2008. For more information see the SWDWG home page and the SWDWG charter.

But even a more simple format doesn't open itself for me, so I was looking for some examples and found something that caught my interest: a webservice based on SKOS, looks like the perfect way in for me.

Demo of RDF Thesaurus (DREFT)

I've looked at the name many times and havn't figured out how it came to be called DREFT (also sometimes called SKOS thesaurus web service API), but anyway the background is described in RDF Thesaurus Prototype (part of SWAD-Europe Thesaurus Activity and dates back to 28'th September 2004.

In the technical description of the service (2.5. Terminology and Methods):

We opted to use the RPC/Encoded service style for this first version of the Web Service implementation - our decision being largely influenced by the relative availability of open source tool support for RPC/Encoded (ahead of Document/Literal) at the time the workpackage commenced.

I can't remember where WS-I was at that time, but they were aware of it and choose based on open source tooling, which is a valid argument i my mind and also they started out earlier than the time of this publication. They made even more effort for compliance:

The service's WSDL file needs to be applicable to any implementation language, and it was seen as best practice to not overload API methods, since some languages do not support method overloading. Thus where API methods differ only in the types of their parameter, the method name gains a suffix such as ByThesaurus or ByExternalID. We are also aware that the best practice WS-I Basic Profile[WSIBP] recommends against method overloading.

Next thing will be to look at an actual service.

Read more

Wednesday, April 18, 2007

SemWeb terms: Controlled vocabulary, Taxonomy, Thesaurus and Onthology

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

To move freely in the world of semantic web I'll have to learn the basic terms.

Ontopia has a very good article called Metadata? Thesauri? Taxonomies? Topic Maps!, that does just that and relates it to topic maps that I'll leave for now. Steve Pepper ( whom I've seen doing one of his numerous presentations about Topic Maps/Semantics) has another article called Ten Theses on Topic Maps and RDF on the similarities and differences). Precise definition of the central words are (From 2.1. What is metadata?):

We will use the term object here for the entities being organized, as it does not seem appropriate to assume that they will all be documents in the traditional sense of the word.

and in the footnote:

take 'subject' to mean 'any concept in which the user may potentially be interested'.

and then in 3. Subject-based classification I'm getting started:

Subject-based classification is any form of content classification that groups objects by the subjects they are about.

So in the context of a library I could translate this into:

that groups books (objects) by the subjects they are about.

well if I thought that was hairy it get's worse a couple of paragraphs below:

there is a difference between describing the objects being classified and describing the subjects used to classify them. What we will discuss in this section are the different approaches to describing subjects. Metadata describes objects, and one of the ways in which it does that is by connecting objects to the subjects they are about. We will return to this idea below.

The next definition is one of whose I came for (in 3.1. Controlled vocabularies):

Controlled vocabulary is a rather broad term, but here we mean by it a closed list of named subjects, which can be used for classification. In library science this is sometimes known as an indexing language. The constituents of a controlled vocabulary are usually known as terms, where a term is a particular name for a particular concept. (This is pretty much the same as the common-sense notion of a keyword.)

This is simple, but also in some ways not so simple be cause there are different word with the same meaning called Symonyms (as described in wikipedia):

Synonyms are different words with similar or identical meanings and are interchangeable. Antonyms are words with opposite or nearly opposite meanings (synonym and antonym are antonyms).

in an attempt to reduce the confusion, the word concept is used to define the abstract, well, conecept, and the word term is a concrete name of a concept, and that the same concept may have multiple names. It can also be the other way around that the same term can name multiple subjects, called a Homonym (as described in wikipedia):

A homonym is one of a group of words that share the same spelling or pronunciation (or both) but have different meanings. Examples are stalk (which can mean either part of a plant or to follow (someone) around), and the trio of words to, too and two.

as a sidenote the definition of homonym in wiktionary is even more precise:

A word that sounds or is spelled the same as another word but has a different meaning. (Homonyms are divided into the two overlapping subcategories homographs and homophones. Examples: die and dye (homophones but not homographs); the fish fluke and fluke, part of the tail of a whale (homophones and homographs); the metal lead and the verb form lead (homographs but not homophones.)

The controlled vocabulary consists of deadly terms, and not directly of abstract concepts, meaning the same as the term "subject" used so far.

The purpose of controlling vocabulary is to have a common definition and to be used both when producing and consuming.

Taxonomy

The next step in the foodchain, eating some more entrophy, is a taxonomy with the following definition in the articel:

.. use taxonomy to mean a subject-based classification that arranges the terms in the controlled vocabulary into a hierarchy without doing anything further..

The benefit of this approach is that it allows related terms to be grouped together and categorized in ways that make it easier to find the correct term to use whether for searching or to describe an object.

That's is arrange the soup of words in a hierarchical order. The definition of Taxonomy in Wikipedia:

Taxonomy is the practice and science of classification. The word comes from the Greek τάξις, taxis, 'order' + νόμος, nomos, 'law' or 'science'. Taxonomies, which are composed of taxonomic units known as taxa (singular taxon), are frequently hierarchical in structure, commonly displaying parent-child relationships.

Dinge-linge-ling (bells ringing) in my lat post My shortcut into Taxonomy in W3C XML is was sort of surprised over the use of the term class, but now I see the logic of it, since I am doing classification, with sub and super classes - bingo.

Thesaurus

A Thesaurus is for a changed defined by two ISO standards describing their structure:

  • [ISO2788] describes monolingual thesauri
  • [ISO5964] is for multilingual thesauri

Though the article notes that in practice many users extend the structure somewhat, and in some cases the term are applied to structures differing substantially from what is described here. Thesauri takes taxonomies and adds the ability to make other statements about the subjects:

BT
Short for broader term, refers to the term above this one in the hierarchy; that term must have a wider or less specific meaning. One could say that taxonomies as described above are thesauri that only use the BT/NT properties to build a hierarhcy, and don't make use of any of the properties described below, so it could be said that every thesaurus contains a taxonomy
SN
Short for scope note.
USE
Refers to another term that is to be preferred instead of this term; implies that the terms are synonymous.
TT
Short for top term, and refers to the topmost ancestor of this term.
RT
Short for "related term", refers to a term that is related to this term, without being a synonym of it or a broader/narrower term.

Faceted classification

I didn't really know of Faceted classification but there's a nice example on wikipedia:

The most prominent use of faceted classification is in faceted navigation systems that enable a user to navigate information hierarchically, going from a category to its sub-categories, but choosing the order in which the categories are presented. This contrasts with traditional taxonomies in which the hierarchy of categories is fixed and unchanging. For example, a traditional restaurant guide might group restaurants first by location, then by type, price, rating, awards, ambiance, and amenities. In a faceted system, a user might decide first to divide the restaurants by price, and then by location and then by type, while another user could first sort the restaurants by type and then by awards. Thus, faceted navigation, like taxonomic navigation, guides users by showing them available categories (or facets), but does not require them to browse through a hierarchy that may not precisely suit their needs or way of thinking.

and as described in the article:

... works by identifying a number of facets into which the terms are divided. The facets can be thought of as different axes along which documents can be classified, and each facet contains a number of terms. How the terms within each facet are described varies, though in general a thesaurus-like structure is used, and usually a term is only allowed to belong to a single facet ...

Ontology

Finally on to the big fat lady of semantics Onthologies:

... the core meaning within computer science is a model for describing the world that consists of a set of types, properties, and relationship types. Exactly what is provided around this varies, but this is the essentials of an ontology. There is also generally an expectation that there be a close resemblance between the real world and the features of the model in an ontology.

and in wikipedia:

In both computer science and information science, an ontology is a data model that represents a set of concepts within a domain and the relationships between those concepts. It is used to reason about the objects within that domain.

Read more

My shortcut into Taxonomy in W3C XML

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

Full of energy i ran at full speed into the RDF specs, oh boy it's solid! Even with the best of intentions they are to heavy for me, to I though about another route into this mountain of knowledge that I've never climbed before. I realized that I needed examples that I could work with and also a tool to get my own examples going. The tool part was easy since I've known about protégé - a free, open source ontology editor and knowledge-base framework) from Stanford. I downloaded a copy of the current beta and started it up and wanted to create a small taxonomy. Uugh, for a first-timer it's big and all the terms used doesn't give any (relevant) special meaning to me. Properties must part of the triplet, but the classes do i need them? Okay, i must find some examples and went for a taxonomy since i figured that taxonomy are one of the simplest things in the semweb world. I found some on the UN website, but I didn't find any in RDF or something alike. Back to searching and then I found nice little example by Styrheim called Taxonomies in OWL. In this article the example is based on the taxonomy of the Germanic languages, and it's shown in three variants:

When I loaded this example into Protege it didn't look right, since 'Danish' was at the top level. After taking a second look i found an extra whitespace in the definition of Danish with rdf:ID="Danish ".

The example is exactly so small that it's easy to grasp and still contains the needed complexity to give an idea of how it works. I'm sure that there are tons of good examples out there, but the main point here was that I was looking for an example for a Taxonomy in RDF but found that it needed RDFS/OWL. Does it have to be like that? I just thought of a statement that would sound like:

Danish is a kind of Continental North Germanic

which is a triplet, that could be expressed in RDF, but with my private/custom property, so in that sence it's better to use a standard property of RDFS and express it all in OWL, which also deems them as classes.

Read more