IHE ITI Technical Framework
The Final Text ITI Technical Framework is published here in HTML format and is no longer published as PDF. Trial Implementation supplements are available from the Volume 1 Table of Contents.

Appendix A: Web Service Definition for Retrieve Specific Information for Display and Retrieve Document for Display Transaction

The following is an example WSDL definition of web services used in transactions [ITI-11] and [ITI-12]. This code is provided as an example and is not intended to replace the formal specification of transactions [ITI-11] and [ITI-12] in Volume 2. Also, the definitions of summaryRequestType, listRequestType and contentType shall correspond to the capabilities of the Information Source.

<?xml version="1.0" encoding="utf8"?>

<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"

    xmlns:s="http://www.w3.org/2001/XMLSchema"

    xmlns:s0="http://rsna.org/ihe/IHERetrieveForDisplay"

    xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"

    xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"

    targetNamespace="http://rsna.org/ihe/IHERetrieveForDisplay"

    xmlns="http://schemas.xmlsoap.org/wsdl/">

  <!-- Defines the types available for the parameters -->

  <!-- May also include the return type definitions -->

  <types>

    <s:schema elementFormDefault="qualified" targetNamespace="http://rsna.org/ihe/IHERetrieveForDisplay">

      <!-- Add any items that control the returned values list or type here -->

      <!-- Add or remove items in the actual supplied WSDL to show the available types. -->

      <s:simpleType name="summaryRequestType">

        <s:restriction base="s:string">

           <s:enumeration value="SUMMARY" />

           <s:enumeration value="SUMMARY-RADIOLOGY" />

           <s:enumeration value="SUMMARY-CARDIOLOGY" />

           <s:enumeration value="SUMMARY-LABORATORY" />

           <s:enumeration value="SUMMARY-SURGERY" />

           <s:enumeration value="SUMMARY-EMERGENCY" />

           <s:enumeration value="SUMMARY-DISCHARGE" />

           <s:enumeration value="SUMMARY-ICU" />

        </s:restriction>

      </s:simpleType>

      <s:simpleType name="listRequestType">

        <s:restriction base="s:string">

           <s:enumeration value="LIST-ALLERGIES" />

           <s:enumeration value="LIST-MEDS" />

        </s:restriction>

      </s:simpleType>

      <!-- Please list all content types available, and remove those not available. -->

      <s:simpleType name="contentType">

        <s:restriction base="s:string">

           <s:enumeration value="text/html" />

        </s:restriction>

      </s:simpleType>

      <!-- Indicates that this item is a returned rows restriction -->

      <s:simpleType name="ReturnedResultCount" type="s:positiveInteger" />

      <!-- Please use the string "Search" as a prefix for all search criteria, and list below -->

      <!-- Indicates that this item is a search string -->

      <s:simpleType name="SearchString" type="s:string" />

    </s:schema>

  </types>

  <message name="RetrieveSummaryInfoHttpGetIn">

    <!-- Add other parameters here if they are available, using types defined above. -->

    <part name="requestType" type="summaryRequestType" />

    <part name="patientID" type="SearchString" />

    <part name="lowerDateTime" type="s:dateTime" />

    <part name="upperDateTime" type="s:dateTime" />

    <part name="mostRecentResults" type="ReturnedResultCount" />

  </message>

  <message name="RetrieveSummaryInfoHttpGetOut">

    <!-- If a complex type is defined for the return value, then it is suggested that -->

    <!-- it be used here instead of s0:string. If a complex type is allowed as one -->

    <!-- of the options, but an arbitrarily formatted string is also allowed, then create -->

    <!-- a union type here that allows either option. -->

    <part name="Body" element="s0:string" />

  </message>

  <message name="RetrieveListInfoHttpGetIn">

    <!-- Add other parameters here if they are available, using types defined above. -->

    <part name="requestType" type="listRequestType" />

    <part name="patientID" type="SearchString" />

  </message>

  <message name="RetrieveListInfoHttpGetOut">

    <!-- If a complex type is defined for the return value, then it is suggested that -->

    <!-- it be used here instead of s0:string. If a complex type is allowed as one -->

    <!-- of the options, but an arbitrarily formatted string is also allowed, then create -->

    <!-- a union type here that allows either option. -->

    <part name="Body" element="s0:string" />

  </message>

  <message name="RetrieveDocumentHttpGetIn">

    <!-- Add other parameters here if they are available, using types defined above. -->

    <!-- It is recommended that one of the sub-types of SearchUID is chosen here -->

    <!-- Especially if SearchStudyUID is allowed, then the display client can know that -->

    <!-- it is permissible to use a dicom uid here -->

    <part name="documentUID" type="SearchString" />

    <part name="contentType" type="contentType" />

  </message>

  <message name="RetrieveDocumentHttpGetOut">

    <!-- If a complex type is defined for the return value, then it is suggested that -->

    <!-- it be used here instead of s:string. If a complex type is allowed as one -->

    <!-- of the options, but an arbitrarily formatted string is also allowed, then create -->

    <!-- a union type here that allows either option. -->

    <part name="Body" element="s:string" />

  </message>

  <portType name="IHERetrieveForDisplayHttpGet">

    <operation name="RetrieveSummaryInfo">

      <input message="s0:RetrieveSummaryInfoHttpGetIn" />

      <output message="s0:RetrieveSummaryInfoHttpGetOut" />

    </operation>

       <operation name="RetrieveListInfo">

      <input message="s0:RetrieveListInfoHttpGetIn" />

      <output message="s0:RetrieveListInfoHttpGetOut" />

    </operation>

    <operation name="RetrieveDocument">

      <input message="s0:RetrieveDocumentHttpGetIn" />

      <output message="s0:RetrieveDocumentHttpGetOut" />

    </operation>

  </portType>

  <binding name="IHERetrieveForDisplayHttpGet" type="s0:IHERetrieveForDisplayHttpGet">

    <http:binding verb="GET" />

    <operation name="RetrieveSummaryInfo">

      <http:operation location="/IHERetrieveSummaryInfo" />

      <input>

        <http:urlEncoded />

      </input>

      <output>

        <mime:content type="text/html" />

      </output>

    </operation>

    <operation name="RetrieveListInfo">

      <http:operation location="/IHERetrieveListInfo" />

      <input>

        <http:urlEncoded />

      </input>

      <output>

        <mime:content type="text/html" />

      </output>

    </operation>

    <operation name="RetrieveDocument">

      <http:operation location="/IHERetrieveDocument" />

      <input>

        <http:urlEncoded />

      </input>

      <!-- The type of the output should be restricted on a per-server basis to the types -->

      <!-- actually provided. -->

      <output>

        <mime:content type="text/html" />

        <mime:content type="application/x-hl7-cda-level-one+xml" />

        <mime:content type="application/pdf" />

        <mime:content type="image/jpeg" />

      </output>

    </operation>

  </binding>

  <!-- Bind the actual service here -->

  <service name="IHERetrieveForDisplay">

    <port name="IHERetrieveForDisplayHttpGet" binding="s0:IHERetrieveForDisplayHttpGet">

      <http:address location="http://localhost/" />

    </port>

