Let's look at a couple of concrete examples. In the first
example, we'll run a profile query against some planetary data
servers; the second example will run a product query for cancer
biomarkers.
Suppose you wanted to know what PDS product servers supported
the query el
ement
ONLINE_FILE_SPECIFICATION_NAME
.
You could pass that element to the PDS system profile server named
urn:eda:rmi:PDS.System.Profile
using the query
servlet at
http://starbrite.jpl.nasa.gov/servlet/jpl.oodt.servlets.QueryServlet
.
You can formulate the HTTP
GET
request in a URL as
follows:
http://starbrite.jpl.nasa.gov/servlet/jpl.oodt.servlets.QueryServlet?
object=urn:eda:rmi:PDS.System.Profile
&
type=profile
&
keywordQuery=ONLINE_FILE_SPECIFICATION_NAME+%3D+ANY
Note that we've broken this URL into multiple lines for
readability. There should be no linebreaks in a real URL. Note
the following about this URL:
-
The question-mark separates the request URI from its
parameters.
-
The parameters may come in any order.
-
The
object
parameter names the target of the
query; in this case, the RMI product server named
urn:eda:rmi:PDS.System.Profile
.
-
The
type
parameter specifies that we're doing a
profile search
.
-
The
keywordQuery
parameter identifies the query
expression. Note the URL encoding: the spaces become
+
symbols, and the equals sign become
%3D
.
The response from such a query is an XML document; this XML
document describes matching profiles and may take a form such as
the following:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE profiles PUBLIC "-//JPL//DTD OODT Profile 1.1//EN"
"http://starshine.jpl.nasa.gov:80/dtd/prof.dtd">
<profiles>
<profile>
<profAttributes>
<profId>1.3.6.1.4.1.1306.2.1.1.7</profId>
<profType>profile</profType>
<profStatusId>active</profStatusId>
</profAttributes>
<resAttributes>
<Identifier>PDS.ASU.Product</Identifier>
<Title>
PDS Arizona State University Data Node Product Server
</Title>
<Format>text/html</Format>
<resContext>NASA.PDS.ASU</resContext>
<resClass>system.productServer</resClass>
<resLocation>
http://starbrite.jpl.nasa.gov/servlet/
jpl.oodt.servlets.ProductServlet?object=PDS.ASU.Product
</resLocation>
<resLocation>urn:eda:rmi:PDS.ASU.Product</resLocation>
</resAttributes>
<profElement>
<elemName>ONLINE_FILE_SPECIFICATION_NAME</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
<profElement>
<elemName>RETURN_TYPE</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemValue>PDS_ZIP</elemValue>
<elemValue>PDS_LABEL</elemValue>
<elemValue>RAW</elemValue>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
</profile>
<profile>
<profAttributes>
<profId>1.3.6.1.4.1.1306.2.1.1.6</profId>
<profType>profile</profType>
<profStatusId>active</profStatusId>
</profAttributes>
<resAttributes>
<Identifier>PDS.RS.Product</Identifier>
<Title>PDS Radio Science Product Server</Title>
<Format>text/html</Format>
<resContext>NASA.PDS.RS</resContext>
<resClass>system.productServer</resClass>
<resLocation>
http://starbrite.jpl.nasa.gov/servlet/
jpl.oodt.servlets.ProductServlet?object=PDS.RS.Product
</resLocation>
<resLocation>urn:eda:rmi:PDS.RS.Product</resLocation>
</resAttributes>
<profElement>
<elemName>ONLINE_FILE_SPECIFICATION_NAME</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
<profElement>
<elemName>RETURN_TYPE</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemValue>PDS_ZIP</elemValue>
<elemValue>PDS_LABEL</elemValue>
<elemValue>RAW</elemValue>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
</profile>
<profile>
<profAttributes>
<profId>1.3.6.1.4.1.1306.2.1.1.4</profId>
<profType>profile</profType>
<profStatusId>active</profStatusId>
</profAttributes>
<resAttributes>
<Identifier>PDS.Atmos.Product</Identifier>
<Title>PDS Atmospheres Product Server</Title>
<Format>text/html</Format>
<resContext>NASA.PDS.Atmos</resContext>
<resClass>system.productServer</resClass>
<resLocation>
http://starbrite.jpl.nasa.gov/servlet/
jpl.oodt.servlets.ProductServlet?object=PDS.Atmos.Product
</resLocation>
<resLocation>urn:eda:rmi:PDS.Atmos.Product</resLocation>
</resAttributes>
<profElement>
<elemName>ONLINE_FILE_SPECIFICATION_NAME</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
<profElement>
<elemName>RETURN_TYPE</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemValue>PDS_ZIP</elemValue>
<elemValue>PDS_LABEL</elemValue>
<elemValue>RAW</elemValue>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
</profile>
<profile>
<profAttributes>
<profId>1.3.6.1.4.1.1306.2.1.1.3</profId>
<profType>profile</profType>
<profStatusId>active</profStatusId>
</profAttributes>
<resAttributes>
<Identifier>PDS.NAIF.Product</Identifier>
<Title>PDS NAIF Product Server</Title>
<Format>text/html</Format>
<resContext>NASA.PDS.NAIF</resContext>
<resClass>system.productServer</resClass>
<resLocation>
http://starbrite.jpl.nasa.gov/servlet/
jpl.oodt.servlets.ProductServlet?object=PDS.NAIF.Product
</resLocation>
<resLocation>urn:eda:rmi:PDS.NAIF.Product</resLocation>
</resAttributes>
<profElement>
<elemName>ONLINE_FILE_SPECIFICATION_NAME</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
<profElement>
<elemName>RETURN_TYPE</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemValue>PDS_ZIP</elemValue>
<elemValue>PDS_LABEL</elemValue>
<elemValue>RAW</elemValue>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
</profile>
<profile>
<profAttributes>
<profId>1.3.6.1.4.1.1306.2.1.1.2</profId>
<profType>profile</profType>
<profStatusId>active</profStatusId>
</profAttributes>
<resAttributes>
<Identifier>PDS.Geo.Product</Identifier>
<Title>PDS Geosciences Product Server</Title>
<Format>text/html</Format>
<resContext>NASA.PDS.GEO</resContext>
<resClass>system.productServer</resClass>
<resLocation>
http://starbrite.jpl.nasa.gov/servlet/
jpl.oodt.servlets.ProductServlet?object=PDS.Geo.Product
</resLocation>
<resLocation>urn:eda:rmi:PDS.Geo.Product</resLocation>
</resAttributes>
<profElement>
<elemName>ONLINE_FILE_SPECIFICATION_NAME</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
<profElement>
<elemName>RETURN_TYPE</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemValue>PDS_ZIP</elemValue>
<elemValue>PDS_LABEL</elemValue>
<elemValue>RAW</elemValue>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
</profile>
<profile>
<profAttributes>
<profId>1.3.6.1.4.1.1306.2.1.1.1</profId>
<profType>profile</profType>
<profStatusId>active</profStatusId>
</profAttributes>
<resAttributes>
<Identifier>PDS.CN.Product</Identifier>
<Title>PDS Central Node Archive Product Server</Title>
<Format>text/html</Format>
<resContext>NASA.PDS.CN</resContext>
<resClass>system.productServer</resClass>
<resLocation>
http://starbrite.jpl.nasa.gov/servlet/
jpl.oodt.servlets.ProductServlet?object=PDS.CN.Product
</resLocation>
<resLocation>urn:eda:rmi:PDS.CN.Product</resLocation>
</resAttributes>
<profElement>
<elemName>ONLINE_FILE_SPECIFICATION_NAME</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
<profElement>
<elemName>RETURN_TYPE</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemValue>PDS_ZIP</elemValue>
<elemValue>PDS_LABEL</elemValue>
<elemValue>RAW</elemValue>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
</profile>
<profile>
<profAttributes>
<profId>1.3.6.1.4.1.1306.2.1.1.10</profId>
<profType>profile</profType>
<profStatusId>active</profStatusId>
</profAttributes>
<resAttributes>
<Identifier>PDS.CN.Profile</Identifier>
<Title>PDS.CN.Profile</Title>
<Format>text/html</Format>
<resContext>NASA.PDS.CN</resContext>
<resClass>system.productServer</resClass>
<resLocation>
http://starbrite.jpl.nasa.gov/servlet/
jpl.oodt.servlets.ProductServlet?object=PDS.CN.Profile
</resLocation>
<resLocation>urn:eda:rmi:PDS.CN.Profile</resLocation>
</resAttributes>
<profElement>
<elemName>ONLINE_FILE_SPECIFICATION_NAME</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
<profElement>
<elemName>RETURN_TYPE</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemValue>PDS_ZIP</elemValue>
<elemValue>PDS_LABEL</elemValue>
<elemValue>RAW</elemValue>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
</profile>
<profile>
<profAttributes>
<profId>1.3.6.1.4.1.1306.2.1.1.9</profId>
<profType>profile</profType>
<profStatusId>active</profStatusId>
</profAttributes>
<resAttributes>
<Identifier>PDS.PPI.Product</Identifier>
<Title>
PDS Planetary Plasma Interactions Product Server
</Title>
<Format>text/html</Format>
<resContext>NASA.PDS.PPI</resContext>
<resClass>system.productServer</resClass>
<resLocation>
http://starbrite.jpl.nasa.gov/servlet/
jpl.oodt.servlets.ProductServlet?object=PDS.PPI.Product
</resLocation>
<resLocation>urn:eda:rmi:PDS.PPI.Product</resLocation>
</resAttributes>
<profElement>
<elemName>ONLINE_FILE_SPECIFICATION_NAME</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
<profElement>
<elemName>RETURN_TYPE</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemValue>PDS_ZIP</elemValue>
<elemValue>PDS_LABEL</elemValue>
<elemValue>RAW</elemValue>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
</profile>
<profile>
<profAttributes>
<profId>1.3.6.1.4.1.1306.2.1.1.8</profId>
<profType>profile</profType>
<profStatusId>active</profStatusId>
</profAttributes>
<resAttributes>
<Identifier>PDS.Img.Product</Identifier>
<Title>PDS Imaging Product Server</Title>
<Format>text/html</Format>
<resContext>NASA.PDS.Img</resContext>
<resClass>system.productServer</resClass>
<resLocation>
http://starbrite.jpl.nasa.gov/servlet/
jpl.oodt.servlets.ProductServlet?object=PDS.Img.Product
</resLocation>
<resLocation>urn:eda:rmi:PDS.Img.Product</resLocation>
</resAttributes>
<profElement>
<elemName>ONLINE_FILE_SPECIFICATION_NAME</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
<profElement>
<elemName>RETURN_TYPE</elemName>
<elemType>CHARACTER</elemType>
<elemEnumFlag>T</elemEnumFlag>
<elemValue>PDS_ZIP</elemValue>
<elemValue>PDS_LABEL</elemValue>
<elemValue>RAW</elemValue>
<elemMaxOccurrence>0</elemMaxOccurrence>
</profElement>
</profile>
</profiles>
Suppose you had a query servlet available at
http://pancreas/qs
, and you want to query the CORBA
product server
urn:eda:corba:TissueBank
with the
query expression
SeverityLevel = 3
. You can
formulate the entire
GET
request as the following
URL:
http://pancreas/qs?
type=product&
object=urn:eda:corba:TissueBank&
keywordQuery=SeverityLevel+%3D+3
(Again, we've broken the URL for readability.) The result to
this query could be an XML document like the following:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE query PUBLIC "-//JPL//DTD OODT Query 1.0//EN"
"http://pancreas/dtd/query.dtd">
<query>
<queryAttributes>
<queryId>UNKNOWN</queryId>
<queryTitle>UNKNOWN</queryTitle>
<queryDesc>UNKNOWN</queryDesc>
<queryType>QUERY</queryType>
<queryStatusId>ACTIVE</queryStatusId>
<querySecurityType>UNKNOWN</querySecurityType>
<queryRevisionNote>
1999-12-12 JSH V1.0 Under Development
</queryRevisionNote>
<queryDataDictId>UNKNOWN</queryDataDictId>
</queryAttributes>
<queryResultModeId>ATTRIBUTE</queryResultModeId>
<queryPropogationType>BROADCAST</queryPropogationType>
<queryPropogationLevels>N/A</queryPropogationLevels>
<queryMimeAccept>*/*</queryMimeAccept>
<queryMaxResults>100</queryMaxResults>
<queryResults>0</queryResults>
<queryKWQString>SeverityLevel = 3</queryKWQString>
<querySelectSet>
<queryElement>
<tokenRole>LITERAL</tokenRole>
<tokenValue>3</tokenValue>
</queryElement>
<queryElement>
<tokenRole>elemName</tokenRole>
<tokenValue>SeverityLevel</tokenValue>
</queryElement>
<queryElement>
<tokenRole>RELOP</tokenRole>
<tokenValue>EQ</tokenValue>
</queryElement>
</querySelectSet>
<queryFromSet/>
<queryWhereSet/>
<queryResultSet>
<resultElement>
<resultId>1</resultId>
<resultMimeType>text/plain</resultMimeType>
<profId>TissueBank</profId>
<identifier/>
<resultHeader>
<headerElement>
<elemName>UNKNOWN</elemName>
<elemType>TEXT</elemType>
</headerElement>
</resultHeader>
<Resultvalue xml:space="preserve">
PatientIDs=[1,2,4,7,11,19,22]</resultValue>
</resultElement>
</queryResultSet>
</query>
Instead of using the
keywordQuery
parameter, you
can create your own
XMLQuery
document and pass it in
as the
query
parameter instead. The query document
would look like this:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE query PUBLIC "-//JPL//DTD OODT Query 1.0//EN"
"http://pancreas:80/dtd/query.dtd">
<query>
<queryAttributes>
<queryId>expr1</queryId>
<queryTitle>Command-line Expression Query</queryTitle>
<queryDesc>
The expression for this query came from the command-line.
</queryDesc>
<queryType>QUERY</queryType>
<queryStatusId>ACTIVE</queryStatusId>
<querySecurityType>UNKNOWN</querySecurityType>
<queryRevisionNote>
1999-12-12 JSH V1.0 Under Development
</queryRevisionNote>
<queryDataDictId>UNKNOWN</queryDataDictId>
</queryAttributes>
<queryResultModeId>ATTRIBUTE</queryResultModeId>
<queryPropogationType>BROADCAST</queryPropogationType>
<queryPropogationLevels>N/A</queryPropogationLevels>
<queryMimeAccept>*/*</queryMimeAccept>
<queryMaxResults>100</queryMaxResults>
<queryResults>0</queryResults>
<queryKWQString>SeverityLevel = 3</queryKWQString>
<querySelectSet/>
<queryFromSet/>
<queryWhereSet>
<queryElement>
<tokenRole>elemName</tokenRole>
<tokenValue>SeverityLevel</tokenValue>
</queryElement>
<queryElement>
<tokenRole>LITERAL</tokenRole>
<tokenValue>3</tokenValue>
</queryElement>
<queryElement>
<tokenRole>RELOP</tokenRole>
<tokenValue>EQ</tokenValue>
</queryElement>
</queryWhereSet>
<queryResultSet/>
</query>
Passing such a long string as a URL parameter in a
GET
request can be tricky, though. For such long
parameters, it's better to use a
POST
request
instead. See your HTTP API documentation for details on
formulating
POST
requests.