</service>

<?xml version="1.0" encoding="utf8"?>

<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"

    xmlns:s="http://www.w3.org/2001/XMLSchema"

    xmlns:s0="http://rsna.org/ihe/IHERetrieveForDisplay"

    xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"

    xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"

    targetNamespace="http://rsna.org/ihe/IHERetrieveForDisplay"

    xmlns="http://schemas.xmlsoap.org/wsdl/">

  <!-- Defines the types available for the parameters -->

  <!-- May also include the return type definitions -->

  <types>

    <s:schema elementFormDefault="qualified" targetNamespace="http://rsna.org/ihe/IHERetrieveForDisplay">

      <!-- Add any items that control the returned values list or type here -->

      <!-- Add or remove items in the actual supplied WSDL to show the available types. -->

      <s:simpleType name="summaryRequestType">

        <s:restriction base="s:string">

           <s:enumeration value="SUMMARY" />

           <s:enumeration value="SUMMARY-RADIOLOGY" />

           <s:enumeration value="SUMMARY-CARDIOLOGY" />

           <s:enumeration value="SUMMARY-LABORATORY" />

           <s:enumeration value="SUMMARY-SURGERY" />

           <s:enumeration value="SUMMARY-EMERGENCY" />

           <s:enumeration value="SUMMARY-DISCHARGE" />

           <s:enumeration value="SUMMARY-ICU" />

           <s:enumeration value="SUMMARY-RX" />

        </s:restriction>

      </s:simpleType>

      <s:simpleType name="listRequestType">

        <s:restriction base="s:string">

           <s:enumeration value="LIST-ALLERGIES" />

           <s:enumeration value="LIST-MEDS" />

        </s:restriction>

      </s:simpleType>

      <!-- Please list all content types available, and remove those not available. -->

      <s:simpleType name="contentType">

        <s:restriction base="s:string">

           <s:enumeration value="text/html" />

        </s:restriction>

      </s:simpleType>

      <!-- Indicates that this item is a returned rows restriction -->

      <s:simpleType name="ReturnedResultCount" type="s:positiveInteger" />

      <!-- Please use the string "Search" as a prefix for all search criteria, and list below -->

      <!-- Indicates that this item is a search string -->

      <s:simpleType name="SearchString" type="s:string" />

    </s:schema>

  </types>

  <message name="RetrieveSummaryInfoHttpGetIn">

    <!-- Add other parameters here if they are available, using types defined above. -->

    <part name="requestType" type="summaryRequestType" />

    <part name="patientID" type="SearchString" />

    <part name="lowerDateTime" type="s:dateTime" />

    <part name="upperDateTime" type="s:dateTime" />

    <part name="mostRecentResults" type="ReturnedResultCount" />

  </message>

  <message name="RetrieveSummaryInfoHttpGetOut">

    <!-- If a complex type is defined for the return value, then it is suggested that -->

    <!-- it be used here instead of s0:string. If a complex type is allowed as one -->

    <!-- of the options, but an arbitrarily formatted string is also allowed, then create -->

    <!-- a union type here that allows either option. -->

    <part name="Body" element="s0:string" />

  </message>

  <message name="RetrieveListInfoHttpGetIn">

    <!-- Add other parameters here if they are available, using types defined above. -->

    <part name="requestType" type="listRequestType" />

    <part name="patientID" type="SearchString" />

  </message>

  <message name="RetrieveListInfoHttpGetOut">

    <!-- If a complex type is defined for the return value, then it is suggested that -->

    <!-- it be used here instead of s0:string. If a complex type is allowed as one -->

    <!-- of the options, but an arbitrarily formatted string is also allowed, then create -->

    <!-- a union type here that allows either option. -->

    <part name="Body" element="s0:string" />

  </message>

  <message name="RetrieveDocumentHttpGetIn">

    <!-- Add other parameters here if they are available, using types defined above. -->

    <!-- It is recommended that one of the sub-types of SearchUID is chosen here -->

    <!-- Especially if SearchStudyUID is allowed, then the display client can know that -->

    <!-- it is permissible to use a dicom uid here -->

    <part name="documentUID" type="SearchString" />

    <part name="contentType" type="contentType" />

  </message>

  <message name="RetrieveDocumentHttpGetOut">

    <!-- If a complex type is defined for the return value, then it is suggested that -->

    <!-- it be used here instead of s:string. If a complex type is allowed as one -->

    <!-- of the options, but an arbitrarily formatted string is also allowed, then create -->

    <!-- a union type here that allows either option. -->

    <part name="Body" element="s:string" />

  </message>

  <portType name="IHERetrieveForDisplayHttpGet">

    <operation name="RetrieveSummaryInfo">

      <input message="s0:RetrieveSummaryInfoHttpGetIn" />

      <output message="s0:RetrieveSummaryInfoHttpGetOut" />

    </operation>

       <operation name="RetrieveListInfo">

      <input message="s0:RetrieveListInfoHttpGetIn" />

      <output message="s0:RetrieveListInfoHttpGetOut" />

    </operation>

    <operation name="RetrieveDocument">

      <input message="s0:RetrieveDocumentHttpGetIn" />

      <output message="s0:RetrieveDocumentHttpGetOut" />

    </operation>

  </portType>

  <binding name="IHERetrieveForDisplayHttpGet" type="s0:IHERetrieveForDisplayHttpGet">

    <http:binding verb="GET" />

    <operation name="RetrieveSummaryInfo">

      <http:operation location="/IHERetrieveSummaryInfo" />

      <input>

        <http:urlEncoded />

      </input>

      <output>

        <mime:content type="text/html" />

      </output>

    </operation>

    <operation name="RetrieveListInfo">

      <http:operation location="/IHERetrieveListInfo" />

      <input>

        <http:urlEncoded />

      </input>

      <output>

        <mime:content type="text/html" />

      </output>

    </operation>

    <operation name="RetrieveDocument">

      <http:operation location="/IHERetrieveDocument" />

      <input>

        <http:urlEncoded />

      </input>

      <!-- The type of the output should be restricted on a per-server basis to the types -->

      <!-- actually provided. -->

      <output>

        <mime:content type="text/html" />

        <mime:content type="application/x-hl7-cda-level-one+xml" />

        <mime:content type="application/pdf" />

        <mime:content type="image/jpeg" />

      </output>

    </operation>

  </binding>

  <!-- Bind the actual service here -->

  <service name="IHERetrieveForDisplay">

    <port name="IHERetrieveForDisplayHttpGet" binding="s0:IHERetrieveForDisplayHttpGet">

      <http:address location="http://localhost/" />

    </port>

</service>