<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.opendap.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=PatrickWest</id>
	<title>OPeNDAP Documentation - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.opendap.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=PatrickWest"/>
	<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php/Special:Contributions/PatrickWest"/>
	<updated>2026-04-16T09:11:43Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://docs.opendap.org/index.php?title=BES_-_Modules&amp;diff=9939</id>
		<title>BES - Modules</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=BES_-_Modules&amp;diff=9939"/>
		<updated>2013-09-23T22:38:44Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following is a list of modules that can be dynamically loaded into the BES.&lt;br /&gt;
* default BES module&lt;br /&gt;
* dap and dapcmd modules&lt;br /&gt;
* netcdf data handler&lt;br /&gt;
* [[BES_-_Modules_-_The_HDF4_Handler|hdf4 data handler]]&lt;br /&gt;
* hdf5 data handler&lt;br /&gt;
* CSV Handler &#039;&#039;Update this and then edit www.opendap.org/download/csv_handler.html&#039;&#039;&lt;br /&gt;
* [[BES - Modules - Gateway Module|gateway handler]] (Provides interoperability between Hyrax and other web services)&lt;br /&gt;
* [[The_FreeForm_Data_Handler|freeform data handler]]&lt;br /&gt;
* [[BES - Modules - FileOut Netcdf|file out netcdf]]&lt;br /&gt;
* [[BES - Modules - NcML Module|NcML data handler]]&lt;br /&gt;
&lt;br /&gt;
[[Category:BES Modules|BES Modules]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9592</id>
		<title>Google Summer of Code 2013 Ideas</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9592"/>
		<updated>2013-03-27T18:56:08Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image :GSoC2013 300x200.png]]&lt;br /&gt;
&lt;br /&gt;
OPeNDAP would like to welcome all the [http://www.google-melange.com/gsoc/homepage/google/gsoc2013 Summer of Code] (SoC) students for the 2013 iteration of the SoC program! On this page you&#039;ll find information about project ideas we have along with information to help you apply to work on our software. The projects range from web site implementation to complex problems in data systems. Several of the projects listed are focused on adding new features to our data server. However, we also have a set of client tools and GUI-based applications that would provide an ample basis for summer projects. If you don&#039;t see anything below in the [[#Ideas]] section don&#039;t let that stop you from starting a conversation with one of the mentors listed below ([[#Mentors]]) because you may have an idea, talent or skill that is the spark of a great project. Don&#039;t hesitate to email us! &lt;br /&gt;
&lt;br /&gt;
We would like to stress that while the ideas included here can be the basis of your project, you can also propose something completely different - maybe you&#039;ve used our software and wish it included a particular feature.&lt;br /&gt;
&lt;br /&gt;
Before submitting an application to GSoC with OPeNDAP as your mentoring organization, make sure you read our [[Google Summer of Code FAQ|GSoC FAQ]] as well as the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2013/help_page Google] FAQ, both of which provide some pointers on how to write a successful application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Once you are ready to submit an application, remember that you must do so &#039;&#039;&#039;before April 8th&#039;&#039;&#039; through the [http://socghop.appspot.com/ GSoC webapp]. A more complete [http://www.google-melange.com/document/show/gsoc_program/google/gsoc2012/faqs#timeline timeline] is available for the whole project period. From the GSoC FAQ: You may also want to look over [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-examples/ Proposal Example 1] and [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-example-2/ Proposal Example 2] in the [http://www.booki.cc/gsocstudentguide/ Google Summer of Code student manual] to see some examples.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Ideas =&lt;br /&gt;
* [[Development of improved Hyrax User Interfaces]]: Browsers, JavaScript&lt;br /&gt;
* [[KML responses for Hyrax]]: C++&lt;br /&gt;
* [[Packaging and Installation]]: Linux, RPM, yum, aptitude, scripting&lt;br /&gt;
* [[Python and PHP clients to BES]]: Python and PHP&lt;br /&gt;
&lt;br /&gt;
= Mentors =&lt;br /&gt;
&lt;br /&gt;
* Patrick West (westp at rpi.edu): The Hyrax data server, C, C++, Java, Apache Modules, Semantic Web, OWL (Web Ontology Language), RDBMS, Java&lt;br /&gt;
&lt;br /&gt;
= Proposal template =&lt;br /&gt;
&lt;br /&gt;
Each proposal should be a text document that should contain the following sections:&lt;br /&gt;
;Synopsis: A one-paragraph description of the proposal&lt;br /&gt;
;Project Description: A complete description of what you will do including a logical breakdown of the project into smaller parts and how the project will be completed on time&lt;br /&gt;
;Profit for OPeNDAP Users: How will users of OPeNDAP&#039;s open source software benefit from this project?&lt;br /&gt;
;Success Criteria: What&#039;s the target you are trying to reach with this project so that success can easily be measured&lt;br /&gt;
;Roadmap: Describe the different development phases you expect to go through. For example: &lt;br /&gt;
# Add a description of my project to the OPeNDAP developer&#039;s wiki&lt;br /&gt;
# Solicit community feedback&lt;br /&gt;
# Develop base-level features&lt;br /&gt;
# Testing and alpha release&lt;br /&gt;
# Develop additional features &lt;br /&gt;
# ...&lt;br /&gt;
;Biography: Tell us about yourself, why you want to do this and how to contact you&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Proposals without contact information &#039;&#039;will not be accepted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9591</id>
		<title>Google Summer of Code 2013 Ideas</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9591"/>
		<updated>2013-03-27T18:53:23Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image :GSoC2013 300x200.png]]&lt;br /&gt;
&lt;br /&gt;
OPeNDAP would like to welcome all the [http://www.google-melange.com/gsoc/homepage/google/gsoc2013 Summer of Code] (SoC) students for the 2013 iteration of the SoC program! On this page you&#039;ll find information about project ideas we have along with information to help you apply to work on our software. The projects range from web site implementation to complex problems in data systems. Several of the projects listed are focused on adding new features to our data server. However, we also have a set of client tools and GUI-based applications that would provide an ample basis for summer projects. If you don&#039;t see anything below in the [[#Ideas]] section don&#039;t let that stop you from starting a conversation with one of the mentors listed below ([[#Mentors]]) because you may have an idea, talent or skill that is the spark of a great project. Don&#039;t hesitate to email us! &lt;br /&gt;
&lt;br /&gt;
We would like to stress that while the ideas included here can be the basis of your project, you can also propose something completely different - maybe you&#039;ve used our software and wish it included a particular feature.&lt;br /&gt;
&lt;br /&gt;
Before submitting an application to GSoC with OPeNDAP as your mentoring organization, make sure you read our [[Google Summer of Code FAQ|GSoC FAQ]] as well as the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2013/help_page Google] FAQ, both of which provide some pointers on how to write a successful application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Once you are ready to submit an application, remember that you must do so &#039;&#039;&#039;before April 8th&#039;&#039;&#039; through the [http://socghop.appspot.com/ GSoC webapp]. A more complete [http://www.google-melange.com/document/show/gsoc_program/google/gsoc2012/faqs#timeline timeline] is available for the whole project period. From the GSoC FAQ: You may also want to look over [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-examples/ Proposal Example 1] and [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-example-2/ Proposal Example 2] in the [http://www.booki.cc/gsocstudentguide/ Google Summer of Code student manual] to see some examples.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Ideas =&lt;br /&gt;
* [[Development of improved Hyrax User Interfaces]]: Browsers, JavaScript&lt;br /&gt;
* [[Extending support for Matlab]]: C; Matlab a plus&lt;br /&gt;
* [[KML responses for Hyrax]]: C++&lt;br /&gt;
* [[Packaging and Installation]]: Linux, RPM, yum, aptitude, scripting&lt;br /&gt;
* [[Python and PHP clients to BES]]: Python and PHP&lt;br /&gt;
&lt;br /&gt;
= Mentors =&lt;br /&gt;
&lt;br /&gt;
* Patrick West (westp at rpi.edu): The Hyrax data server, C, C++, Java, Apache Modules, Semantic Web, OWL (Web Ontology Language), RDBMS, Java&lt;br /&gt;
&lt;br /&gt;
= Proposal template =&lt;br /&gt;
&lt;br /&gt;
Each proposal should be a text document that should contain the following sections:&lt;br /&gt;
;Synopsis: A one-paragraph description of the proposal&lt;br /&gt;
;Project Description: A complete description of what you will do including a logical breakdown of the project into smaller parts and how the project will be completed on time&lt;br /&gt;
;Profit for OPeNDAP Users: How will users of OPeNDAP&#039;s open source software benefit from this project?&lt;br /&gt;
;Success Criteria: What&#039;s the target you are trying to reach with this project so that success can easily be measured&lt;br /&gt;
;Roadmap: Describe the different development phases you expect to go through. For example: &lt;br /&gt;
# Add a description of my project to the OPeNDAP developer&#039;s wiki&lt;br /&gt;
# Solicit community feedback&lt;br /&gt;
# Develop base-level features&lt;br /&gt;
# Testing and alpha release&lt;br /&gt;
# Develop additional features &lt;br /&gt;
# ...&lt;br /&gt;
;Biography: Tell us about yourself, why you want to do this and how to contact you&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Proposals without contact information &#039;&#039;will not be accepted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9590</id>
		<title>Google Summer of Code 2013 Ideas</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9590"/>
		<updated>2013-03-27T10:01:30Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image :GSoC2013 300x200.png]]&lt;br /&gt;
&lt;br /&gt;
OPeNDAP would like to welcome all the [http://www.google-melange.com/gsoc/homepage/google/gsoc2013 Summer of Code] (SoC) students for the 2013 iteration of the SoC program! On this page you&#039;ll find information about project ideas we have along with information to help you apply to work on our software. The projects range from web site implementation to complex problems in data systems. Several of the projects listed are focused on adding new features to our data server. However, we also have a set of client tools and GUI-based applications that would provide an ample basis for summer projects. If you don&#039;t see anything below in the [[#Ideas]] section don&#039;t let that stop you from starting a conversation with one of the mentors listed below ([[#Mentors]]) because you may have an idea, talent or skill that is the spark of a great project. Don&#039;t hesitate to email us! &lt;br /&gt;
&lt;br /&gt;
We would like to stress that while the ideas included here can be the basis of your project, you can also propose something completely different - maybe you&#039;ve used our software and wish it included a particular feature.&lt;br /&gt;
&lt;br /&gt;
Before submitting an application to GSoC with OPeNDAP as your mentoring organization, make sure you read our [[Google Summer of Code FAQ|GSoC FAQ]] as well as the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2013/help_page Google] FAQ, both of which provide some pointers on how to write a successful application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Once you are ready to submit an application, remember that you must do so &#039;&#039;&#039;before April 8th&#039;&#039;&#039; through the [http://socghop.appspot.com/ GSoC webapp]. A more complete [http://www.google-melange.com/document/show/gsoc_program/google/gsoc2012/faqs#timeline timeline] is available for the whole project period. From the GSoC FAQ: You may also want to look over [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-examples/ Proposal Example 1] and [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-example-2/ Proposal Example 2] in the [http://www.booki.cc/gsocstudentguide/ Google Summer of Code student manual] to see some examples.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Ideas =&lt;br /&gt;
* [[Development of improved Hyrax User Interfaces]]: Browsers, JavaScript&lt;br /&gt;
* [[Extending support for Matlab]]: C; Matlab a plus&lt;br /&gt;
* [[KML responses for Hyrax]]: C++&lt;br /&gt;
* [[GeoTIFF responses for Hyrax]]: C++&lt;br /&gt;
* [[Packaging and Installation]]: Linux, RPM, yum, aptitude, scripting&lt;br /&gt;
* [[Python and PHP clients to BES]]: Python and PHP&lt;br /&gt;
&lt;br /&gt;
= Mentors =&lt;br /&gt;
&lt;br /&gt;
* Patrick West (westp at rpi.edu): The Hyrax data server, C, C++, Java, Apache Modules, Semantic Web, OWL (Web Ontology Language), RDBMS, Java&lt;br /&gt;
&lt;br /&gt;
= Proposal template =&lt;br /&gt;
&lt;br /&gt;
Each proposal should be a text document that should contain the following sections:&lt;br /&gt;
;Synopsis: A one-paragraph description of the proposal&lt;br /&gt;
;Project Description: A complete description of what you will do including a logical breakdown of the project into smaller parts and how the project will be completed on time&lt;br /&gt;
;Profit for OPeNDAP Users: How will users of OPeNDAP&#039;s open source software benefit from this project?&lt;br /&gt;
;Success Criteria: What&#039;s the target you are trying to reach with this project so that success can easily be measured&lt;br /&gt;
;Roadmap: Describe the different development phases you expect to go through. For example: &lt;br /&gt;
# Add a description of my project to the OPeNDAP developer&#039;s wiki&lt;br /&gt;
# Solicit community feedback&lt;br /&gt;
# Develop base-level features&lt;br /&gt;
# Testing and alpha release&lt;br /&gt;
# Develop additional features &lt;br /&gt;
# ...&lt;br /&gt;
;Biography: Tell us about yourself, why you want to do this and how to contact you&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Proposals without contact information &#039;&#039;will not be accepted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9589</id>
		<title>Google Summer of Code 2013 Ideas</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9589"/>
		<updated>2013-03-27T09:59:27Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image :GSoC2013 300x200.png]]&lt;br /&gt;
&lt;br /&gt;
OPeNDAP would like to welcome all the [http://www.google-melange.com/gsoc/homepage/google/gsoc2013 Summer of Code] (SoC) students for the 2013 iteration of the SoC program! On this page you&#039;ll find information about project ideas we have along with information to help you apply to work on our software. The projects range from web site implementation to complex problems in data systems. Several of the projects listed are focused on adding new features to our data server. However, we also have a set of client tools and GUI-based applications that would provide an ample basis for summer projects. If you don&#039;t see anything below in the [[#Ideas]] section don&#039;t let that stop you from starting a conversation with one of the mentors listed below ([[#Mentors]]) because you may have an idea, talent or skill that is the spark of a great project. Don&#039;t hesitate to email us! &lt;br /&gt;
&lt;br /&gt;
We would like to stress that while the ideas included here can be the basis of your project, you can also propose something completely different - maybe you&#039;ve used our software and wish it included a particular feature.&lt;br /&gt;
&lt;br /&gt;
Before submitting an application to GSoC with OPeNDAP as your mentoring organization, make sure you read our [[Google Summer of Code FAQ|GSoC FAQ]] as well as the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2013/help_page Google] FAQ, both of which provide some pointers on how to write a successful application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Once you are ready to submit an application, remember that you must do so &#039;&#039;&#039;before April 8th&#039;&#039;&#039; through the [http://socghop.appspot.com/ GSoC webapp]. A more complete [http://www.google-melange.com/document/show/gsoc_program/google/gsoc2012/faqs#timeline timeline] is available for the whole project period. From the GSoC FAQ: You may also want to look over [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-examples/ Proposal Example 1] and [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-example-2/ Proposal Example 2] in the [http://www.booki.cc/gsocstudentguide/ Google Summer of Code student manual] to see some examples.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Ideas =&lt;br /&gt;
* [[Development of improved Hyrax User Interfaces]]: Browsers, JavaScript&lt;br /&gt;
* [[Extending support for Matlab]]: C; Matlab a plus&lt;br /&gt;
* [[KML responses for Hyrax]]: C++&lt;br /&gt;
* [[GeoTIFF responses for Hyrax]]: C++&lt;br /&gt;
&lt;br /&gt;
= Mentors =&lt;br /&gt;
&lt;br /&gt;
* Patrick West (westp at rpi.edu): The Hyrax data server, C, C++, Java, Apache Modules, Semantic Web, OWL (Web Ontology Language), RDBMS, Java&lt;br /&gt;
&lt;br /&gt;
= Proposal template =&lt;br /&gt;
&lt;br /&gt;
Each proposal should be a text document that should contain the following sections:&lt;br /&gt;
;Synopsis: A one-paragraph description of the proposal&lt;br /&gt;
;Project Description: A complete description of what you will do including a logical breakdown of the project into smaller parts and how the project will be completed on time&lt;br /&gt;
;Profit for OPeNDAP Users: How will users of OPeNDAP&#039;s open source software benefit from this project?&lt;br /&gt;
;Success Criteria: What&#039;s the target you are trying to reach with this project so that success can easily be measured&lt;br /&gt;
;Roadmap: Describe the different development phases you expect to go through. For example: &lt;br /&gt;
# Add a description of my project to the OPeNDAP developer&#039;s wiki&lt;br /&gt;
# Solicit community feedback&lt;br /&gt;
# Develop base-level features&lt;br /&gt;
# Testing and alpha release&lt;br /&gt;
# Develop additional features &lt;br /&gt;
# ...&lt;br /&gt;
;Biography: Tell us about yourself, why you want to do this and how to contact you&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Proposals without contact information &#039;&#039;will not be accepted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9588</id>
		<title>Google Summer of Code 2013 Ideas</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9588"/>
		<updated>2013-03-27T09:59:03Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image :GSoC2013 300x200.png]]&lt;br /&gt;
&lt;br /&gt;
OPeNDAP would like to welcome all the [http://www.google-melange.com/gsoc/homepage/google/gsoc2013 Summer of Code] (SoC) students for the 2013 iteration of the SoC program! On this page you&#039;ll find information about project ideas we have along with information to help you apply to work on our software. The projects range from web site implementation to complex problems in data systems. Several of the projects listed are focused on adding new features to our data server. However, we also have a set of client tools and GUI-based applications that would provide an ample basis for summer projects. If you don&#039;t see anything below in the [[#Ideas]] section don&#039;t let that stop you from starting a conversation with one of the mentors listed below ([[#Mentors]]) because you may have an idea, talent or skill that is the spark of a great project. Don&#039;t hesitate to email us! &lt;br /&gt;
&lt;br /&gt;
We would like to stress that while the ideas included here can be the basis of your project, you can also propose something completely different - maybe you&#039;ve used our software and wish it included a particular feature.&lt;br /&gt;
&lt;br /&gt;
Before submitting an application to GSoC with OPeNDAP as your mentoring organization, make sure you read our [[Google Summer of Code FAQ|GSoC FAQ]] as well as the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2013/help_page Google] FAQ, both of which provide some pointers on how to write a successful application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Once you are ready to submit an application, remember that you must do so &#039;&#039;&#039;before April 8th&#039;&#039;&#039; through the [http://socghop.appspot.com/ GSoC webapp]. A more complete [http://www.google-melange.com/document/show/gsoc_program/google/gsoc2012/faqs#timeline timeline] is available for the whole project period. From the GSoC FAQ: You may also want to look over [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-examples/ Proposal Example 1] and [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-example-2/ Proposal Example 2] in the [http://www.booki.cc/gsocstudentguide/ Google Summer of Code student manual] to see some examples.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Ideas =&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[Development of improved Hyrax User Interfaces]]: Browsers, JavaScript&lt;br /&gt;
* [[Extending support for Matlab]]: C; Matlab a plus&lt;br /&gt;
* [[KML responses for Hyrax]]: C++&lt;br /&gt;
* [[GeoTIFF responses for Hyrax]]: C++&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mentors =&lt;br /&gt;
&lt;br /&gt;
* Patrick West (westp at rpi.edu): The Hyrax data server, C, C++, Java, Apache Modules, Semantic Web, OWL (Web Ontology Language), RDBMS, Java&lt;br /&gt;
&lt;br /&gt;
= Proposal template =&lt;br /&gt;
&lt;br /&gt;
Each proposal should be a text document that should contain the following sections:&lt;br /&gt;
;Synopsis: A one-paragraph description of the proposal&lt;br /&gt;
;Project Description: A complete description of what you will do including a logical breakdown of the project into smaller parts and how the project will be completed on time&lt;br /&gt;
;Profit for OPeNDAP Users: How will users of OPeNDAP&#039;s open source software benefit from this project?&lt;br /&gt;
;Success Criteria: What&#039;s the target you are trying to reach with this project so that success can easily be measured&lt;br /&gt;
;Roadmap: Describe the different development phases you expect to go through. For example: &lt;br /&gt;
# Add a description of my project to the OPeNDAP developer&#039;s wiki&lt;br /&gt;
# Solicit community feedback&lt;br /&gt;
# Develop base-level features&lt;br /&gt;
# Testing and alpha release&lt;br /&gt;
# Develop additional features &lt;br /&gt;
# ...&lt;br /&gt;
;Biography: Tell us about yourself, why you want to do this and how to contact you&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Proposals without contact information &#039;&#039;will not be accepted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9587</id>
		<title>Google Summer of Code 2013 Ideas</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9587"/>
		<updated>2013-03-27T09:58:55Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image :GSoC2013 300x200.png]]&lt;br /&gt;
OPeNDAP would like to welcome all the [http://www.google-melange.com/gsoc/homepage/google/gsoc2013 Summer of Code] (SoC) students for the 2013 iteration of the SoC program! On this page you&#039;ll find information about project ideas we have along with information to help you apply to work on our software. The projects range from web site implementation to complex problems in data systems. Several of the projects listed are focused on adding new features to our data server. However, we also have a set of client tools and GUI-based applications that would provide an ample basis for summer projects. If you don&#039;t see anything below in the [[#Ideas]] section don&#039;t let that stop you from starting a conversation with one of the mentors listed below ([[#Mentors]]) because you may have an idea, talent or skill that is the spark of a great project. Don&#039;t hesitate to email us! &lt;br /&gt;
&lt;br /&gt;
We would like to stress that while the ideas included here can be the basis of your project, you can also propose something completely different - maybe you&#039;ve used our software and wish it included a particular feature.&lt;br /&gt;
&lt;br /&gt;
Before submitting an application to GSoC with OPeNDAP as your mentoring organization, make sure you read our [[Google Summer of Code FAQ|GSoC FAQ]] as well as the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2013/help_page Google] FAQ, both of which provide some pointers on how to write a successful application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Once you are ready to submit an application, remember that you must do so &#039;&#039;&#039;before April 8th&#039;&#039;&#039; through the [http://socghop.appspot.com/ GSoC webapp]. A more complete [http://www.google-melange.com/document/show/gsoc_program/google/gsoc2012/faqs#timeline timeline] is available for the whole project period. From the GSoC FAQ: You may also want to look over [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-examples/ Proposal Example 1] and [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-example-2/ Proposal Example 2] in the [http://www.booki.cc/gsocstudentguide/ Google Summer of Code student manual] to see some examples.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Ideas =&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[Development of improved Hyrax User Interfaces]]: Browsers, JavaScript&lt;br /&gt;
* [[Extending support for Matlab]]: C; Matlab a plus&lt;br /&gt;
* [[KML responses for Hyrax]]: C++&lt;br /&gt;
* [[GeoTIFF responses for Hyrax]]: C++&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mentors =&lt;br /&gt;
&lt;br /&gt;
* Patrick West (westp at rpi.edu): The Hyrax data server, C, C++, Java, Apache Modules, Semantic Web, OWL (Web Ontology Language), RDBMS, Java&lt;br /&gt;
&lt;br /&gt;
= Proposal template =&lt;br /&gt;
&lt;br /&gt;
Each proposal should be a text document that should contain the following sections:&lt;br /&gt;
;Synopsis: A one-paragraph description of the proposal&lt;br /&gt;
;Project Description: A complete description of what you will do including a logical breakdown of the project into smaller parts and how the project will be completed on time&lt;br /&gt;
;Profit for OPeNDAP Users: How will users of OPeNDAP&#039;s open source software benefit from this project?&lt;br /&gt;
;Success Criteria: What&#039;s the target you are trying to reach with this project so that success can easily be measured&lt;br /&gt;
;Roadmap: Describe the different development phases you expect to go through. For example: &lt;br /&gt;
# Add a description of my project to the OPeNDAP developer&#039;s wiki&lt;br /&gt;
# Solicit community feedback&lt;br /&gt;
# Develop base-level features&lt;br /&gt;
# Testing and alpha release&lt;br /&gt;
# Develop additional features &lt;br /&gt;
# ...&lt;br /&gt;
;Biography: Tell us about yourself, why you want to do this and how to contact you&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Proposals without contact information &#039;&#039;will not be accepted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=File:GSoC2013_300x200.png&amp;diff=9586</id>
		<title>File:GSoC2013 300x200.png</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=File:GSoC2013_300x200.png&amp;diff=9586"/>
		<updated>2013-03-27T09:58:28Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9585</id>
		<title>Google Summer of Code 2013 Ideas</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9585"/>
		<updated>2013-03-27T09:54:43Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image :GSoC2013 300x200.png|right]]&lt;br /&gt;
OPeNDAP would like to welcome all the [http://www.google-melange.com/gsoc/homepage/google/gsoc2013 Summer of Code] (SoC) students for the 2013 iteration of the SoC program! On this page you&#039;ll find information about project ideas we have along with information to help you apply to work on our software. The projects range from web site implementation to complex problems in data systems. Several of the projects listed are focused on adding new features to our data server. However, we also have a set of client tools and GUI-based applications that would provide an ample basis for summer projects. If you don&#039;t see anything below in the [[#Ideas]] section don&#039;t let that stop you from starting a conversation with one of the mentors listed below ([[#Mentors]]) because you may have an idea, talent or skill that is the spark of a great project. Don&#039;t hesitate to email us! &lt;br /&gt;
&lt;br /&gt;
We would like to stress that while the ideas included here can be the basis of your project, you can also propose something completely different - maybe you&#039;ve used our software and wish it included a particular feature.&lt;br /&gt;
&lt;br /&gt;
Before submitting an application to GSoC with OPeNDAP as your mentoring organization, make sure you read our [[Google Summer of Code FAQ|GSoC FAQ]] as well as the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2013/help_page Google] FAQ, both of which provide some pointers on how to write a successful application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Once you are ready to submit an application, remember that you must do so &#039;&#039;&#039;before April 8th&#039;&#039;&#039; through the [http://socghop.appspot.com/ GSoC webapp]. A more complete [http://www.google-melange.com/document/show/gsoc_program/google/gsoc2012/faqs#timeline timeline] is available for the whole project period. From the GSoC FAQ: You may also want to look over [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-examples/ Proposal Example 1] and [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-example-2/ Proposal Example 2] in the [http://www.booki.cc/gsocstudentguide/ Google Summer of Code student manual] to see some examples.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Ideas =&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[Development of improved Hyrax User Interfaces]]: Browsers, JavaScript&lt;br /&gt;
* [[Extending support for Matlab]]: C; Matlab a plus&lt;br /&gt;
* [[KML responses for Hyrax]]: C++&lt;br /&gt;
* [[GeoTIFF responses for Hyrax]]: C++&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mentors =&lt;br /&gt;
&lt;br /&gt;
* Patrick West (westp at rpi.edu): The Hyrax data server, C, C++, Java, Apache Modules, Semantic Web, OWL (Web Ontology Language), RDBMS, Java&lt;br /&gt;
&lt;br /&gt;
= Proposal template =&lt;br /&gt;
&lt;br /&gt;
Each proposal should be a text document that should contain the following sections:&lt;br /&gt;
;Synopsis: A one-paragraph description of the proposal&lt;br /&gt;
;Project Description: A complete description of what you will do including a logical breakdown of the project into smaller parts and how the project will be completed on time&lt;br /&gt;
;Profit for OPeNDAP Users: How will users of OPeNDAP&#039;s open source software benefit from this project?&lt;br /&gt;
;Success Criteria: What&#039;s the target you are trying to reach with this project so that success can easily be measured&lt;br /&gt;
;Roadmap: Describe the different development phases you expect to go through. For example: &lt;br /&gt;
# Add a description of my project to the OPeNDAP developer&#039;s wiki&lt;br /&gt;
# Solicit community feedback&lt;br /&gt;
# Develop base-level features&lt;br /&gt;
# Testing and alpha release&lt;br /&gt;
# Develop additional features &lt;br /&gt;
# ...&lt;br /&gt;
;Biography: Tell us about yourself, why you want to do this and how to contact you&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Proposals without contact information &#039;&#039;will not be accepted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9584</id>
		<title>Google Summer of Code 2013 Ideas</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Google_Summer_of_Code_2013_Ideas&amp;diff=9584"/>
		<updated>2013-03-27T09:53:07Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: Created page with &amp;quot;right OPeNDAP would like to welcome all the [http://www.google-melange.com/gsoc/homepage/google/gsoc2013 Summer of Code] (SoC) students for the 20...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image :GSoC2012 300x200.png|right]]&lt;br /&gt;
OPeNDAP would like to welcome all the [http://www.google-melange.com/gsoc/homepage/google/gsoc2013 Summer of Code] (SoC) students for the 2013 iteration of the SoC program! On this page you&#039;ll find information about project ideas we have along with information to help you apply to work on our software. The projects range from web site implementation to complex problems in data systems. Several of the projects listed are focused on adding new features to our data server. However, we also have a set of client tools and GUI-based applications that would provide an ample basis for summer projects. If you don&#039;t see anything below in the [[#Ideas]] section don&#039;t let that stop you from starting a conversation with one of the mentors listed below ([[#Mentors]]) because you may have an idea, talent or skill that is the spark of a great project. Don&#039;t hesitate to email us! &lt;br /&gt;
&lt;br /&gt;
We would like to stress that while the ideas included here can be the basis of your project, you can also propose something completely different - maybe you&#039;ve used our software and wish it included a particular feature.&lt;br /&gt;
&lt;br /&gt;
Before submitting an application to GSoC with OPeNDAP as your mentoring organization, make sure you read our [[Google Summer of Code FAQ|GSoC FAQ]] as well as the [http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2013/help_page Google] FAQ, both of which provide some pointers on how to write a successful application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Once you are ready to submit an application, remember that you must do so &#039;&#039;&#039;before April 8th&#039;&#039;&#039; through the [http://socghop.appspot.com/ GSoC webapp]. A more complete [http://www.google-melange.com/document/show/gsoc_program/google/gsoc2012/faqs#timeline timeline] is available for the whole project period. From the GSoC FAQ: You may also want to look over [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-examples/ Proposal Example 1] and [http://www.booki.cc/gsocstudentguide/_v/1.0/proposal-example-2/ Proposal Example 2] in the [http://www.booki.cc/gsocstudentguide/ Google Summer of Code student manual] to see some examples.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Ideas =&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[Development of improved Hyrax User Interfaces]]: Browsers, JavaScript&lt;br /&gt;
* [[Extending support for Matlab]]: C; Matlab a plus&lt;br /&gt;
* [[KML responses for Hyrax]]: C++&lt;br /&gt;
* [[GeoTIFF responses for Hyrax]]: C++&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mentors =&lt;br /&gt;
&lt;br /&gt;
* Patrick West (westp at rpi.edu): The Hyrax data server, C, C++, Java, Apache Modules, Semantic Web, OWL (Web Ontology Language), RDBMS, Java&lt;br /&gt;
&lt;br /&gt;
= Proposal template =&lt;br /&gt;
&lt;br /&gt;
Each proposal should be a text document that should contain the following sections:&lt;br /&gt;
;Synopsis: A one-paragraph description of the proposal&lt;br /&gt;
;Project Description: A complete description of what you will do including a logical breakdown of the project into smaller parts and how the project will be completed on time&lt;br /&gt;
;Profit for OPeNDAP Users: How will users of OPeNDAP&#039;s open source software benefit from this project?&lt;br /&gt;
;Success Criteria: What&#039;s the target you are trying to reach with this project so that success can easily be measured&lt;br /&gt;
;Roadmap: Describe the different development phases you expect to go through. For example: &lt;br /&gt;
# Add a description of my project to the OPeNDAP developer&#039;s wiki&lt;br /&gt;
# Solicit community feedback&lt;br /&gt;
# Develop base-level features&lt;br /&gt;
# Testing and alpha release&lt;br /&gt;
# Develop additional features &lt;br /&gt;
# ...&lt;br /&gt;
;Biography: Tell us about yourself, why you want to do this and how to contact you&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Proposals without contact information &#039;&#039;will not be accepted&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=MediaWiki:Sidebar&amp;diff=9397</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=MediaWiki:Sidebar&amp;diff=9397"/>
		<updated>2012-09-17T18:06:26Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|Home&lt;br /&gt;
** Documentation|Documentation&lt;br /&gt;
** Developer Info|Developer Info&lt;br /&gt;
** Development|Projects&lt;br /&gt;
** OPULS Development|OPULS/DAP4&lt;br /&gt;
** Working_Groups|Working Groups&lt;br /&gt;
** Meetings|Meetings&lt;br /&gt;
** https://scm.opendap.org/svn/|Subversion&lt;br /&gt;
** https://scm.opendap.org/trac/|Trac&lt;br /&gt;
** Document Templates|Document Templates&lt;br /&gt;
** helppage|help&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=MediaWiki:Sidebar&amp;diff=9396</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=MediaWiki:Sidebar&amp;diff=9396"/>
		<updated>2012-09-17T18:05:52Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|Home&lt;br /&gt;
** Documentation|Documentation&lt;br /&gt;
** Developer Info|Developer Info&lt;br /&gt;
** Development|Projects&lt;br /&gt;
** OPULS Development|OPULS/DAP4&lt;br /&gt;
** Working_Groups|Working Groups&lt;br /&gt;
** Meetings|Meetings&lt;br /&gt;
** https://scm.opendap.org/svn/|Subversion&lt;br /&gt;
** [https://scm.opendap.org/trac/ Trac]&lt;br /&gt;
** Document Templates|Document Templates&lt;br /&gt;
** helppage|help&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=BES_XML_Commands&amp;diff=7603</id>
		<title>BES XML Commands</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=BES_XML_Commands&amp;diff=7603"/>
		<updated>2012-03-20T21:16:56Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development|BES XML Commands]][[Category:Hyrax Development|BES XML Commands]]&lt;br /&gt;
== BES XML Command syntax. ==&lt;br /&gt;
&lt;br /&gt;
The BES will accept commands encoded in XML documents (BES XML Commands), and provide responses in kind. Some requests specifically indicate a non XML response (such as a DAP2 binary response) in which case the response will be as requested. &lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
All elements mentioned in the following are in the http://xml.opendap.org/ns/bes/1.0# namespace unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
# Each request document &#039;&#039;&#039;must&#039;&#039;&#039; have a &amp;lt;request&amp;gt; root element.&lt;br /&gt;
# Each &amp;lt;request&amp;gt; &#039;&#039;&#039;must&#039;&#039;&#039; contain one or more BesCommand elements. &lt;br /&gt;
# A &amp;lt;request&amp;gt; &#039;&#039;&#039;may&#039;&#039;&#039; contain multiple BesCommands as long as zero more of those commands returns a response.&amp;lt;br&amp;gt;Examples (expand with abbreviated xml):&lt;br /&gt;
#*  we can do a set context, set container, define and a get das in the same request document as only the get das request command returns a response.&lt;br /&gt;
#*  There can not be two show commands within the request document, or a show and a get, or multiple gets. &lt;br /&gt;
#. Each request element &#039;&#039;&#039;must&#039;&#039;&#039; have an attribute &#039;&#039;reqID&#039;&#039; the value of which will be used in the response document. There is no guarantee that the value of &#039;&#039;reqID&#039;&#039; be unique within the operational domain of the BES. (It might be unique within the software of the requesting client, but that&#039;s of no concern to the BES).&lt;br /&gt;
&lt;br /&gt;
Question: Do we may want to allow reqID to be an optional attribute for each individual command. If present it would (&#039;&#039;can it?&#039;&#039;)  be preserved in the response (or error) object as appropriate.&lt;br /&gt;
&lt;br /&gt;
When we (eventually) develop a schema for this we can use it to &amp;quot;enforce&amp;quot; these restrictions.&lt;br /&gt;
&lt;br /&gt;
=== Responses ===&lt;br /&gt;
&lt;br /&gt;
Need a description and such here.&lt;br /&gt;
&lt;br /&gt;
== BES Error Response ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;BES&amp;gt;&lt;br /&gt;
     &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;BESError&amp;gt;&lt;br /&gt;
             &amp;lt;Type&amp;gt;3&amp;lt;/Type&amp;gt;&lt;br /&gt;
             &amp;lt;Message&amp;gt;Unable to find command for showVersions&amp;lt;/Message&amp;gt;&lt;br /&gt;
             &amp;lt;Administrator&amp;gt;ndp@opendap.org&amp;lt;/Administrator&amp;gt;&lt;br /&gt;
         &amp;lt;/BESError&amp;gt;&lt;br /&gt;
     &amp;lt;/response&amp;gt;&lt;br /&gt;
 &amp;lt;/BES&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where Type is one of the following:&lt;br /&gt;
* 1. Internal Error - the error is internal to the BES Server&lt;br /&gt;
* 2. Internal Fatal Error - error is fatal, can not continue&lt;br /&gt;
* 3. Syntax User Error - the requester has a syntax error in request or config&lt;br /&gt;
* 4. Forbidden Error - the requester is forbidden to see the resource&lt;br /&gt;
* 5. Not Found Error - the resource can not be found&lt;br /&gt;
&lt;br /&gt;
If debugging is enabled during build then the Error object will include the file name and line number where the exception was thrown.&lt;br /&gt;
&lt;br /&gt;
== BES Command Set ==&lt;br /&gt;
&lt;br /&gt;
=== setContext ===&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
 &amp;lt;setContext  name=&amp;quot;contextName&amp;gt;Value&amp;lt;/setContext&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes the state of the BES for the current client connection. This allows the client to ask the BES to utilize various response formats.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;name&#039;&#039; attribute====&lt;br /&gt;
Identifies which context value is being set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dap_format&#039;&#039;&#039; context&lt;br /&gt;
: Value:&lt;br /&gt;
:* &#039;&#039;Major.Minor&#039;&#039;  where both &#039;&#039;Major&#039;&#039; and &#039;&#039;Minor&#039;&#039; are integer values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;errors&#039;&#039;&#039; context&lt;br /&gt;
: Current Values:&lt;br /&gt;
:* &#039;&#039;xml&#039;&#039; -&lt;br /&gt;
:* &#039;&#039;dap2&#039;&#039; - When error context is set to &#039;&#039;dap2&#039;&#039; then all errors will returned as DAP2 error objects (definitely &#039;&#039;&#039;not&#039;&#039;&#039; XML).&lt;br /&gt;
&lt;br /&gt;
: Proposed Values:&lt;br /&gt;
:* &#039;&#039;dap&#039;&#039; - When error context is set to &#039;&#039;dap&#039;&#039; then all errors will returned as DAP error objects. The version of the DAP that error must conform to is controlled by the dap_format context. It is possible (likely) that in the future DAP errors will be XML documents.&lt;br /&gt;
:* &#039;&#039;bes&#039;&#039; - Returns a BES Error response XML Document:&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContext name=&amp;quot;errors&amp;quot;&amp;gt;dap2&amp;lt;/setContext&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a [[BES_XML_Commands#BES_Error_Response|BESError]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== setContainer ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContainer name=&amp;quot;c&amp;quot; space=&amp;quot;catalog&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/setContainer&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a [[BES_XML_Commands#BES_Error_Response|BESError]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== define ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;define name=&amp;quot;d&amp;quot; space=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;constraint&amp;gt;a valid default ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c2&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;aggregate handler=&amp;quot;someHandler&amp;quot; cmd=&amp;quot;someCommand&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;/define&amp;gt; &lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a [[BES_XML_Commands#BES_Error_Response|BESError]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This needs to be expanded to illuminate the missing details from the previoius command set:&#039;&#039;&#039;&lt;br /&gt;
* get &#039;type&#039;  for &#039;definition&#039; using &#039;URL&#039;;&lt;br /&gt;
&lt;br /&gt;
Type:&lt;br /&gt;
* &#039;&#039;&#039;dds&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;das&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;dods&#039;&#039;&#039; - &lt;br /&gt;
* &#039;&#039;&#039;stream&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;ascii&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;html_form&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;info_page&#039;&#039;&#039; -&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;get type=&amp;quot;data_product&amp;quot; definition=&amp;quot;def_name&amp;quot; returnAs=&amp;quot;name&amp;quot; url=&amp;quot;url&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Explain about DAP2 responses etc...&lt;br /&gt;
&lt;br /&gt;
===Multiple command example ===&lt;br /&gt;
Multiple command transaction resulting in a DDS (non XML DAP2) response:&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContext name=&amp;quot;error&amp;quot;&amp;gt;dap2&amp;lt;/setContext&amp;gt;&lt;br /&gt;
        &amp;lt;setContainer name=&amp;quot;c&amp;quot; space=&amp;quot;catalog&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/setContainer&amp;gt;&lt;br /&gt;
         &amp;lt;define name=&amp;quot;d&amp;quot; space=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;aggregate handler=&amp;quot;someHandler&amp;quot; cmd=&amp;quot;someCommand&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;/define&amp;gt; &lt;br /&gt;
         &amp;lt;get  type=&amp;quot;dds&amp;quot; definition=&amp;quot;d&amp;quot; returnAs=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Show version ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showVersion /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
&lt;br /&gt;
Current:&lt;br /&gt;
    &amp;lt;showVersion&amp;gt;&lt;br /&gt;
        &amp;lt;response&amp;gt;&lt;br /&gt;
            &amp;lt;DAP&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.2&amp;lt;/version&amp;gt;&lt;br /&gt;
            &amp;lt;/DAP&amp;gt;&lt;br /&gt;
            &amp;lt;BES&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;libdap&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;3.5.3&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;bes&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;3.1.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
            &amp;lt;/BES&amp;gt;&lt;br /&gt;
            &amp;lt;Handlers&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;libnc-dods&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;0.9&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
            &amp;lt;/Handlers&amp;gt;&lt;br /&gt;
         &amp;lt;/response&amp;gt;&lt;br /&gt;
    &amp;lt;/showVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proposed:&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showVersion&amp;gt;&lt;br /&gt;
            &amp;lt;service name=&amp;quot;dap&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.2&amp;lt;/version&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;library name=&amp;quot;bes&amp;quot;&amp;gt;3.5.3&amp;lt;/library&amp;gt;&lt;br /&gt;
            &amp;lt;library name=&amp;quot;libdap&amp;quot;&amp;gt;3.10.0&amp;lt;/library&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;netcdf_handler&amp;quot;&amp;gt;3.7.9&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;freeform_handler&amp;quot;&amp;gt;3.7.9&amp;lt;/module&amp;gt;&lt;br /&gt;
        &amp;lt;/showVersion&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Show help ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showHelp /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showHelp&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;bes&amp;quot; version=&amp;quot;3.6.2&amp;quot;&amp;gt;&amp;lt;html xmlns= http://www.w3.org/1999/xhtml &amp;gt;Help Information&amp;lt;/html&amp;gt;&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;dap&amp;quot; version=&amp;quot;3.10.1&amp;quot;&amp;gt;Help Information&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;netcdf_handler&amp;quot; version=&amp;quot;3.7.9&amp;quot;&amp;gt;Help Information including supported responses&amp;lt;/module&amp;gt;&lt;br /&gt;
        &amp;lt;/showHelp&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showProcess ===&lt;br /&gt;
&lt;br /&gt;
This is available only if the BES is compiled in developer mode. A &#039;production&#039; BES does not support this command. &lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showProcess /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showProcess&amp;gt;&lt;br /&gt;
            &amp;lt;process pid=&amp;quot;10831&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/showProcess&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showConfig ===&lt;br /&gt;
This is available only if the BES is compiled in developer mode. A &#039;production&#039; BES does not support this command.&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showConfig /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showConfig&amp;gt;&lt;br /&gt;
            &amp;lt;file&amp;gt;/Users/pwest/opendap/chunking/etc/bes/bes.conf&amp;lt;/file&amp;gt;&lt;br /&gt;
            &amp;lt;key name=&amp;quot;BES.CacheDir&amp;quot;&amp;gt;/tmp&amp;lt;/key&amp;gt;&lt;br /&gt;
            ....&lt;br /&gt;
        &amp;lt;/showConfig&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showStatus ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showStatus /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showStatus&amp;gt;&lt;br /&gt;
            &amp;lt;status&amp;gt;MST Thu Dec 18 11:51:36 2008&amp;lt;/status&amp;gt;&lt;br /&gt;
        &amp;lt;/showStatus&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showContainers ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showContainers /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showContainers&amp;gt;&lt;br /&gt;
            &amp;lt;store name=&amp;quot;volatile&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;container name=&amp;quot;c&amp;quot; type=&amp;quot;nc&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/container&amp;gt;&lt;br /&gt;
            &amp;lt;/store&amp;gt;&lt;br /&gt;
        &amp;lt;/showContainers&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== deleteContainer(s), deleteDefinition(s) ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;deleteContainers store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteContainer name=&amp;quot;containerName&amp;quot; store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteDefinitions store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteDefinition name=&amp;quot;defName&amp;quot; store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a [[BES_XML_Commands#BES_Error_Response|BESError]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showDefinitions ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showDefinitions /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showDefinitions&amp;gt;&lt;br /&gt;
            &amp;lt;store name=&amp;quot;volatile&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;definition name=&amp;quot;d&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;container name=&amp;quot;c&amp;quot; type=&amp;quot;nc&amp;quot; constraint=&amp;quot;&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/container&amp;gt;&lt;br /&gt;
                    &amp;lt;aggregation handler=&amp;quot;agg&amp;quot;&amp;gt;aggregation_command&amp;lt;/aggregation&amp;gt;&lt;br /&gt;
                &amp;lt;/definition&amp;gt;&lt;br /&gt;
            &amp;lt;/store&amp;gt;&lt;br /&gt;
        &amp;lt;/showDefinitions&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showContext ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showContext /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
   &amp;lt;response reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;showContext&amp;gt;&lt;br /&gt;
             &amp;lt;context name=&amp;quot;name1&amp;quot;&amp;gt;value1&amp;lt;/context&amp;gt;&lt;br /&gt;
             &amp;lt;context name=&amp;quot;name2&amp;quot;&amp;gt;value2&amp;lt;/context&amp;gt;&lt;br /&gt;
              ...&lt;br /&gt;
             &amp;lt;context name=&amp;quot;namen&amp;quot;&amp;gt;valuen&amp;lt;/context&amp;gt;&lt;br /&gt;
        &amp;lt;showContext&amp;gt;&lt;br /&gt;
   &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showCatalog ===&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showCatalog node=&amp;quot;[catalog:]nodeName&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The catalog name is optional, defaulting to the default catalog specified in the BES configuration file. So if you had a catalog named rdh you could specify node=&amp;quot;rdh:/&amp;quot; and it would give you the root node for the rdh catalog.&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
            &amp;lt;dataset name=&amp;quot;nc/test&amp;quot; size=&amp;quot;408&amp;quot; lastModified=&amp;quot;2006-01-04T19:48:24&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; count=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;test.nc&amp;quot; size=&amp;quot;12148&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;testfile.nc&amp;quot; size=&amp;quot;43392&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPat.nc&amp;quot; size=&amp;quot;262452&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:27&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPatDbl.nc&amp;quot; size=&amp;quot;2097464&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPatFlt.nc&amp;quot; size=&amp;quot;1048884&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:27&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showInfo ===&lt;br /&gt;
&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showInfo node=&amp;quot;nodeName /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Current Response =====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showInfo&amp;gt;&lt;br /&gt;
            &amp;lt;dataset thredds_container=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;nc/test&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;size&amp;gt;408&amp;lt;/size&amp;gt;&lt;br /&gt;
                &amp;lt;lastmodified&amp;gt;&lt;br /&gt;
                    &amp;lt;date&amp;gt;2006-01-04&amp;lt;/date&amp;gt;&lt;br /&gt;
                    &amp;lt;time&amp;gt;19:48:24&amp;lt;/time&amp;gt;&lt;br /&gt;
                &amp;lt;/lastmodified&amp;gt;&lt;br /&gt;
                &amp;lt;count&amp;gt;5&amp;lt;/count&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showInfo&amp;gt;&lt;br /&gt;
            &amp;lt;dataset thredds_container=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;nc/test/TestPatFlt.nc&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;size&amp;gt;1048884&amp;lt;/size&amp;gt;&lt;br /&gt;
                &amp;lt;lastmodified&amp;gt;&lt;br /&gt;
                    &amp;lt;date&amp;gt;2005-09-29&amp;lt;/date&amp;gt;&lt;br /&gt;
                    &amp;lt;time&amp;gt;16:31:27&amp;lt;/time&amp;gt;&lt;br /&gt;
                &amp;lt;/lastmodified&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Proposed Response =====&lt;br /&gt;
    &amp;lt;dataset name=&amp;quot;testfile.nc&amp;quot; size=&amp;quot;43392&amp;quot; lastModified=&amp;quot;YYYY-MM-DDThh:mm:ss&amp;quot; catalog=&amp;quot;catalog&amp;quot; &lt;br /&gt;
                     node=&amp;quot;true|false&amp;quot; count=&amp;quot;#ofChildDatSets&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
    &amp;lt;/dataset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== showServices ===&lt;br /&gt;
&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showServiceDescriptions /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showServices&amp;gt;&lt;br /&gt;
            &amp;lt;service name=&amp;quot;DAP&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;command name=&amp;quot;ddx&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;description&amp;gt;Words For Humans&amp;lt;/description&amp;gt;&lt;br /&gt;
                    &amp;lt;format name=&amp;quot;dap2&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/command&amp;gt;&lt;br /&gt;
                &amp;lt;command name=&amp;quot;dds&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;description&amp;gt;Words For Humans&amp;lt;/description&amp;gt;&lt;br /&gt;
                    &amp;lt;format name=&amp;quot;dap2&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/command&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/showServices&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=BES_XML_Commands&amp;diff=7601</id>
		<title>BES XML Commands</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=BES_XML_Commands&amp;diff=7601"/>
		<updated>2012-03-20T21:15:48Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development|BES XML Commands]][[Category:Hyrax Development|BES XML Commands]]&lt;br /&gt;
== BES XML Command syntax. ==&lt;br /&gt;
&lt;br /&gt;
The BES will accept commands encoded in XML documents (BES XML Commands), and provide responses in kind. Some requests specifically indicate a non XML response (such as a DAP2 binary response) in which case the response will be as requested. &lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
All elements mentioned in the following are in the http://xml.opendap.org/ns/bes/1.0# namespace unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
# Each request document &#039;&#039;&#039;must&#039;&#039;&#039; have a &amp;lt;request&amp;gt; root element.&lt;br /&gt;
# Each &amp;lt;request&amp;gt; &#039;&#039;&#039;must&#039;&#039;&#039; contain one or more BesCommand elements. &lt;br /&gt;
# A &amp;lt;request&amp;gt; &#039;&#039;&#039;may&#039;&#039;&#039; contain multiple BesCommands as long as zero more of those commands returns a response.&amp;lt;br&amp;gt;Examples (expand with abbreviated xml):&lt;br /&gt;
#*  we can do a set context, set container, define and a get das in the same request document as only the get das request command returns a response.&lt;br /&gt;
#*  There can not be two show commands within the request document, or a show and a get, or multiple gets. &lt;br /&gt;
#. Each request element &#039;&#039;&#039;must&#039;&#039;&#039; have an attribute &#039;&#039;reqID&#039;&#039; the value of which will be used in the response document. There is no guarantee that the value of &#039;&#039;reqID&#039;&#039; be unique within the operational domain of the BES. (It might be unique within the software of the requesting client, but that&#039;s of no concern to the BES).&lt;br /&gt;
&lt;br /&gt;
Question: Do we may want to allow reqID to be an optional attribute for each individual command. If present it would (&#039;&#039;can it?&#039;&#039;)  be preserved in the response (or error) object as appropriate.&lt;br /&gt;
&lt;br /&gt;
When we (eventually) develop a schema for this we can use it to &amp;quot;enforce&amp;quot; these restrictions.&lt;br /&gt;
&lt;br /&gt;
=== Responses ===&lt;br /&gt;
&lt;br /&gt;
Need a description and such here.&lt;br /&gt;
&lt;br /&gt;
== BES Error Response ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;BES&amp;gt;&lt;br /&gt;
     &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;BESError&amp;gt;&lt;br /&gt;
             &amp;lt;Type&amp;gt;3&amp;lt;/Type&amp;gt;&lt;br /&gt;
             &amp;lt;Message&amp;gt;Unable to find command for showVersions&amp;lt;/Message&amp;gt;&lt;br /&gt;
             &amp;lt;Administrator&amp;gt;ndp@opendap.org&amp;lt;/Administrator&amp;gt;&lt;br /&gt;
         &amp;lt;/BESError&amp;gt;&lt;br /&gt;
     &amp;lt;/response&amp;gt;&lt;br /&gt;
 &amp;lt;/BES&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where Type is one of the following:&lt;br /&gt;
* 1. Internal Error - the error is internal to the BES Server&lt;br /&gt;
* 2. Internal Fatal Error - error is fatal, can not continue&lt;br /&gt;
* 3. Syntax User Error - the requester has a syntax error in request or config&lt;br /&gt;
* 4. Forbidden Error - the requester is forbidden to see the resource&lt;br /&gt;
* 5. Not Found Error - the resource can not be found&lt;br /&gt;
&lt;br /&gt;
If debugging is enabled during build then the Error object will include the file name and line number where the exception was thrown.&lt;br /&gt;
&lt;br /&gt;
== BES Command Set ==&lt;br /&gt;
&lt;br /&gt;
=== setContext ===&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
 &amp;lt;setContext  name=&amp;quot;contextName&amp;gt;Value&amp;lt;/setContext&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes the state of the BES for the current client connection. This allows the client to ask the BES to utilize various response formats.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;name&#039;&#039; attribute====&lt;br /&gt;
Identifies which context value is being set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dap_format&#039;&#039;&#039; context&lt;br /&gt;
: Value:&lt;br /&gt;
:* &#039;&#039;Major.Minor&#039;&#039;  where both &#039;&#039;Major&#039;&#039; and &#039;&#039;Minor&#039;&#039; are integer values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;errors&#039;&#039;&#039; context&lt;br /&gt;
: Current Values:&lt;br /&gt;
:* &#039;&#039;xml&#039;&#039; -&lt;br /&gt;
:* &#039;&#039;dap2&#039;&#039; - When error context is set to &#039;&#039;dap2&#039;&#039; then all errors will returned as DAP2 error objects (definitely &#039;&#039;&#039;not&#039;&#039;&#039; XML).&lt;br /&gt;
&lt;br /&gt;
: Proposed Values:&lt;br /&gt;
:* &#039;&#039;dap&#039;&#039; - When error context is set to &#039;&#039;dap&#039;&#039; then all errors will returned as DAP error objects. The version of the DAP that error must conform to is controlled by the dap_format context. It is possible (likely) that in the future DAP errors will be XML documents.&lt;br /&gt;
:* &#039;&#039;bes&#039;&#039; - Returns a BES Error response XML Document:&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContext name=&amp;quot;errors&amp;quot;&amp;gt;dap2&amp;lt;/setContext&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a [[BES_XML_Commands#BES_Error_Response|BESError]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== setContainer ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContainer name=&amp;quot;c&amp;quot; space=&amp;quot;catalog&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/setContainer&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== define ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;define name=&amp;quot;d&amp;quot; space=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;constraint&amp;gt;a valid default ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c2&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;aggregate handler=&amp;quot;someHandler&amp;quot; cmd=&amp;quot;someCommand&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;/define&amp;gt; &lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This needs to be expanded to illuminate the missing details from the previoius command set:&#039;&#039;&#039;&lt;br /&gt;
* get &#039;type&#039;  for &#039;definition&#039; using &#039;URL&#039;;&lt;br /&gt;
&lt;br /&gt;
Type:&lt;br /&gt;
* &#039;&#039;&#039;dds&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;das&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;dods&#039;&#039;&#039; - &lt;br /&gt;
* &#039;&#039;&#039;stream&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;ascii&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;html_form&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;info_page&#039;&#039;&#039; -&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;get type=&amp;quot;data_product&amp;quot; definition=&amp;quot;def_name&amp;quot; returnAs=&amp;quot;name&amp;quot; url=&amp;quot;url&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Explain about DAP2 responses etc...&lt;br /&gt;
&lt;br /&gt;
===Multiple command example ===&lt;br /&gt;
Multiple command transaction resulting in a DDS (non XML DAP2) response:&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContext name=&amp;quot;error&amp;quot;&amp;gt;dap2&amp;lt;/setContext&amp;gt;&lt;br /&gt;
        &amp;lt;setContainer name=&amp;quot;c&amp;quot; space=&amp;quot;catalog&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/setContainer&amp;gt;&lt;br /&gt;
         &amp;lt;define name=&amp;quot;d&amp;quot; space=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;aggregate handler=&amp;quot;someHandler&amp;quot; cmd=&amp;quot;someCommand&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;/define&amp;gt; &lt;br /&gt;
         &amp;lt;get  type=&amp;quot;dds&amp;quot; definition=&amp;quot;d&amp;quot; returnAs=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Show version ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showVersion /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
&lt;br /&gt;
Current:&lt;br /&gt;
    &amp;lt;showVersion&amp;gt;&lt;br /&gt;
        &amp;lt;response&amp;gt;&lt;br /&gt;
            &amp;lt;DAP&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.2&amp;lt;/version&amp;gt;&lt;br /&gt;
            &amp;lt;/DAP&amp;gt;&lt;br /&gt;
            &amp;lt;BES&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;libdap&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;3.5.3&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;bes&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;3.1.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
            &amp;lt;/BES&amp;gt;&lt;br /&gt;
            &amp;lt;Handlers&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;libnc-dods&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;0.9&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
            &amp;lt;/Handlers&amp;gt;&lt;br /&gt;
         &amp;lt;/response&amp;gt;&lt;br /&gt;
    &amp;lt;/showVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proposed:&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showVersion&amp;gt;&lt;br /&gt;
            &amp;lt;service name=&amp;quot;dap&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.2&amp;lt;/version&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;library name=&amp;quot;bes&amp;quot;&amp;gt;3.5.3&amp;lt;/library&amp;gt;&lt;br /&gt;
            &amp;lt;library name=&amp;quot;libdap&amp;quot;&amp;gt;3.10.0&amp;lt;/library&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;netcdf_handler&amp;quot;&amp;gt;3.7.9&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;freeform_handler&amp;quot;&amp;gt;3.7.9&amp;lt;/module&amp;gt;&lt;br /&gt;
        &amp;lt;/showVersion&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Show help ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showHelp /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showHelp&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;bes&amp;quot; version=&amp;quot;3.6.2&amp;quot;&amp;gt;&amp;lt;html xmlns= http://www.w3.org/1999/xhtml &amp;gt;Help Information&amp;lt;/html&amp;gt;&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;dap&amp;quot; version=&amp;quot;3.10.1&amp;quot;&amp;gt;Help Information&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;netcdf_handler&amp;quot; version=&amp;quot;3.7.9&amp;quot;&amp;gt;Help Information including supported responses&amp;lt;/module&amp;gt;&lt;br /&gt;
        &amp;lt;/showHelp&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showProcess ===&lt;br /&gt;
&lt;br /&gt;
This is available only if the BES is compiled in developer mode. A &#039;production&#039; BES does not support this command. &lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showProcess /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showProcess&amp;gt;&lt;br /&gt;
            &amp;lt;process pid=&amp;quot;10831&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/showProcess&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showConfig ===&lt;br /&gt;
This is available only if the BES is compiled in developer mode. A &#039;production&#039; BES does not support this command.&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showConfig /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showConfig&amp;gt;&lt;br /&gt;
            &amp;lt;file&amp;gt;/Users/pwest/opendap/chunking/etc/bes/bes.conf&amp;lt;/file&amp;gt;&lt;br /&gt;
            &amp;lt;key name=&amp;quot;BES.CacheDir&amp;quot;&amp;gt;/tmp&amp;lt;/key&amp;gt;&lt;br /&gt;
            ....&lt;br /&gt;
        &amp;lt;/showConfig&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showStatus ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showStatus /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showStatus&amp;gt;&lt;br /&gt;
            &amp;lt;status&amp;gt;MST Thu Dec 18 11:51:36 2008&amp;lt;/status&amp;gt;&lt;br /&gt;
        &amp;lt;/showStatus&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showContainers ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showContainers /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showContainers&amp;gt;&lt;br /&gt;
            &amp;lt;store name=&amp;quot;volatile&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;container name=&amp;quot;c&amp;quot; type=&amp;quot;nc&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/container&amp;gt;&lt;br /&gt;
            &amp;lt;/store&amp;gt;&lt;br /&gt;
        &amp;lt;/showContainers&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== deleteContainer(s), deleteDefinition(s) ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;deleteContainers store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteContainer name=&amp;quot;containerName&amp;quot; store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteDefinitions store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteDefinition name=&amp;quot;defName&amp;quot; store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showDefinitions ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showDefinitions /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showDefinitions&amp;gt;&lt;br /&gt;
            &amp;lt;store name=&amp;quot;volatile&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;definition name=&amp;quot;d&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;container name=&amp;quot;c&amp;quot; type=&amp;quot;nc&amp;quot; constraint=&amp;quot;&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/container&amp;gt;&lt;br /&gt;
                    &amp;lt;aggregation handler=&amp;quot;agg&amp;quot;&amp;gt;aggregation_command&amp;lt;/aggregation&amp;gt;&lt;br /&gt;
                &amp;lt;/definition&amp;gt;&lt;br /&gt;
            &amp;lt;/store&amp;gt;&lt;br /&gt;
        &amp;lt;/showDefinitions&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showContext ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showContext /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
   &amp;lt;response reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;showContext&amp;gt;&lt;br /&gt;
             &amp;lt;context name=&amp;quot;name1&amp;quot;&amp;gt;value1&amp;lt;/context&amp;gt;&lt;br /&gt;
             &amp;lt;context name=&amp;quot;name2&amp;quot;&amp;gt;value2&amp;lt;/context&amp;gt;&lt;br /&gt;
              ...&lt;br /&gt;
             &amp;lt;context name=&amp;quot;namen&amp;quot;&amp;gt;valuen&amp;lt;/context&amp;gt;&lt;br /&gt;
        &amp;lt;showContext&amp;gt;&lt;br /&gt;
   &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showCatalog ===&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showCatalog node=&amp;quot;[catalog:]nodeName&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The catalog name is optional, defaulting to the default catalog specified in the BES configuration file. So if you had a catalog named rdh you could specify node=&amp;quot;rdh:/&amp;quot; and it would give you the root node for the rdh catalog.&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
            &amp;lt;dataset name=&amp;quot;nc/test&amp;quot; size=&amp;quot;408&amp;quot; lastModified=&amp;quot;2006-01-04T19:48:24&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; count=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;test.nc&amp;quot; size=&amp;quot;12148&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;testfile.nc&amp;quot; size=&amp;quot;43392&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPat.nc&amp;quot; size=&amp;quot;262452&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:27&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPatDbl.nc&amp;quot; size=&amp;quot;2097464&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPatFlt.nc&amp;quot; size=&amp;quot;1048884&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:27&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showInfo ===&lt;br /&gt;
&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showInfo node=&amp;quot;nodeName /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Current Response =====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showInfo&amp;gt;&lt;br /&gt;
            &amp;lt;dataset thredds_container=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;nc/test&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;size&amp;gt;408&amp;lt;/size&amp;gt;&lt;br /&gt;
                &amp;lt;lastmodified&amp;gt;&lt;br /&gt;
                    &amp;lt;date&amp;gt;2006-01-04&amp;lt;/date&amp;gt;&lt;br /&gt;
                    &amp;lt;time&amp;gt;19:48:24&amp;lt;/time&amp;gt;&lt;br /&gt;
                &amp;lt;/lastmodified&amp;gt;&lt;br /&gt;
                &amp;lt;count&amp;gt;5&amp;lt;/count&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showInfo&amp;gt;&lt;br /&gt;
            &amp;lt;dataset thredds_container=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;nc/test/TestPatFlt.nc&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;size&amp;gt;1048884&amp;lt;/size&amp;gt;&lt;br /&gt;
                &amp;lt;lastmodified&amp;gt;&lt;br /&gt;
                    &amp;lt;date&amp;gt;2005-09-29&amp;lt;/date&amp;gt;&lt;br /&gt;
                    &amp;lt;time&amp;gt;16:31:27&amp;lt;/time&amp;gt;&lt;br /&gt;
                &amp;lt;/lastmodified&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Proposed Response =====&lt;br /&gt;
    &amp;lt;dataset name=&amp;quot;testfile.nc&amp;quot; size=&amp;quot;43392&amp;quot; lastModified=&amp;quot;YYYY-MM-DDThh:mm:ss&amp;quot; catalog=&amp;quot;catalog&amp;quot; &lt;br /&gt;
                     node=&amp;quot;true|false&amp;quot; count=&amp;quot;#ofChildDatSets&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
    &amp;lt;/dataset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== showServices ===&lt;br /&gt;
&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showServiceDescriptions /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showServices&amp;gt;&lt;br /&gt;
            &amp;lt;service name=&amp;quot;DAP&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;command name=&amp;quot;ddx&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;description&amp;gt;Words For Humans&amp;lt;/description&amp;gt;&lt;br /&gt;
                    &amp;lt;format name=&amp;quot;dap2&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/command&amp;gt;&lt;br /&gt;
                &amp;lt;command name=&amp;quot;dds&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;description&amp;gt;Words For Humans&amp;lt;/description&amp;gt;&lt;br /&gt;
                    &amp;lt;format name=&amp;quot;dap2&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/command&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/showServices&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=BES_XML_Commands&amp;diff=7599</id>
		<title>BES XML Commands</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=BES_XML_Commands&amp;diff=7599"/>
		<updated>2012-03-20T21:15:03Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development|BES XML Commands]][[Category:Hyrax Development|BES XML Commands]]&lt;br /&gt;
== BES XML Command syntax. ==&lt;br /&gt;
&lt;br /&gt;
The BES will accept commands encoded in XML documents (BES XML Commands), and provide responses in kind. Some requests specifically indicate a non XML response (such as a DAP2 binary response) in which case the response will be as requested. &lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
All elements mentioned in the following are in the http://xml.opendap.org/ns/bes/1.0# namespace unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
# Each request document &#039;&#039;&#039;must&#039;&#039;&#039; have a &amp;lt;request&amp;gt; root element.&lt;br /&gt;
# Each &amp;lt;request&amp;gt; &#039;&#039;&#039;must&#039;&#039;&#039; contain one or more BesCommand elements. &lt;br /&gt;
# A &amp;lt;request&amp;gt; &#039;&#039;&#039;may&#039;&#039;&#039; contain multiple BesCommands as long as zero more of those commands returns a response.&amp;lt;br&amp;gt;Examples (expand with abbreviated xml):&lt;br /&gt;
#*  we can do a set context, set container, define and a get das in the same request document as only the get das request command returns a response.&lt;br /&gt;
#*  There can not be two show commands within the request document, or a show and a get, or multiple gets. &lt;br /&gt;
#. Each request element &#039;&#039;&#039;must&#039;&#039;&#039; have an attribute &#039;&#039;reqID&#039;&#039; the value of which will be used in the response document. There is no guarantee that the value of &#039;&#039;reqID&#039;&#039; be unique within the operational domain of the BES. (It might be unique within the software of the requesting client, but that&#039;s of no concern to the BES).&lt;br /&gt;
&lt;br /&gt;
Question: Do we may want to allow reqID to be an optional attribute for each individual command. If present it would (&#039;&#039;can it?&#039;&#039;)  be preserved in the response (or error) object as appropriate.&lt;br /&gt;
&lt;br /&gt;
When we (eventually) develop a schema for this we can use it to &amp;quot;enforce&amp;quot; these restrictions.&lt;br /&gt;
&lt;br /&gt;
=== Responses ===&lt;br /&gt;
&lt;br /&gt;
Need a description and such here.&lt;br /&gt;
&lt;br /&gt;
== BES Error Response ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;BES&amp;gt;&lt;br /&gt;
     &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;BESError&amp;gt;&lt;br /&gt;
             &amp;lt;Type&amp;gt;3&amp;lt;/Type&amp;gt;&lt;br /&gt;
             &amp;lt;Message&amp;gt;Unable to find command for showVersions&amp;lt;/Message&amp;gt;&lt;br /&gt;
             &amp;lt;Administrator&amp;gt;ndp@opendap.org&amp;lt;/Administrator&amp;gt;&lt;br /&gt;
         &amp;lt;/BESError&amp;gt;&lt;br /&gt;
     &amp;lt;/response&amp;gt;&lt;br /&gt;
 &amp;lt;/BES&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where Type is one of the following:&lt;br /&gt;
* 1. Internal Error - the error is internal to the BES Server&lt;br /&gt;
* 2. Internal Fatal Error - error is fatal, can not continue&lt;br /&gt;
* 3. Syntax User Error - the requester has a syntax error in request or config&lt;br /&gt;
* 4. Forbidden Error - the requester is forbidden to see the resource&lt;br /&gt;
* 5. Not Found Error - the resource can not be found&lt;br /&gt;
&lt;br /&gt;
If debugging is enabled during build then the Error object will include the file name and line number where the exception was thrown.&lt;br /&gt;
&lt;br /&gt;
== BES Command Set ==&lt;br /&gt;
&lt;br /&gt;
=== setContext ===&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
 &amp;lt;setContext  name=&amp;quot;contextName&amp;gt;Value&amp;lt;/setContext&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes the state of the BES for the current client connection. This allows the client to ask the BES to utilize various response formats.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;name&#039;&#039; attribute====&lt;br /&gt;
Identifies which context value is being set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dap_format&#039;&#039;&#039; context&lt;br /&gt;
: Value:&lt;br /&gt;
:* &#039;&#039;Major.Minor&#039;&#039;  where both &#039;&#039;Major&#039;&#039; and &#039;&#039;Minor&#039;&#039; are integer values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;errors&#039;&#039;&#039; context&lt;br /&gt;
: Current Values:&lt;br /&gt;
:* &#039;&#039;xml&#039;&#039; -&lt;br /&gt;
:* &#039;&#039;dap2&#039;&#039; - When error context is set to &#039;&#039;dap2&#039;&#039; then all errors will returned as DAP2 error objects (definitely &#039;&#039;&#039;not&#039;&#039;&#039; XML).&lt;br /&gt;
&lt;br /&gt;
: Proposed Values:&lt;br /&gt;
:* &#039;&#039;dap&#039;&#039; - When error context is set to &#039;&#039;dap&#039;&#039; then all errors will returned as DAP error objects. The version of the DAP that error must conform to is controlled by the dap_format context. It is possible (likely) that in the future DAP errors will be XML documents.&lt;br /&gt;
:* &#039;&#039;bes&#039;&#039; - Returns a BES Error response XML Document:&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContext name=&amp;quot;errors&amp;quot;&amp;gt;dap2&amp;lt;/setContext&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== setContainer ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContainer name=&amp;quot;c&amp;quot; space=&amp;quot;catalog&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/setContainer&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== define ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;define name=&amp;quot;d&amp;quot; space=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;constraint&amp;gt;a valid default ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c2&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;aggregate handler=&amp;quot;someHandler&amp;quot; cmd=&amp;quot;someCommand&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;/define&amp;gt; &lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This needs to be expanded to illuminate the missing details from the previoius command set:&#039;&#039;&#039;&lt;br /&gt;
* get &#039;type&#039;  for &#039;definition&#039; using &#039;URL&#039;;&lt;br /&gt;
&lt;br /&gt;
Type:&lt;br /&gt;
* &#039;&#039;&#039;dds&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;das&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;dods&#039;&#039;&#039; - &lt;br /&gt;
* &#039;&#039;&#039;stream&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;ascii&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;html_form&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;info_page&#039;&#039;&#039; -&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;get type=&amp;quot;data_product&amp;quot; definition=&amp;quot;def_name&amp;quot; returnAs=&amp;quot;name&amp;quot; url=&amp;quot;url&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Explain about DAP2 responses etc...&lt;br /&gt;
&lt;br /&gt;
===Multiple command example ===&lt;br /&gt;
Multiple command transaction resulting in a DDS (non XML DAP2) response:&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContext name=&amp;quot;error&amp;quot;&amp;gt;dap2&amp;lt;/setContext&amp;gt;&lt;br /&gt;
        &amp;lt;setContainer name=&amp;quot;c&amp;quot; space=&amp;quot;catalog&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/setContainer&amp;gt;&lt;br /&gt;
         &amp;lt;define name=&amp;quot;d&amp;quot; space=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;aggregate handler=&amp;quot;someHandler&amp;quot; cmd=&amp;quot;someCommand&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;/define&amp;gt; &lt;br /&gt;
         &amp;lt;get  type=&amp;quot;dds&amp;quot; definition=&amp;quot;d&amp;quot; returnAs=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Show version ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showVersion /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
&lt;br /&gt;
Current:&lt;br /&gt;
    &amp;lt;showVersion&amp;gt;&lt;br /&gt;
        &amp;lt;response&amp;gt;&lt;br /&gt;
            &amp;lt;DAP&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.2&amp;lt;/version&amp;gt;&lt;br /&gt;
            &amp;lt;/DAP&amp;gt;&lt;br /&gt;
            &amp;lt;BES&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;libdap&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;3.5.3&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;bes&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;3.1.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
            &amp;lt;/BES&amp;gt;&lt;br /&gt;
            &amp;lt;Handlers&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;libnc-dods&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;0.9&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
            &amp;lt;/Handlers&amp;gt;&lt;br /&gt;
         &amp;lt;/response&amp;gt;&lt;br /&gt;
    &amp;lt;/showVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proposed:&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showVersion&amp;gt;&lt;br /&gt;
            &amp;lt;service name=&amp;quot;dap&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.2&amp;lt;/version&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;library name=&amp;quot;bes&amp;quot;&amp;gt;3.5.3&amp;lt;/library&amp;gt;&lt;br /&gt;
            &amp;lt;library name=&amp;quot;libdap&amp;quot;&amp;gt;3.10.0&amp;lt;/library&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;netcdf_handler&amp;quot;&amp;gt;3.7.9&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;freeform_handler&amp;quot;&amp;gt;3.7.9&amp;lt;/module&amp;gt;&lt;br /&gt;
        &amp;lt;/showVersion&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Show help ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showHelp /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showHelp&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;bes&amp;quot; version=&amp;quot;3.6.2&amp;quot;&amp;gt;&amp;lt;html xmlns= http://www.w3.org/1999/xhtml &amp;gt;Help Information&amp;lt;/html&amp;gt;&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;dap&amp;quot; version=&amp;quot;3.10.1&amp;quot;&amp;gt;Help Information&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;netcdf_handler&amp;quot; version=&amp;quot;3.7.9&amp;quot;&amp;gt;Help Information including supported responses&amp;lt;/module&amp;gt;&lt;br /&gt;
        &amp;lt;/showHelp&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showProcess ===&lt;br /&gt;
&lt;br /&gt;
This is available only if the BES is compiled in developer mode. A &#039;production&#039; BES does not support this command. &lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showProcess /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showProcess&amp;gt;&lt;br /&gt;
            &amp;lt;process pid=&amp;quot;10831&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/showProcess&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showConfig ===&lt;br /&gt;
This is available only if the BES is compiled in developer mode. A &#039;production&#039; BES does not support this command.&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showConfig /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showConfig&amp;gt;&lt;br /&gt;
            &amp;lt;file&amp;gt;/Users/pwest/opendap/chunking/etc/bes/bes.conf&amp;lt;/file&amp;gt;&lt;br /&gt;
            &amp;lt;key name=&amp;quot;BES.CacheDir&amp;quot;&amp;gt;/tmp&amp;lt;/key&amp;gt;&lt;br /&gt;
            ....&lt;br /&gt;
        &amp;lt;/showConfig&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showStatus ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showStatus /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showStatus&amp;gt;&lt;br /&gt;
            &amp;lt;status&amp;gt;MST Thu Dec 18 11:51:36 2008&amp;lt;/status&amp;gt;&lt;br /&gt;
        &amp;lt;/showStatus&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showContainers ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showContainers /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showContainers&amp;gt;&lt;br /&gt;
            &amp;lt;store name=&amp;quot;volatile&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;container name=&amp;quot;c&amp;quot; type=&amp;quot;nc&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/container&amp;gt;&lt;br /&gt;
            &amp;lt;/store&amp;gt;&lt;br /&gt;
        &amp;lt;/showContainers&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== deleteContainer(s), deleteDefinition(s) ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;deleteContainers store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteContainer name=&amp;quot;containerName&amp;quot; store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteDefinitions store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteDefinition name=&amp;quot;defName&amp;quot; store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showDefinitions ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showDefinitions /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showDefinitions&amp;gt;&lt;br /&gt;
            &amp;lt;store name=&amp;quot;volatile&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;definition name=&amp;quot;d&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;container name=&amp;quot;c&amp;quot; type=&amp;quot;nc&amp;quot; constraint=&amp;quot;&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/container&amp;gt;&lt;br /&gt;
                    &amp;lt;aggregation handler=&amp;quot;agg&amp;quot;&amp;gt;aggregation_command&amp;lt;/aggregation&amp;gt;&lt;br /&gt;
                &amp;lt;/definition&amp;gt;&lt;br /&gt;
            &amp;lt;/store&amp;gt;&lt;br /&gt;
        &amp;lt;/showDefinitions&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showContext ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showContext /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
   &amp;lt;response reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;showContext&amp;gt;&lt;br /&gt;
             &amp;lt;context name=&amp;quot;name1&amp;quot;&amp;gt;value1&amp;lt;/context&amp;gt;&lt;br /&gt;
             &amp;lt;context name=&amp;quot;name2&amp;quot;&amp;gt;value2&amp;lt;/context&amp;gt;&lt;br /&gt;
              ...&lt;br /&gt;
             &amp;lt;context name=&amp;quot;namen&amp;quot;&amp;gt;valuen&amp;lt;/context&amp;gt;&lt;br /&gt;
        &amp;lt;showContext&amp;gt;&lt;br /&gt;
   &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showCatalog ===&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showCatalog node=&amp;quot;[catalog:]nodeName&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The catalog name is optional, defaulting to the default catalog specified in the BES configuration file. So if you had a catalog named rdh you could specify node=&amp;quot;rdh:/&amp;quot; and it would give you the root node for the rdh catalog.&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
            &amp;lt;dataset name=&amp;quot;nc/test&amp;quot; size=&amp;quot;408&amp;quot; lastModified=&amp;quot;2006-01-04T19:48:24&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; count=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;test.nc&amp;quot; size=&amp;quot;12148&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;testfile.nc&amp;quot; size=&amp;quot;43392&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPat.nc&amp;quot; size=&amp;quot;262452&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:27&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPatDbl.nc&amp;quot; size=&amp;quot;2097464&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPatFlt.nc&amp;quot; size=&amp;quot;1048884&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:27&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showInfo ===&lt;br /&gt;
&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showInfo node=&amp;quot;nodeName /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Current Response =====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showInfo&amp;gt;&lt;br /&gt;
            &amp;lt;dataset thredds_container=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;nc/test&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;size&amp;gt;408&amp;lt;/size&amp;gt;&lt;br /&gt;
                &amp;lt;lastmodified&amp;gt;&lt;br /&gt;
                    &amp;lt;date&amp;gt;2006-01-04&amp;lt;/date&amp;gt;&lt;br /&gt;
                    &amp;lt;time&amp;gt;19:48:24&amp;lt;/time&amp;gt;&lt;br /&gt;
                &amp;lt;/lastmodified&amp;gt;&lt;br /&gt;
                &amp;lt;count&amp;gt;5&amp;lt;/count&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showInfo&amp;gt;&lt;br /&gt;
            &amp;lt;dataset thredds_container=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;nc/test/TestPatFlt.nc&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;size&amp;gt;1048884&amp;lt;/size&amp;gt;&lt;br /&gt;
                &amp;lt;lastmodified&amp;gt;&lt;br /&gt;
                    &amp;lt;date&amp;gt;2005-09-29&amp;lt;/date&amp;gt;&lt;br /&gt;
                    &amp;lt;time&amp;gt;16:31:27&amp;lt;/time&amp;gt;&lt;br /&gt;
                &amp;lt;/lastmodified&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Proposed Response =====&lt;br /&gt;
    &amp;lt;dataset name=&amp;quot;testfile.nc&amp;quot; size=&amp;quot;43392&amp;quot; lastModified=&amp;quot;YYYY-MM-DDThh:mm:ss&amp;quot; catalog=&amp;quot;catalog&amp;quot; &lt;br /&gt;
                     node=&amp;quot;true|false&amp;quot; count=&amp;quot;#ofChildDatSets&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
    &amp;lt;/dataset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== showServices ===&lt;br /&gt;
&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showServiceDescriptions /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showServices&amp;gt;&lt;br /&gt;
            &amp;lt;service name=&amp;quot;DAP&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;command name=&amp;quot;ddx&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;description&amp;gt;Words For Humans&amp;lt;/description&amp;gt;&lt;br /&gt;
                    &amp;lt;format name=&amp;quot;dap2&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/command&amp;gt;&lt;br /&gt;
                &amp;lt;command name=&amp;quot;dds&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;description&amp;gt;Words For Humans&amp;lt;/description&amp;gt;&lt;br /&gt;
                    &amp;lt;format name=&amp;quot;dap2&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/command&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/showServices&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=User:PatrickWest&amp;diff=7473</id>
		<title>User:PatrickWest</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=User:PatrickWest&amp;diff=7473"/>
		<updated>2012-03-05T18:36:31Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Patrick West&amp;lt;BR&amp;gt;&lt;br /&gt;
Senior Software Engineer, Rensselaer Polytechnic Institute, Tetherless World Constellation&amp;lt;BR&amp;gt;&lt;br /&gt;
[mailto:westp@rpi.edu email]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=BES_XML_Commands&amp;diff=6973</id>
		<title>BES XML Commands</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=BES_XML_Commands&amp;diff=6973"/>
		<updated>2012-01-24T20:30:07Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* Response */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development|BES XML Commands]][[Category:Hyrax Development|BES XML Commands]]&lt;br /&gt;
== BES XML Command syntax. ==&lt;br /&gt;
&lt;br /&gt;
The BES will accept commands encoded in XML documents (BES XML Commands), and provide responses in kind. Some requests specifically indicate a non XML response (such as a DAP2 binary response) in which case the response will be as requested. &lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
All elements mentioned in the following are in the http://xml.opendap.org/ns/bes/1.0# namespace unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
# Each request document &#039;&#039;&#039;must&#039;&#039;&#039; have a &amp;lt;request&amp;gt; root element.&lt;br /&gt;
# Each &amp;lt;request&amp;gt; &#039;&#039;&#039;must&#039;&#039;&#039; contain one or more BesCommand elements. &lt;br /&gt;
# A &amp;lt;request&amp;gt; &#039;&#039;&#039;may&#039;&#039;&#039; contain multiple BesCommands as long as zero more of those commands returns a response.&amp;lt;br&amp;gt;Examples (expand with abbreviated xml):&lt;br /&gt;
#*  we can do a set context, set container, define and a get das in the same request document as only the get das request command returns a response.&lt;br /&gt;
#*  There can not be two show commands within the request document, or a show and a get, or multiple gets. &lt;br /&gt;
#. Each request element &#039;&#039;&#039;must&#039;&#039;&#039; have an attribute &#039;&#039;reqID&#039;&#039; the value of which will be used in the response document. There is no guarantee that the value of &#039;&#039;reqID&#039;&#039; be unique within the operational domain of the BES. (It might be unique within the software of the requesting client, but that&#039;s of no concern to the BES).&lt;br /&gt;
&lt;br /&gt;
Question: Do we may want to allow reqID to be an optional attribute for each individual command. If present it would (&#039;&#039;can it?&#039;&#039;)  be preserved in the response (or error) object as appropriate.&lt;br /&gt;
&lt;br /&gt;
When we (eventually) develop a schema for this we can use it to &amp;quot;enforce&amp;quot; these restrictions.&lt;br /&gt;
&lt;br /&gt;
=== Responses ===&lt;br /&gt;
&lt;br /&gt;
Need a description and such here.&lt;br /&gt;
&lt;br /&gt;
== BES Command Set ==&lt;br /&gt;
&lt;br /&gt;
=== setContext ===&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
 &amp;lt;setContext  name=&amp;quot;contextName&amp;gt;Value&amp;lt;/setContext&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes the state of the BES for the current client connection. This allows the client to ask the BES to utilize various response formats.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;name&#039;&#039; attribute====&lt;br /&gt;
Identifies which context value is being set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dap_format&#039;&#039;&#039; context&lt;br /&gt;
: Value:&lt;br /&gt;
:* &#039;&#039;Major.Minor&#039;&#039;  where both &#039;&#039;Major&#039;&#039; and &#039;&#039;Minor&#039;&#039; are integer values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;errors&#039;&#039;&#039; context&lt;br /&gt;
: Current Values:&lt;br /&gt;
:* &#039;&#039;xml&#039;&#039; -&lt;br /&gt;
:* &#039;&#039;dap2&#039;&#039; - When error context is set to &#039;&#039;dap2&#039;&#039; then all errors will returned as DAP2 error objects (definitely &#039;&#039;&#039;not&#039;&#039;&#039; XML).&lt;br /&gt;
&lt;br /&gt;
: Proposed Values:&lt;br /&gt;
:* &#039;&#039;dap&#039;&#039; - When error context is set to &#039;&#039;dap&#039;&#039; then all errors will returned as DAP error objects. The version of the DAP that error must conform to is controlled by the dap_format context. It is possible (likely) that in the future DAP errors will be XML documents.&lt;br /&gt;
:* &#039;&#039;bes&#039;&#039; - Returns a BES Error response:&lt;br /&gt;
 &amp;lt;BES&amp;gt;&lt;br /&gt;
     &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;BESError&amp;gt;&lt;br /&gt;
             &amp;lt;Type&amp;gt;3&amp;lt;/Type&amp;gt;&lt;br /&gt;
             &amp;lt;Message&amp;gt;Unable to find command for showVersions&amp;lt;/Message&amp;gt;&lt;br /&gt;
             &amp;lt;Administrator&amp;gt;ndp@opendap.org&amp;lt;/Administrator&amp;gt;&lt;br /&gt;
         &amp;lt;/BESError&amp;gt;&lt;br /&gt;
     &amp;lt;/response&amp;gt;&lt;br /&gt;
 &amp;lt;/BES&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContext name=&amp;quot;errors&amp;quot;&amp;gt;dap2&amp;lt;/setContext&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== setContainer ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContainer name=&amp;quot;c&amp;quot; space=&amp;quot;catalog&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/setContainer&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== define ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;define name=&amp;quot;d&amp;quot; space=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;constraint&amp;gt;a valid default ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c2&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;aggregate handler=&amp;quot;someHandler&amp;quot; cmd=&amp;quot;someCommand&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;/define&amp;gt; &lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This needs to be expanded to illuminate the missing details from the previoius command set:&#039;&#039;&#039;&lt;br /&gt;
* get &#039;type&#039;  for &#039;definition&#039; using &#039;URL&#039;;&lt;br /&gt;
&lt;br /&gt;
Type:&lt;br /&gt;
* &#039;&#039;&#039;dds&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;das&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;dods&#039;&#039;&#039; - &lt;br /&gt;
* &#039;&#039;&#039;stream&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;ascii&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;html_form&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;info_page&#039;&#039;&#039; -&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;get type=&amp;quot;data_product&amp;quot; definition=&amp;quot;def_name&amp;quot; returnAs=&amp;quot;name&amp;quot; url=&amp;quot;url&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Explain about DAP2 responses etc...&lt;br /&gt;
&lt;br /&gt;
===Multiple command example ===&lt;br /&gt;
Multiple command transaction resulting in a DDS (non XML DAP2) response:&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContext name=&amp;quot;error&amp;quot;&amp;gt;dap2&amp;lt;/setContext&amp;gt;&lt;br /&gt;
        &amp;lt;setContainer name=&amp;quot;c&amp;quot; space=&amp;quot;catalog&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/setContainer&amp;gt;&lt;br /&gt;
         &amp;lt;define name=&amp;quot;d&amp;quot; space=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;aggregate handler=&amp;quot;someHandler&amp;quot; cmd=&amp;quot;someCommand&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;/define&amp;gt; &lt;br /&gt;
         &amp;lt;get  type=&amp;quot;dds&amp;quot; definition=&amp;quot;d&amp;quot; returnAs=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Show version ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showVersion /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
&lt;br /&gt;
Current:&lt;br /&gt;
    &amp;lt;showVersion&amp;gt;&lt;br /&gt;
        &amp;lt;response&amp;gt;&lt;br /&gt;
            &amp;lt;DAP&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.2&amp;lt;/version&amp;gt;&lt;br /&gt;
            &amp;lt;/DAP&amp;gt;&lt;br /&gt;
            &amp;lt;BES&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;libdap&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;3.5.3&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;bes&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;3.1.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
            &amp;lt;/BES&amp;gt;&lt;br /&gt;
            &amp;lt;Handlers&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;libnc-dods&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;0.9&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
            &amp;lt;/Handlers&amp;gt;&lt;br /&gt;
         &amp;lt;/response&amp;gt;&lt;br /&gt;
    &amp;lt;/showVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proposed:&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showVersion&amp;gt;&lt;br /&gt;
            &amp;lt;service name=&amp;quot;dap&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.2&amp;lt;/version&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;library name=&amp;quot;bes&amp;quot;&amp;gt;3.5.3&amp;lt;/library&amp;gt;&lt;br /&gt;
            &amp;lt;library name=&amp;quot;libdap&amp;quot;&amp;gt;3.10.0&amp;lt;/library&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;netcdf_handler&amp;quot;&amp;gt;3.7.9&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;freeform_handler&amp;quot;&amp;gt;3.7.9&amp;lt;/module&amp;gt;&lt;br /&gt;
        &amp;lt;/showVersion&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Show help ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showHelp /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showHelp&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;bes&amp;quot; version=&amp;quot;3.6.2&amp;quot;&amp;gt;&amp;lt;html xmlns= http://www.w3.org/1999/xhtml &amp;gt;Help Information&amp;lt;/html&amp;gt;&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;dap&amp;quot; version=&amp;quot;3.10.1&amp;quot;&amp;gt;Help Information&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;netcdf_handler&amp;quot; version=&amp;quot;3.7.9&amp;quot;&amp;gt;Help Information including supported responses&amp;lt;/module&amp;gt;&lt;br /&gt;
        &amp;lt;/showHelp&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showProcess ===&lt;br /&gt;
&lt;br /&gt;
This is available only if the BES is compiled in developer mode. A &#039;production&#039; BES does not support this command. &lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showProcess /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showProcess&amp;gt;&lt;br /&gt;
            &amp;lt;process pid=&amp;quot;10831&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/showProcess&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showConfig ===&lt;br /&gt;
This is available only if the BES is compiled in developer mode. A &#039;production&#039; BES does not support this command.&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showConfig /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showConfig&amp;gt;&lt;br /&gt;
            &amp;lt;file&amp;gt;/Users/pwest/opendap/chunking/etc/bes/bes.conf&amp;lt;/file&amp;gt;&lt;br /&gt;
            &amp;lt;key name=&amp;quot;BES.CacheDir&amp;quot;&amp;gt;/tmp&amp;lt;/key&amp;gt;&lt;br /&gt;
            ....&lt;br /&gt;
        &amp;lt;/showConfig&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showStatus ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showStatus /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showStatus&amp;gt;&lt;br /&gt;
            &amp;lt;status&amp;gt;MST Thu Dec 18 11:51:36 2008&amp;lt;/status&amp;gt;&lt;br /&gt;
        &amp;lt;/showStatus&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showContainers ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showContainers /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showContainers&amp;gt;&lt;br /&gt;
            &amp;lt;store name=&amp;quot;volatile&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;container name=&amp;quot;c&amp;quot; type=&amp;quot;nc&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/container&amp;gt;&lt;br /&gt;
            &amp;lt;/store&amp;gt;&lt;br /&gt;
        &amp;lt;/showContainers&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== deleteContainer(s), deleteDefinition(s) ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;deleteContainers store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteContainer name=&amp;quot;containerName&amp;quot; store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteDefinitions store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteDefinition name=&amp;quot;defName&amp;quot; store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showDefinitions ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showDefinitions /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showDefinitions&amp;gt;&lt;br /&gt;
            &amp;lt;store name=&amp;quot;volatile&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;definition name=&amp;quot;d&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;container name=&amp;quot;c&amp;quot; type=&amp;quot;nc&amp;quot; constraint=&amp;quot;&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/container&amp;gt;&lt;br /&gt;
                    &amp;lt;aggregation handler=&amp;quot;agg&amp;quot;&amp;gt;aggregation_command&amp;lt;/aggregation&amp;gt;&lt;br /&gt;
                &amp;lt;/definition&amp;gt;&lt;br /&gt;
            &amp;lt;/store&amp;gt;&lt;br /&gt;
        &amp;lt;/showDefinitions&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showContext ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showContext /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
   &amp;lt;response reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;showContext&amp;gt;&lt;br /&gt;
             &amp;lt;context name=&amp;quot;name1&amp;quot;&amp;gt;value1&amp;lt;/context&amp;gt;&lt;br /&gt;
             &amp;lt;context name=&amp;quot;name2&amp;quot;&amp;gt;value2&amp;lt;/context&amp;gt;&lt;br /&gt;
              ...&lt;br /&gt;
             &amp;lt;context name=&amp;quot;namen&amp;quot;&amp;gt;valuen&amp;lt;/context&amp;gt;&lt;br /&gt;
        &amp;lt;showContext&amp;gt;&lt;br /&gt;
   &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showCatalog ===&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showCatalog node=&amp;quot;[catalog:]nodeName&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The catalog name is optional, defaulting to the default catalog specified in the BES configuration file. So if you had a catalog named rdh you could specify node=&amp;quot;rdh:/&amp;quot; and it would give you the root node for the rdh catalog.&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
            &amp;lt;dataset name=&amp;quot;nc/test&amp;quot; size=&amp;quot;408&amp;quot; lastModified=&amp;quot;2006-01-04T19:48:24&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; count=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;test.nc&amp;quot; size=&amp;quot;12148&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;testfile.nc&amp;quot; size=&amp;quot;43392&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPat.nc&amp;quot; size=&amp;quot;262452&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:27&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPatDbl.nc&amp;quot; size=&amp;quot;2097464&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPatFlt.nc&amp;quot; size=&amp;quot;1048884&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:27&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showInfo ===&lt;br /&gt;
&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showInfo node=&amp;quot;nodeName /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Current Response =====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showInfo&amp;gt;&lt;br /&gt;
            &amp;lt;dataset thredds_container=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;nc/test&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;size&amp;gt;408&amp;lt;/size&amp;gt;&lt;br /&gt;
                &amp;lt;lastmodified&amp;gt;&lt;br /&gt;
                    &amp;lt;date&amp;gt;2006-01-04&amp;lt;/date&amp;gt;&lt;br /&gt;
                    &amp;lt;time&amp;gt;19:48:24&amp;lt;/time&amp;gt;&lt;br /&gt;
                &amp;lt;/lastmodified&amp;gt;&lt;br /&gt;
                &amp;lt;count&amp;gt;5&amp;lt;/count&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showInfo&amp;gt;&lt;br /&gt;
            &amp;lt;dataset thredds_container=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;nc/test/TestPatFlt.nc&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;size&amp;gt;1048884&amp;lt;/size&amp;gt;&lt;br /&gt;
                &amp;lt;lastmodified&amp;gt;&lt;br /&gt;
                    &amp;lt;date&amp;gt;2005-09-29&amp;lt;/date&amp;gt;&lt;br /&gt;
                    &amp;lt;time&amp;gt;16:31:27&amp;lt;/time&amp;gt;&lt;br /&gt;
                &amp;lt;/lastmodified&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Proposed Response =====&lt;br /&gt;
    &amp;lt;dataset name=&amp;quot;testfile.nc&amp;quot; size=&amp;quot;43392&amp;quot; lastModified=&amp;quot;YYYY-MM-DDThh:mm:ss&amp;quot; catalog=&amp;quot;catalog&amp;quot; &lt;br /&gt;
                     node=&amp;quot;true|false&amp;quot; count=&amp;quot;#ofChildDatSets&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
    &amp;lt;/dataset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== showServices ===&lt;br /&gt;
&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showServiceDescriptions /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showServices&amp;gt;&lt;br /&gt;
            &amp;lt;service name=&amp;quot;DAP&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;command name=&amp;quot;ddx&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;description&amp;gt;Words For Humans&amp;lt;/description&amp;gt;&lt;br /&gt;
                    &amp;lt;format name=&amp;quot;dap2&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/command&amp;gt;&lt;br /&gt;
                &amp;lt;command name=&amp;quot;dds&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;description&amp;gt;Words For Humans&amp;lt;/description&amp;gt;&lt;br /&gt;
                    &amp;lt;format name=&amp;quot;dap2&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/command&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/showServices&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=BES_XML_Commands&amp;diff=6972</id>
		<title>BES XML Commands</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=BES_XML_Commands&amp;diff=6972"/>
		<updated>2012-01-24T20:27:48Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* showServices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development|BES XML Commands]][[Category:Hyrax Development|BES XML Commands]]&lt;br /&gt;
== BES XML Command syntax. ==&lt;br /&gt;
&lt;br /&gt;
The BES will accept commands encoded in XML documents (BES XML Commands), and provide responses in kind. Some requests specifically indicate a non XML response (such as a DAP2 binary response) in which case the response will be as requested. &lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
All elements mentioned in the following are in the http://xml.opendap.org/ns/bes/1.0# namespace unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
# Each request document &#039;&#039;&#039;must&#039;&#039;&#039; have a &amp;lt;request&amp;gt; root element.&lt;br /&gt;
# Each &amp;lt;request&amp;gt; &#039;&#039;&#039;must&#039;&#039;&#039; contain one or more BesCommand elements. &lt;br /&gt;
# A &amp;lt;request&amp;gt; &#039;&#039;&#039;may&#039;&#039;&#039; contain multiple BesCommands as long as zero more of those commands returns a response.&amp;lt;br&amp;gt;Examples (expand with abbreviated xml):&lt;br /&gt;
#*  we can do a set context, set container, define and a get das in the same request document as only the get das request command returns a response.&lt;br /&gt;
#*  There can not be two show commands within the request document, or a show and a get, or multiple gets. &lt;br /&gt;
#. Each request element &#039;&#039;&#039;must&#039;&#039;&#039; have an attribute &#039;&#039;reqID&#039;&#039; the value of which will be used in the response document. There is no guarantee that the value of &#039;&#039;reqID&#039;&#039; be unique within the operational domain of the BES. (It might be unique within the software of the requesting client, but that&#039;s of no concern to the BES).&lt;br /&gt;
&lt;br /&gt;
Question: Do we may want to allow reqID to be an optional attribute for each individual command. If present it would (&#039;&#039;can it?&#039;&#039;)  be preserved in the response (or error) object as appropriate.&lt;br /&gt;
&lt;br /&gt;
When we (eventually) develop a schema for this we can use it to &amp;quot;enforce&amp;quot; these restrictions.&lt;br /&gt;
&lt;br /&gt;
=== Responses ===&lt;br /&gt;
&lt;br /&gt;
Need a description and such here.&lt;br /&gt;
&lt;br /&gt;
== BES Command Set ==&lt;br /&gt;
&lt;br /&gt;
=== setContext ===&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
 &amp;lt;setContext  name=&amp;quot;contextName&amp;gt;Value&amp;lt;/setContext&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes the state of the BES for the current client connection. This allows the client to ask the BES to utilize various response formats.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;name&#039;&#039; attribute====&lt;br /&gt;
Identifies which context value is being set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dap_format&#039;&#039;&#039; context&lt;br /&gt;
: Value:&lt;br /&gt;
:* &#039;&#039;Major.Minor&#039;&#039;  where both &#039;&#039;Major&#039;&#039; and &#039;&#039;Minor&#039;&#039; are integer values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;errors&#039;&#039;&#039; context&lt;br /&gt;
: Current Values:&lt;br /&gt;
:* &#039;&#039;xml&#039;&#039; -&lt;br /&gt;
:* &#039;&#039;dap2&#039;&#039; - When error context is set to &#039;&#039;dap2&#039;&#039; then all errors will returned as DAP2 error objects (definitely &#039;&#039;&#039;not&#039;&#039;&#039; XML).&lt;br /&gt;
&lt;br /&gt;
: Proposed Values:&lt;br /&gt;
:* &#039;&#039;dap&#039;&#039; - When error context is set to &#039;&#039;dap&#039;&#039; then all errors will returned as DAP error objects. The version of the DAP that error must conform to is controlled by the dap_format context. It is possible (likely) that in the future DAP errors will be XML documents.&lt;br /&gt;
:* &#039;&#039;bes&#039;&#039; - Returns a BES Error response:&lt;br /&gt;
 &amp;lt;BES&amp;gt;&lt;br /&gt;
     &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;BESError&amp;gt;&lt;br /&gt;
             &amp;lt;Type&amp;gt;3&amp;lt;/Type&amp;gt;&lt;br /&gt;
             &amp;lt;Message&amp;gt;Unable to find command for showVersions&amp;lt;/Message&amp;gt;&lt;br /&gt;
             &amp;lt;Administrator&amp;gt;ndp@opendap.org&amp;lt;/Administrator&amp;gt;&lt;br /&gt;
         &amp;lt;/BESError&amp;gt;&lt;br /&gt;
     &amp;lt;/response&amp;gt;&lt;br /&gt;
 &amp;lt;/BES&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContext name=&amp;quot;errors&amp;quot;&amp;gt;dap2&amp;lt;/setContext&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== setContainer ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContainer name=&amp;quot;c&amp;quot; space=&amp;quot;catalog&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/setContainer&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== define ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;define name=&amp;quot;d&amp;quot; space=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;constraint&amp;gt;a valid default ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c2&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;aggregate handler=&amp;quot;someHandler&amp;quot; cmd=&amp;quot;someCommand&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;/define&amp;gt; &lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This needs to be expanded to illuminate the missing details from the previoius command set:&#039;&#039;&#039;&lt;br /&gt;
* get &#039;type&#039;  for &#039;definition&#039; using &#039;URL&#039;;&lt;br /&gt;
&lt;br /&gt;
Type:&lt;br /&gt;
* &#039;&#039;&#039;dds&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;das&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;dods&#039;&#039;&#039; - &lt;br /&gt;
* &#039;&#039;&#039;stream&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;ascii&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;html_form&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;info_page&#039;&#039;&#039; -&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;get type=&amp;quot;data_product&amp;quot; definition=&amp;quot;def_name&amp;quot; returnAs=&amp;quot;name&amp;quot; url=&amp;quot;url&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Explain about DAP2 responses etc...&lt;br /&gt;
&lt;br /&gt;
===Multiple command example ===&lt;br /&gt;
Multiple command transaction resulting in a DDS (non XML DAP2) response:&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContext name=&amp;quot;error&amp;quot;&amp;gt;dap2&amp;lt;/setContext&amp;gt;&lt;br /&gt;
        &amp;lt;setContainer name=&amp;quot;c&amp;quot; space=&amp;quot;catalog&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/setContainer&amp;gt;&lt;br /&gt;
         &amp;lt;define name=&amp;quot;d&amp;quot; space=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;aggregate handler=&amp;quot;someHandler&amp;quot; cmd=&amp;quot;someCommand&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;/define&amp;gt; &lt;br /&gt;
         &amp;lt;get  type=&amp;quot;dds&amp;quot; definition=&amp;quot;d&amp;quot; returnAs=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Show version ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showVersion /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
&lt;br /&gt;
Current:&lt;br /&gt;
    &amp;lt;showVersion&amp;gt;&lt;br /&gt;
        &amp;lt;response&amp;gt;&lt;br /&gt;
            &amp;lt;DAP&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.2&amp;lt;/version&amp;gt;&lt;br /&gt;
            &amp;lt;/DAP&amp;gt;&lt;br /&gt;
            &amp;lt;BES&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;libdap&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;3.5.3&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;bes&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;3.1.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
            &amp;lt;/BES&amp;gt;&lt;br /&gt;
            &amp;lt;Handlers&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;libnc-dods&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;0.9&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
            &amp;lt;/Handlers&amp;gt;&lt;br /&gt;
         &amp;lt;/response&amp;gt;&lt;br /&gt;
    &amp;lt;/showVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proposed:&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showVersion&amp;gt;&lt;br /&gt;
            &amp;lt;service name=&amp;quot;dap&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.2&amp;lt;/version&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;library name=&amp;quot;bes&amp;quot;&amp;gt;3.5.3&amp;lt;/library&amp;gt;&lt;br /&gt;
            &amp;lt;library name=&amp;quot;libdap&amp;quot;&amp;gt;3.10.0&amp;lt;/library&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;netcdf_handler&amp;quot;&amp;gt;3.7.9&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;freeform_handler&amp;quot;&amp;gt;3.7.9&amp;lt;/module&amp;gt;&lt;br /&gt;
        &amp;lt;/showVersion&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Show help ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showHelp /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showHelp&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;bes&amp;quot; version=&amp;quot;3.6.2&amp;quot;&amp;gt;&amp;lt;html xmlns= http://www.w3.org/1999/xhtml &amp;gt;Help Information&amp;lt;/html&amp;gt;&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;dap&amp;quot; version=&amp;quot;3.10.1&amp;quot;&amp;gt;Help Information&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;netcdf_handler&amp;quot; version=&amp;quot;3.7.9&amp;quot;&amp;gt;Help Information including supported responses&amp;lt;/module&amp;gt;&lt;br /&gt;
        &amp;lt;/showHelp&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showProcess ===&lt;br /&gt;
&lt;br /&gt;
This is available only if the BES is compiled in developer mode. A &#039;production&#039; BES does not support this command. &lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showProcess /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showProcess&amp;gt;&lt;br /&gt;
            &amp;lt;process pid=&amp;quot;10831&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/showProcess&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showConfig ===&lt;br /&gt;
This is available only if the BES is compiled in developer mode. A &#039;production&#039; BES does not support this command.&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showConfig /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showConfig&amp;gt;&lt;br /&gt;
            &amp;lt;file&amp;gt;/Users/pwest/opendap/chunking/etc/bes/bes.conf&amp;lt;/file&amp;gt;&lt;br /&gt;
            &amp;lt;key name=&amp;quot;BES.CacheDir&amp;quot;&amp;gt;/tmp&amp;lt;/key&amp;gt;&lt;br /&gt;
            ....&lt;br /&gt;
        &amp;lt;/showConfig&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showStatus ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showStatus /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showStatus&amp;gt;&lt;br /&gt;
            &amp;lt;status&amp;gt;MST Thu Dec 18 11:51:36 2008&amp;lt;/status&amp;gt;&lt;br /&gt;
        &amp;lt;/showStatus&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showContainers ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showContainers /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showContainers&amp;gt;&lt;br /&gt;
            &amp;lt;store name=&amp;quot;volatile&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;container name=&amp;quot;c&amp;quot; type=&amp;quot;nc&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/container&amp;gt;&lt;br /&gt;
            &amp;lt;/store&amp;gt;&lt;br /&gt;
        &amp;lt;/showContainers&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== deleteContainer(s), deleteDefinition(s) ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;deleteContainers store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteContainer name=&amp;quot;containerName&amp;quot; store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteDefinitions store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteDefinition name=&amp;quot;defName&amp;quot; store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showDefinitions ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showDefinitions /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showDefinitions&amp;gt;&lt;br /&gt;
            &amp;lt;store name=&amp;quot;volatile&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;definition name=&amp;quot;d&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;container name=&amp;quot;c&amp;quot; type=&amp;quot;nc&amp;quot; constraint=&amp;quot;&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/container&amp;gt;&lt;br /&gt;
                    &amp;lt;aggregation handler=&amp;quot;agg&amp;quot;&amp;gt;aggregation_command&amp;lt;/aggregation&amp;gt;&lt;br /&gt;
                &amp;lt;/definition&amp;gt;&lt;br /&gt;
            &amp;lt;/store&amp;gt;&lt;br /&gt;
        &amp;lt;/showDefinitions&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showContext ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showContext /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
   &amp;lt;response reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;showContext&amp;gt;&lt;br /&gt;
             &amp;lt;context name=&amp;quot;name1&amp;quot;&amp;gt;value1&amp;lt;/context&amp;gt;&lt;br /&gt;
             &amp;lt;context name=&amp;quot;name2&amp;quot;&amp;gt;value2&amp;lt;/context&amp;gt;&lt;br /&gt;
              ...&lt;br /&gt;
             &amp;lt;context name=&amp;quot;namen&amp;quot;&amp;gt;valuen&amp;lt;/context&amp;gt;&lt;br /&gt;
        &amp;lt;showContext&amp;gt;&lt;br /&gt;
   &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showCatalog ===&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showCatalog node=&amp;quot;[catalog:]nodeName&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The catalog name is optional, defaulting to the default catalog specified in the BES configuration file. So if you had a catalog named rdh you could specify node=&amp;quot;rdh:/&amp;quot; and it would give you the root node for the rdh catalog.&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
            &amp;lt;dataset name=&amp;quot;nc/test&amp;quot; size=&amp;quot;408&amp;quot; lastModified=&amp;quot;2006-01-04T19:48:24&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; count=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;test.nc&amp;quot; size=&amp;quot;12148&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;testfile.nc&amp;quot; size=&amp;quot;43392&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPat.nc&amp;quot; size=&amp;quot;262452&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:27&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPatDbl.nc&amp;quot; size=&amp;quot;2097464&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPatFlt.nc&amp;quot; size=&amp;quot;1048884&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:27&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showInfo ===&lt;br /&gt;
&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showInfo node=&amp;quot;nodeName /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Current Response =====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showInfo&amp;gt;&lt;br /&gt;
            &amp;lt;dataset thredds_container=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;nc/test&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;size&amp;gt;408&amp;lt;/size&amp;gt;&lt;br /&gt;
                &amp;lt;lastmodified&amp;gt;&lt;br /&gt;
                    &amp;lt;date&amp;gt;2006-01-04&amp;lt;/date&amp;gt;&lt;br /&gt;
                    &amp;lt;time&amp;gt;19:48:24&amp;lt;/time&amp;gt;&lt;br /&gt;
                &amp;lt;/lastmodified&amp;gt;&lt;br /&gt;
                &amp;lt;count&amp;gt;5&amp;lt;/count&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showInfo&amp;gt;&lt;br /&gt;
            &amp;lt;dataset thredds_container=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;nc/test/TestPatFlt.nc&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;size&amp;gt;1048884&amp;lt;/size&amp;gt;&lt;br /&gt;
                &amp;lt;lastmodified&amp;gt;&lt;br /&gt;
                    &amp;lt;date&amp;gt;2005-09-29&amp;lt;/date&amp;gt;&lt;br /&gt;
                    &amp;lt;time&amp;gt;16:31:27&amp;lt;/time&amp;gt;&lt;br /&gt;
                &amp;lt;/lastmodified&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Proposed Response =====&lt;br /&gt;
    &amp;lt;dataset name=&amp;quot;testfile.nc&amp;quot; size=&amp;quot;43392&amp;quot; lastModified=&amp;quot;YYYY-MM-DDThh:mm:ss&amp;quot; catalog=&amp;quot;catalog&amp;quot; &lt;br /&gt;
                     node=&amp;quot;true|false&amp;quot; count=&amp;quot;#ofChildDatSets&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
    &amp;lt;/dataset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== showServices ===&lt;br /&gt;
&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showServiceDescriptions /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showServices&amp;gt;&lt;br /&gt;
            &amp;lt;service name=&amp;quot;DAP&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;command name=&amp;quot;ddx&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;description&amp;gt;Words For Humans&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;/command&amp;gt;&lt;br /&gt;
                &amp;lt;command name=&amp;quot;dds&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;description&amp;gt;Words For Humans&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;/command&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/showServices&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=BES_XML_Commands&amp;diff=6970</id>
		<title>BES XML Commands</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=BES_XML_Commands&amp;diff=6970"/>
		<updated>2012-01-20T20:18:34Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Development|BES XML Commands]][[Category:Hyrax Development|BES XML Commands]]&lt;br /&gt;
== BES XML Command syntax. ==&lt;br /&gt;
&lt;br /&gt;
The BES will accept commands encoded in XML documents (BES XML Commands), and provide responses in kind. Some requests specifically indicate a non XML response (such as a DAP2 binary response) in which case the response will be as requested. &lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
All elements mentioned in the following are in the http://xml.opendap.org/ns/bes/1.0# namespace unless otherwise noted.&lt;br /&gt;
&lt;br /&gt;
# Each request document &#039;&#039;&#039;must&#039;&#039;&#039; have a &amp;lt;request&amp;gt; root element.&lt;br /&gt;
# Each &amp;lt;request&amp;gt; &#039;&#039;&#039;must&#039;&#039;&#039; contain one or more BesCommand elements. &lt;br /&gt;
# A &amp;lt;request&amp;gt; &#039;&#039;&#039;may&#039;&#039;&#039; contain multiple BesCommands as long as zero more of those commands returns a response.&amp;lt;br&amp;gt;Examples (expand with abbreviated xml):&lt;br /&gt;
#*  we can do a set context, set container, define and a get das in the same request document as only the get das request command returns a response.&lt;br /&gt;
#*  There can not be two show commands within the request document, or a show and a get, or multiple gets. &lt;br /&gt;
#. Each request element &#039;&#039;&#039;must&#039;&#039;&#039; have an attribute &#039;&#039;reqID&#039;&#039; the value of which will be used in the response document. There is no guarantee that the value of &#039;&#039;reqID&#039;&#039; be unique within the operational domain of the BES. (It might be unique within the software of the requesting client, but that&#039;s of no concern to the BES).&lt;br /&gt;
&lt;br /&gt;
Question: Do we may want to allow reqID to be an optional attribute for each individual command. If present it would (&#039;&#039;can it?&#039;&#039;)  be preserved in the response (or error) object as appropriate.&lt;br /&gt;
&lt;br /&gt;
When we (eventually) develop a schema for this we can use it to &amp;quot;enforce&amp;quot; these restrictions.&lt;br /&gt;
&lt;br /&gt;
=== Responses ===&lt;br /&gt;
&lt;br /&gt;
Need a description and such here.&lt;br /&gt;
&lt;br /&gt;
== BES Command Set ==&lt;br /&gt;
&lt;br /&gt;
=== setContext ===&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
 &amp;lt;setContext  name=&amp;quot;contextName&amp;gt;Value&amp;lt;/setContext&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes the state of the BES for the current client connection. This allows the client to ask the BES to utilize various response formats.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;name&#039;&#039; attribute====&lt;br /&gt;
Identifies which context value is being set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dap_format&#039;&#039;&#039; context&lt;br /&gt;
: Value:&lt;br /&gt;
:* &#039;&#039;Major.Minor&#039;&#039;  where both &#039;&#039;Major&#039;&#039; and &#039;&#039;Minor&#039;&#039; are integer values.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;errors&#039;&#039;&#039; context&lt;br /&gt;
: Current Values:&lt;br /&gt;
:* &#039;&#039;xml&#039;&#039; -&lt;br /&gt;
:* &#039;&#039;dap2&#039;&#039; - When error context is set to &#039;&#039;dap2&#039;&#039; then all errors will returned as DAP2 error objects (definitely &#039;&#039;&#039;not&#039;&#039;&#039; XML).&lt;br /&gt;
&lt;br /&gt;
: Proposed Values:&lt;br /&gt;
:* &#039;&#039;dap&#039;&#039; - When error context is set to &#039;&#039;dap&#039;&#039; then all errors will returned as DAP error objects. The version of the DAP that error must conform to is controlled by the dap_format context. It is possible (likely) that in the future DAP errors will be XML documents.&lt;br /&gt;
:* &#039;&#039;bes&#039;&#039; - Returns a BES Error response:&lt;br /&gt;
 &amp;lt;BES&amp;gt;&lt;br /&gt;
     &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
         &amp;lt;BESError&amp;gt;&lt;br /&gt;
             &amp;lt;Type&amp;gt;3&amp;lt;/Type&amp;gt;&lt;br /&gt;
             &amp;lt;Message&amp;gt;Unable to find command for showVersions&amp;lt;/Message&amp;gt;&lt;br /&gt;
             &amp;lt;Administrator&amp;gt;ndp@opendap.org&amp;lt;/Administrator&amp;gt;&lt;br /&gt;
         &amp;lt;/BESError&amp;gt;&lt;br /&gt;
     &amp;lt;/response&amp;gt;&lt;br /&gt;
 &amp;lt;/BES&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContext name=&amp;quot;errors&amp;quot;&amp;gt;dap2&amp;lt;/setContext&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== setContainer ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContainer name=&amp;quot;c&amp;quot; space=&amp;quot;catalog&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/setContainer&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== define ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;define name=&amp;quot;d&amp;quot; space=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;constraint&amp;gt;a valid default ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c1&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c2&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;aggregate handler=&amp;quot;someHandler&amp;quot; cmd=&amp;quot;someCommand&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;/define&amp;gt; &lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== get ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This needs to be expanded to illuminate the missing details from the previoius command set:&#039;&#039;&#039;&lt;br /&gt;
* get &#039;type&#039;  for &#039;definition&#039; using &#039;URL&#039;;&lt;br /&gt;
&lt;br /&gt;
Type:&lt;br /&gt;
* &#039;&#039;&#039;dds&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;das&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;dods&#039;&#039;&#039; - &lt;br /&gt;
* &#039;&#039;&#039;stream&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;ascii&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;html_form&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;info_page&#039;&#039;&#039; -&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;get type=&amp;quot;data_product&amp;quot; definition=&amp;quot;def_name&amp;quot; returnAs=&amp;quot;name&amp;quot; url=&amp;quot;url&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Explain about DAP2 responses etc...&lt;br /&gt;
&lt;br /&gt;
===Multiple command example ===&lt;br /&gt;
Multiple command transaction resulting in a DDS (non XML DAP2) response:&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;setContext name=&amp;quot;error&amp;quot;&amp;gt;dap2&amp;lt;/setContext&amp;gt;&lt;br /&gt;
        &amp;lt;setContainer name=&amp;quot;c&amp;quot; space=&amp;quot;catalog&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/setContainer&amp;gt;&lt;br /&gt;
         &amp;lt;define name=&amp;quot;d&amp;quot; space=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
             &amp;lt;container name=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
                 &amp;lt;constraint&amp;gt;a valid ce&amp;lt;/constraint&amp;gt;&lt;br /&gt;
                &amp;lt;attributes&amp;gt;list of attributes&amp;lt;/attributes&amp;gt;&lt;br /&gt;
             &amp;lt;/container&amp;gt;&lt;br /&gt;
             &amp;lt;aggregate handler=&amp;quot;someHandler&amp;quot; cmd=&amp;quot;someCommand&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;/define&amp;gt; &lt;br /&gt;
         &amp;lt;get  type=&amp;quot;dds&amp;quot; definition=&amp;quot;d&amp;quot; returnAs=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Show version ===&lt;br /&gt;
&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showVersion /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
&lt;br /&gt;
Current:&lt;br /&gt;
    &amp;lt;showVersion&amp;gt;&lt;br /&gt;
        &amp;lt;response&amp;gt;&lt;br /&gt;
            &amp;lt;DAP&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.2&amp;lt;/version&amp;gt;&lt;br /&gt;
            &amp;lt;/DAP&amp;gt;&lt;br /&gt;
            &amp;lt;BES&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;libdap&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;3.5.3&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;bes&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;3.1.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
            &amp;lt;/BES&amp;gt;&lt;br /&gt;
            &amp;lt;Handlers&amp;gt;&lt;br /&gt;
                &amp;lt;lib&amp;gt;&lt;br /&gt;
                    &amp;lt;name&amp;gt;libnc-dods&amp;lt;/name&amp;gt;&lt;br /&gt;
                    &amp;lt;version&amp;gt;0.9&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;/lib&amp;gt;&lt;br /&gt;
            &amp;lt;/Handlers&amp;gt;&lt;br /&gt;
         &amp;lt;/response&amp;gt;&lt;br /&gt;
    &amp;lt;/showVersion&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proposed:&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showVersion&amp;gt;&lt;br /&gt;
            &amp;lt;service name=&amp;quot;dap&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.0&amp;lt;/version&amp;gt;&lt;br /&gt;
                &amp;lt;version&amp;gt;3.2&amp;lt;/version&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;library name=&amp;quot;bes&amp;quot;&amp;gt;3.5.3&amp;lt;/library&amp;gt;&lt;br /&gt;
            &amp;lt;library name=&amp;quot;libdap&amp;quot;&amp;gt;3.10.0&amp;lt;/library&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;netcdf_handler&amp;quot;&amp;gt;3.7.9&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;freeform_handler&amp;quot;&amp;gt;3.7.9&amp;lt;/module&amp;gt;&lt;br /&gt;
        &amp;lt;/showVersion&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Show help ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showHelp /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showHelp&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;bes&amp;quot; version=&amp;quot;3.6.2&amp;quot;&amp;gt;&amp;lt;html xmlns= http://www.w3.org/1999/xhtml &amp;gt;Help Information&amp;lt;/html&amp;gt;&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;dap&amp;quot; version=&amp;quot;3.10.1&amp;quot;&amp;gt;Help Information&amp;lt;/module&amp;gt;&lt;br /&gt;
            &amp;lt;module name=&amp;quot;netcdf_handler&amp;quot; version=&amp;quot;3.7.9&amp;quot;&amp;gt;Help Information including supported responses&amp;lt;/module&amp;gt;&lt;br /&gt;
        &amp;lt;/showHelp&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showProcess ===&lt;br /&gt;
&lt;br /&gt;
This is available only if the BES is compiled in developer mode. A &#039;production&#039; BES does not support this command. &lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showProcess /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showProcess&amp;gt;&lt;br /&gt;
            &amp;lt;process pid=&amp;quot;10831&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/showProcess&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showConfig ===&lt;br /&gt;
This is available only if the BES is compiled in developer mode. A &#039;production&#039; BES does not support this command.&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showConfig /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showConfig&amp;gt;&lt;br /&gt;
            &amp;lt;file&amp;gt;/Users/pwest/opendap/chunking/etc/bes/bes.conf&amp;lt;/file&amp;gt;&lt;br /&gt;
            &amp;lt;key name=&amp;quot;BES.CacheDir&amp;quot;&amp;gt;/tmp&amp;lt;/key&amp;gt;&lt;br /&gt;
            ....&lt;br /&gt;
        &amp;lt;/showConfig&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showStatus ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showStatus /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showStatus&amp;gt;&lt;br /&gt;
            &amp;lt;status&amp;gt;MST Thu Dec 18 11:51:36 2008&amp;lt;/status&amp;gt;&lt;br /&gt;
        &amp;lt;/showStatus&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showContainers ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showContainers /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showContainers&amp;gt;&lt;br /&gt;
            &amp;lt;store name=&amp;quot;volatile&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;container name=&amp;quot;c&amp;quot; type=&amp;quot;nc&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/container&amp;gt;&lt;br /&gt;
            &amp;lt;/store&amp;gt;&lt;br /&gt;
        &amp;lt;/showContainers&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== deleteContainer(s), deleteDefinition(s) ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;deleteContainers store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteContainer name=&amp;quot;containerName&amp;quot; store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteDefinitions store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
         &amp;lt;deleteDefinition name=&amp;quot;defName&amp;quot; store=&amp;quot;storeName&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
&lt;br /&gt;
Normally no response. May return a BESError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showDefinitions ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showDefinitions /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response  reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showDefinitions&amp;gt;&lt;br /&gt;
            &amp;lt;store name=&amp;quot;volatile&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;definition name=&amp;quot;d&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;container name=&amp;quot;c&amp;quot; type=&amp;quot;nc&amp;quot; constraint=&amp;quot;&amp;quot;&amp;gt;data/nc/fnoc1.nc&amp;lt;/container&amp;gt;&lt;br /&gt;
                    &amp;lt;aggregation handler=&amp;quot;agg&amp;quot;&amp;gt;aggregation_command&amp;lt;/aggregation&amp;gt;&lt;br /&gt;
                &amp;lt;/definition&amp;gt;&lt;br /&gt;
            &amp;lt;/store&amp;gt;&lt;br /&gt;
        &amp;lt;/showDefinitions&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showContext ===&lt;br /&gt;
===== Request Example =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showContext /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
===== Response Example =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
   &amp;lt;response reqID =&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;showContext&amp;gt;&lt;br /&gt;
             &amp;lt;context name=&amp;quot;name1&amp;quot;&amp;gt;value1&amp;lt;/context&amp;gt;&lt;br /&gt;
             &amp;lt;context name=&amp;quot;name2&amp;quot;&amp;gt;value2&amp;lt;/context&amp;gt;&lt;br /&gt;
              ...&lt;br /&gt;
             &amp;lt;context name=&amp;quot;namen&amp;quot;&amp;gt;valuen&amp;lt;/context&amp;gt;&lt;br /&gt;
        &amp;lt;showContext&amp;gt;&lt;br /&gt;
   &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showCatalog ===&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showCatalog node=&amp;quot;[catalog:]nodeName&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The catalog name is optional, defaulting to the default catalog specified in the BES configuration file. So if you had a catalog named rdh you could specify node=&amp;quot;rdh:/&amp;quot; and it would give you the root node for the rdh catalog.&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
   &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
            &amp;lt;dataset name=&amp;quot;nc/test&amp;quot; size=&amp;quot;408&amp;quot; lastModified=&amp;quot;2006-01-04T19:48:24&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; count=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;test.nc&amp;quot; size=&amp;quot;12148&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;testfile.nc&amp;quot; size=&amp;quot;43392&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPat.nc&amp;quot; size=&amp;quot;262452&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:27&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPatDbl.nc&amp;quot; size=&amp;quot;2097464&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:28&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
                &amp;lt;dataset name=&amp;quot;TestPatFlt.nc&amp;quot; size=&amp;quot;1048884&amp;quot; lastModified=&amp;quot;2005-09-29T16:31:27&amp;quot; catalog=&amp;quot;catalog&amp;quot; node=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
                &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== showInfo ===&lt;br /&gt;
&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showInfo node=&amp;quot;nodeName /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Current Response =====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showInfo&amp;gt;&lt;br /&gt;
            &amp;lt;dataset thredds_container=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;nc/test&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;size&amp;gt;408&amp;lt;/size&amp;gt;&lt;br /&gt;
                &amp;lt;lastmodified&amp;gt;&lt;br /&gt;
                    &amp;lt;date&amp;gt;2006-01-04&amp;lt;/date&amp;gt;&lt;br /&gt;
                    &amp;lt;time&amp;gt;19:48:24&amp;lt;/time&amp;gt;&lt;br /&gt;
                &amp;lt;/lastmodified&amp;gt;&lt;br /&gt;
                &amp;lt;count&amp;gt;5&amp;lt;/count&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showInfo&amp;gt;&lt;br /&gt;
            &amp;lt;dataset thredds_container=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;name&amp;gt;nc/test/TestPatFlt.nc&amp;lt;/name&amp;gt;&lt;br /&gt;
                &amp;lt;size&amp;gt;1048884&amp;lt;/size&amp;gt;&lt;br /&gt;
                &amp;lt;lastmodified&amp;gt;&lt;br /&gt;
                    &amp;lt;date&amp;gt;2005-09-29&amp;lt;/date&amp;gt;&lt;br /&gt;
                    &amp;lt;time&amp;gt;16:31:27&amp;lt;/time&amp;gt;&lt;br /&gt;
                &amp;lt;/lastmodified&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
        &amp;lt;/showInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Proposed Response =====&lt;br /&gt;
    &amp;lt;dataset name=&amp;quot;testfile.nc&amp;quot; size=&amp;quot;43392&amp;quot; lastModified=&amp;quot;YYYY-MM-DDThh:mm:ss&amp;quot; catalog=&amp;quot;catalog&amp;quot; &lt;br /&gt;
                     node=&amp;quot;true|false&amp;quot; count=&amp;quot;#ofChildDatSets&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;service&amp;gt;DAP&amp;lt;/service&amp;gt;&lt;br /&gt;
    &amp;lt;/dataset&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== showServices ===&lt;br /&gt;
&lt;br /&gt;
===== Request =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;request reqID=&amp;quot;####&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;showServices /&amp;gt;&lt;br /&gt;
    &amp;lt;/request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Response =====&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
    &amp;lt;response reqID=&amp;quot;####&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;showServices&amp;gt;&lt;br /&gt;
            &amp;lt;service name=&amp;quot;DAP&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;command name=&amp;quot;ddx&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;description&amp;gt;Words For Humans&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;/command&amp;gt;&lt;br /&gt;
                &amp;lt;command name=&amp;quot;dds&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;description&amp;gt;Words For Humans&amp;lt;/description&amp;gt;&lt;br /&gt;
                &amp;lt;/command&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/showServices&amp;gt;&lt;br /&gt;
    &amp;lt;/response&amp;gt;&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_-_BES_Build_Instructions&amp;diff=6496</id>
		<title>Hyrax - BES Build Instructions</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_-_BES_Build_Instructions&amp;diff=6496"/>
		<updated>2011-06-09T19:56:32Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How to build the BES from either a source code distribution, or directly from our [http://subversion.tigris.org/ Subversion] repository. These instructions are for the latest release of the BES, which is version 3.9.0 used for Hyrax 1.6.2.&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
=Dependancies=&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/gcc.html GCC, the GNU compiler]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: gcc 4.x&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: gcc 4.2.1&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using gcc 4.0.1 on Intel OS-X. The default compiler was used, version 4.0.1. You can also obtain the compiler using such tools as [http://darwinports.opendarwin.org/ DarwinPorts] on OS-X, package managers on Unix-like machines.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/autoconf.html autoconf]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: autoconf 2.61&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: autoconf 2.65&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using autoconf 2.63 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/automake.html automake]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: automake 1.10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: automake 1.11.1&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using automake 1.11 on Intel OS-X. The reason for requiring 1.10 is that there is an issue with building some of the configuration and tests for the BES.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/libtool.html libtool]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: libtool 1.5.18&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: libtool 2.2.6&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using libtool 2.2.6 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/readline.html readline]==&lt;br /&gt;
&lt;br /&gt;
This library allows users to edit command lines as they are being typed in. This is used by the BES command line application bescmdln in the interactive mode (the default mode).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: readline 4.3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: readline 4.3&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using readline 4.3 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://xmlsoft.org/ libxml2]==&lt;br /&gt;
&lt;br /&gt;
Libxml2 is the XML C parser and toolkit developed for the Gnome project (but usable outside of the Gnome platform), it is free software available under the MIT License. This is used by the BES to parse incoming request documents and to create xml response documents.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: readline 2.6.16&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: readline 2.7.3&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using libxml2 2.7.3 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://opendap.org/download/hyrax.html libdap]==&lt;br /&gt;
&lt;br /&gt;
The BES does not specifically require the libdap libraries. But, to get Dap 2 responses you must have libdap. With libdap you get the DAS, DDS, DataDDS, DDX responses as well as catalog support for THREDDS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: libdap 3.11.0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: libdap 3.11.0&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using libdap 3.9.2 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
=Optional Dependencies=&lt;br /&gt;
&lt;br /&gt;
==[http://www.openssl.org/ openssl]==&lt;br /&gt;
&lt;br /&gt;
Openssl is used for a secure server. If you specify BES.ServerSecure=yes (default is no) in the [[Hyrax - BES Configuration|BES Configuration]] file then a client will be required to authenticate with the BES.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: openssl 0.9.7&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: openssl 0.9.7&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using openssl 0.9.7i on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==[http://www.gnu.org/software/dejagnu/ dejagnu]==&lt;br /&gt;
&lt;br /&gt;
In order to run many of the tests in the BES you will need dejagnu. We are in the process of converting our tests to use autotest, which will remove this dependency. If you wish to run &#039;make check&#039;, then you will need dejagnu.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: dejagnu 1.4.4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: dejagnu 1.4.4&lt;br /&gt;
&lt;br /&gt;
This BES software was tested using dejagnu 1.4.4 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==[http://sourceforge.net/projects/cppunit/ cppunit]==&lt;br /&gt;
&lt;br /&gt;
In order to run many of the tests in the BES you will need cppunit. If you wish to run all of the tests using &#039;make check&#039;, then you will need cppunit, although it is not required.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: cppunit 1.12.1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: cppunit 1.12.1&lt;br /&gt;
&lt;br /&gt;
This BES software was tested using cppunit 1.12.1 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Getting The Source Code=&lt;br /&gt;
&lt;br /&gt;
==As A Source Code Distribution==&lt;br /&gt;
The most recent source code distribution will available at both the [http://opendap.org/download/hyrax.html Hyrax download page] and the [http://opendap.org/download/BES.html BES download page]. If you are attempting to build the BES in conjunction with the OLFS  - for example you are building Hyrax - then get both the source distributions from the same Hyrax release on the  [http://opendap.org/download/hyrax.html Hyrax download page], other wise you may experience compatibility issues. &lt;br /&gt;
&lt;br /&gt;
Go get the source code bundle. It will be a file named something like bes-&#039;&#039;x.x.x&#039;&#039;.tar.gz&lt;br /&gt;
&lt;br /&gt;
Unpack the bundle using the command:&lt;br /&gt;
&lt;br /&gt;
 tar zxvf bes-&#039;&#039;x.x.x&#039;&#039;.tar.gz&lt;br /&gt;
&lt;br /&gt;
This will unpack the source code distribution into a directory called &#039;&#039;bes.x.x.x&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==From Subversion==&lt;br /&gt;
* Check out the software for the BES from our [http://subversion.tigris.org/ Subversion] repository located at http://scm.opendap.org/svn/trunk/bes:&lt;br /&gt;
 svn co http://scm.opendap.org/svn/trunk/bes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Building the code=&lt;br /&gt;
Building the BES software should be very simple.&lt;br /&gt;
&lt;br /&gt;
# Enter the top level directory of the bes source code tree (&#039;&#039;bes&#039;&#039; if you got the source code from Subversion, &#039;&#039;bes-.x.x.x&#039;&#039; if you got it from a distribution bundle.)&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# If you checked out the latest from the Subversion repository, run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;autoreconf --force&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will create the configuration scripts&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;./configure&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will run the configuration script to make sure that you have all the required dependencies met and will also generate Makefiles and other configuration files needed to build the BES and to run the BES.&amp;lt;br /&amp;gt;You may want to change some of the configuration options. Please refer to the README and INSTALL files in the top level directory for configuration options. You can also run &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;./configure --help&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; to get more options. The most commonly used option is the --prefix=&amp;lt;directory&amp;gt; option, which tells the build to install the bes into the specified directory. The default directory is /usr/local.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will build the BES code&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;make check&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will test to make sure that you have a successful build of the BES.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Installing the BES from source code=&lt;br /&gt;
Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will install the BES into /usr/local if no --prefix was specified on the configure line, or in the specified directory if you did use the --prefix option.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure that the BES bin directory is in your PATH. For example, if you installed the BES in the default location, the directory /usr/local/bin should be on your path. If you installed it in a non-standard location, then you will need to update your PATH environment  variable. For example, if you installed the bes into /usr/local/bes, then make sure that /usr/local/bes/bin is on your PATH.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Testing the install=&lt;br /&gt;
Try running the following to make sure that the install was successful.&lt;br /&gt;
&lt;br /&gt;
 bes-config --version&lt;br /&gt;
&lt;br /&gt;
You should see the version of the bes that you just installed.&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s try to run the BES. Try typing the following on the command line:&lt;br /&gt;
&lt;br /&gt;
 besctl start&lt;br /&gt;
&lt;br /&gt;
You should see something like this:&lt;br /&gt;
&lt;br /&gt;
 BES install directory: /usr/local&lt;br /&gt;
 BES configuration file: /usr/local/etc/bes/bes.conf&lt;br /&gt;
 Starting the BES daemon&lt;br /&gt;
 Unix socket name: /tmp/opendap.socket&lt;br /&gt;
 PID: 10491 UID: 6779&lt;br /&gt;
&lt;br /&gt;
And then you should be able to run the bescmdln application. After running it you should see a prompt. Type in the command &amp;lt;code&amp;gt;show version;&amp;lt;/code&amp;gt;, and then type in the command &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bescmdln -h localhost -p 10002&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Type &#039;exit&#039; to exit the command line client and &#039;help&#039; or &#039;?&#039; to display the help screen&lt;br /&gt;
&lt;br /&gt;
BESClient&amp;amp;gt; show version;&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;showVersion&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;response&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;BES&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;lib&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;name&amp;amp;gt;bes&amp;amp;lt;/name&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;3.4.1&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;/lib&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/BES&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;Handlers&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;DAP&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;2.0&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;3.0&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;3.2&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;/DAP&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/Handlers&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;/response&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/showVersion&amp;amp;gt;&lt;br /&gt;
BESClient&amp;amp;gt; exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6345</id>
		<title>Hyrax Catalogs</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6345"/>
		<updated>2011-04-21T14:14:40Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* Questions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hyrax/BES catalog integration issues ==&lt;br /&gt;
&lt;br /&gt;
Up until now Hyrax has been relying on only the default catalog in the BES. The default catalog is named &#039;&#039;&#039;catalog&#039;&#039;&#039; (Unfortunately for those of us reading and writing about it the word is both a proper noun and a regular noun in this context - confusing to say the least) The BES supports any number of other catalogs, each possibly representing a different repository or collection of data. For example, one catalog could be the jgofs repository, another catalog a basic directory listing of data files (default catalog does this), another could represent the CEDAR Catalog of data (based on a relational database).&lt;br /&gt;
&lt;br /&gt;
Unfortunately when the OLFS was developed it was written to rely on only the default BES catalog. This manifests in the Hyrax URLs as follows:&lt;br /&gt;
&lt;br /&gt;
The catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/&amp;lt;/nowiki&amp;gt;&#039;&#039;  refers to the top level in the default BES catalog. Accessing this URL issues the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
Notice that:&lt;br /&gt;
* The bes:showCatalog element does not specify a particular catalog, thus it implicitly specifies the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039;.&lt;br /&gt;
* The catalog URL has been reduced to a BES resource ID of &#039;&#039;/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Which is equivalent to the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;catalog:/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the OLFS had been written to support the implicit catalog organization in the BES then the correct catalog URL would have been:&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/catalog/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Changing this presents backward compatibility issues for Hyrax in that it is important that Hyrax not change the access URL&#039;s to existing data sets, catalogs, or inventories.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
The following is the agreed upon solution by James Gallagher, Nathan Potter, and Patrick West on April 20, 2011.&lt;br /&gt;
&lt;br /&gt;
The key is to maintain backward compatibility.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s say we have three catalogs.&lt;br /&gt;
&lt;br /&gt;
# The default catalog named &#039;&#039;&#039;catalog&#039;&#039;&#039;&lt;br /&gt;
# A jgofs catalog named &#039;&#039;&#039;jgofs&#039;&#039;&#039;&lt;br /&gt;
# A netcdf catalog named &#039;&#039;&#039;nc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Under the default catalog (which say points to $prefix/share/hyrax) has a single subdirectory called &#039;&#039;&#039;data&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would have the result:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;response reqID=&amp;quot;some_unique_value&amp;quot; xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset count=&amp;quot;3&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;6&amp;quot; lastModified=&amp;quot;2010-05-13T04:35:17&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;2&amp;quot; lastModified=&amp;quot;2011-04-18T18:42:44&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;9&amp;quot; lastModified=&amp;quot;2011-04-20T21:10:51&amp;quot; name=&amp;quot;nc&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;374&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Points to bring out:&lt;br /&gt;
* The default catalog root is returned as part of the result. The data directory has 6 elements under it (let&#039;s say), it is a node (has sub directories)&lt;br /&gt;
* The other two catalogs (jgofs and nc) are both listed here as part of the root of the default catalog&lt;br /&gt;
&lt;br /&gt;
A subsequent request to show the data node would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;data&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Whereas a request to show the root node of the jgofs catalog would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===So what about name clashes===&lt;br /&gt;
The default catalog always wins. So, if the root of the default catalog, in this case, had a directory called jgofs, then the request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would return the contents of the jgofs directory in the default catalog, not the root node of the jgofs catalog.&lt;br /&gt;
&lt;br /&gt;
===What does the OLFS do differently===&lt;br /&gt;
* Nothing&lt;br /&gt;
&lt;br /&gt;
===What does the BES do differently===&lt;br /&gt;
* Drop the node=&amp;quot;catalog:dir&amp;quot; notation and use node=&amp;quot;catalog/dir&amp;quot; or, in the case of the default catalog node=&amp;quot;dir&amp;quot;&lt;br /&gt;
* If the first part of the node (before a slash, or whole thing if no slash) matches the name of a catalog, then use the catalog&lt;br /&gt;
* Unless where the name matches an element in the default catalog root, at which point the default catalog wins&lt;br /&gt;
* in a setContainer request, store/space=&amp;quot;catalog&amp;quot; still needs to be used&lt;br /&gt;
** the value of the setContainer element needs to also be parsed to see if there is a catalog name at the front&lt;br /&gt;
&lt;br /&gt;
===What does the Patrick do differently===&lt;br /&gt;
* Currently, in doing ncml and jgofs work, modified the request to include a catalog=&amp;quot;&amp;quot; attribute in a showCatalog request&lt;br /&gt;
** remove this attribute&lt;br /&gt;
* Somewhere (perhaps in the XML request parsing) grab the node attribute in showCatalog, grab the first part (if there is one), and see if a catalog by that name exists&lt;br /&gt;
** also need to see if it&#039;s something in the root of the default catalog (SUCKS)&lt;br /&gt;
* When showing the root, instead of displaying the names of the catalogs, display the root of the default catalog, and the names of the other catalogs&lt;br /&gt;
** if there&#039;s a duplicate between the root of the default and a catalog name, leave it in. Make the admins change this&lt;br /&gt;
* When requesting a node, if the node is in the root of the default catalog AND there&#039;s a catalog with that name, then log an error message using BESLog&lt;br /&gt;
* Might want to move the catalog stuff into the bes_dispatch library instead of the bes_dap library&lt;br /&gt;
* In the setContainer request, look at the value of the element (the node) and see if it starts with a catalog name (if store/space=&amp;quot;catalog&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===Questions===&lt;br /&gt;
* Should the request for the root node include both the jgofs directory and the jgofs catalog? Would be confusing to user, so would say no. But might be a good thing if users send messages to the data admins to point this out.&lt;br /&gt;
** [&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;JG: Can you remind me what the JGOFS directory holds - the catalog is the collection of served data sets, yes?&amp;lt;/font&amp;gt;]&lt;br /&gt;
** This is just an example. Change the name from jgofs to foobar. What do I do if there&#039;s a catalog names foobar and a directory in the root of the default catalog named foobar? In the response to a showCatalog, do I include them both? I say yes.&lt;br /&gt;
** As for your jgofs question, directories are shown and can be traversed, just like the default catalog. But no files are listed. The jgofs objects are listed in the .remoteobjects file, if there is one in that directory.&lt;br /&gt;
* &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;JG: If we do this, will the SQL handler work? Almost? (and we can change the color or these questions once you all see them... I don&#039;t wan to make it all ugly.&amp;lt;/font&amp;gt;&lt;br /&gt;
** I&#039;m afraid I have not yet had time to look at the SQL handler, so am not sure.&lt;br /&gt;
&lt;br /&gt;
== Old Notes with Comments ==&lt;br /&gt;
&lt;br /&gt;
=== Possible Solutions ===&lt;br /&gt;
In order to acheive this compatibility the following schemes have been proposed:&lt;br /&gt;
&lt;br /&gt;
==== OLFS DispatchHandler for each catalog ====&lt;br /&gt;
&lt;br /&gt;
For each catalog that gets added to the BES a new OLFS DispatchHandler is written. This really would entail making a  copy of all the classes in the java package &#039;&#039;opendap.bes&#039;&#039; and modifying them slightly to allow for the different catalog names. It&#039;s a crummy solution because it grows the code base in a crazy way - lot&#039;s of replicate functionality that becomes a real problem to maintain as changes to the BES API will have to be implemented in multiple places in the  OLFS code base. This, I predict won&#039;t happen and things will constantly broken. &lt;br /&gt;
&lt;br /&gt;
It also means that every time someone writes a BES module that provides a complete DAP services stack and a new catalog that Hyrax will be unable to take advantage of it without having a java program written to support it. That&#039;s a bloody waste of resources.&lt;br /&gt;
&lt;br /&gt;
==== BES interprets resource ID&#039;s ====&lt;br /&gt;
&lt;br /&gt;
In lieu of specifying the catalog name explicitly in the various BES requests, the BES will look at the first part of the resource ID and compare it to its list of catalogs. If the first part of the resource ID matches a catalog name then the BES will pass the request to that catalog. Otherwise it will pass the request to the default catalog.&lt;br /&gt;
&lt;br /&gt;
===== Keep existing URLs working =====&lt;br /&gt;
&lt;br /&gt;
For example, in the catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt; http://localhost:8080/opendap/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
Would produce a resource ID of &#039;&#039;/data/nc&#039;&#039; Unless the BES actually contains a catalog named &#039;&#039;data&#039;&#039; then a catalog request for the resource ID &#039;&#039;/data/nc&#039;&#039; will be routed to the default catalog. &lt;br /&gt;
&lt;br /&gt;
===== Make the top level catalog include all of the catalogs =====&lt;br /&gt;
&lt;br /&gt;
When a request is made for the default top-level catalog:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
The BES will return a catalog containing an merging of the catalogs by name (as catalog &#039;&#039;nodes&#039;&#039;) and a listing of the top-level of the default catalog. For example if the BES has the &#039;&#039;rdh&#039;&#039;, &#039;&#039;cedar&#039;&#039;, and &#039;&#039;jgofs&#039;&#039; catalogs installed, and the default catalog contains data sets, regular files, and nodes the response might look like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset &amp;lt;font color=red&amp;gt;catalog=&amp;quot;catalog&amp;quot; (What would this be in this example?)&amp;lt;/font&amp;gt;  count=&amp;quot;13&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;578&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-11-19T20:56:15&amp;quot; name=&amp;quot;Test&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;918&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:34&amp;quot; name=&amp;quot;Trunk Monkey&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;238&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:31:56&amp;quot; name=&amp;quot;bears.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;852&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-11T16:27:59&amp;quot; name=&amp;quot;coverage&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-01-30T20:10:16&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;510&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-25T17:58:54&amp;quot; name=&amp;quot;fanfang&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;306&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-24T19:01:22&amp;quot; name=&amp;quot;fanfang.tar.gz&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;9055684&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-05T19:23:30&amp;quot; name=&amp;quot;namespaceAttributesTest.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;3396&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-02-12T21:25:11&amp;quot; name=&amp;quot;netcdf&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-17T21:45:19&amp;quot; name=&amp;quot;robots.txt&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;25&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;sst&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-30T21:47:58&amp;quot; name=&amp;quot;thredds&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;wcs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is a conflict between catalog name(s) and holdings in the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039; the offending catalog name(s) can be remapped using the BES configuration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GAH!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I still think that this is totally busted and I don&#039;t see how to fix it with out simply rewriting the OLFS to correctly work with the different catalogs in the BES which WILL change all of the URL&#039;s. The fact is that we (well ok, I) didn&#039;t get it right. And this is a pretty intractable problem otherwise. Fixing it in one of these half-baked ways just begs for the whole thing to come crashing down around us, not to mention the burden of creating an even MORE COMPLEX install and configuration procedure for our users. Maybe one of you can see a way out of this box... [[User:Ndp|ndp]] 13:35, 7 May 2009 (PDT)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Patrick seez ===&lt;br /&gt;
&lt;br /&gt;
==== In the BES ====&lt;br /&gt;
&lt;br /&gt;
instead of looking for the catalog as part of the node name, look for an attribute of the showCatalog element called catalog. If not present and ( the node attribute is not present or is empty or is slash ) then I return the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
If not present and the node is present and the node is not empty and the node is not slash then I default the catalog name to the default catalog specified in the BES configuration file.&lt;br /&gt;
&lt;br /&gt;
If present then I use that catalog name.&lt;br /&gt;
&lt;br /&gt;
In the response for &amp;lt;showCatalog /&amp;gt; I give you the list of the catalogs where the default catalog is marked with default=&amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Or perhaps there&#039;s a new command &amp;lt;showCatalogs /&amp;gt; that gives the list of catalogs?&lt;br /&gt;
&lt;br /&gt;
==== In the OLFS ====&lt;br /&gt;
&lt;br /&gt;
When the OLFS starts up make a &amp;lt;showCatalog /&amp;gt; request to get the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/ then you show them the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/catalogname then you show them the root node of that catalog&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/ (no catalog name is present) then this is an old URL, you pass this off to the BES without a catalog name, and the BES will use the default catalog.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/fnoc1.nc.das (no catalog name is present) then, again this is an old URL. Given the list of catalogs in the beginning you use the default catalog name.&lt;br /&gt;
&lt;br /&gt;
How can you tell if the catalog name is not present ... when the OLFS started up you asked for the list of catalogs. If data is not the name of a catalog then you know we are using the default catalog.&lt;br /&gt;
&lt;br /&gt;
Or ... if possible ... redirect the old URLs to one with the catalog name. Not sure if you can do this. So, if someone browses to www.example.com/opendap/data/nc then you redirect that to www.example.com/opendap/catalog/data/nc, and the same for www.example.com/opendap/data/nc/fnoc1.nc.das you redirect to www.example.com/opendap/catalog/data/nc/fnoc1.nc&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
I don&#039;t like the idea of when asked for the root node, if no catalog is specified then I give you the root for the default catalog and the names of the other catalogs. I think that if you ask for no catalog and no node then you should get the list of catalogs, including the default.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;showCatalog /&amp;gt;&lt;br /&gt;
  &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset catalog=&amp;quot;root&amp;quot;  count=&amp;quot;4&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; default=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Comments===&lt;br /&gt;
Why does this matter? Do we need to use multiple catalogs for something? [[User:Jimg|jimg]] 10:43, 12 August 2009 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Yes. As we grow Hyrax we will need to support additional catalogs and services. Because both the BES and the OLFS can independently (and as part of their regular usage pattern) modify the catalog by adding either services which are connected to a URL or catalog content that is mapped into the URL space. &lt;br /&gt;
&lt;br /&gt;
:I guess one way to think of this is that the catalog for a particular instance of Hyrax is the collection of all URLs that are valid. (Where valid means that they return an HTTP status of 200.) Can&#039;t we consider the collection of URL stings to represent a tree? Doesn&#039;t it define a collection of named nodes? Some which are leaves and some which contain more stuff?&lt;br /&gt;
:--[[User:Ndp|ndp]] 09:21, 7 March 2010 (PST)&lt;br /&gt;
&lt;br /&gt;
[[User:pwest | Patrick]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development|Fixing the Broken Hyrax Catalogs]][[Category:Hyrax Development|Fixing the Broken Hyrax Catalogs]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6344</id>
		<title>Hyrax Catalogs</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6344"/>
		<updated>2011-04-21T14:14:02Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* Questions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hyrax/BES catalog integration issues ==&lt;br /&gt;
&lt;br /&gt;
Up until now Hyrax has been relying on only the default catalog in the BES. The default catalog is named &#039;&#039;&#039;catalog&#039;&#039;&#039; (Unfortunately for those of us reading and writing about it the word is both a proper noun and a regular noun in this context - confusing to say the least) The BES supports any number of other catalogs, each possibly representing a different repository or collection of data. For example, one catalog could be the jgofs repository, another catalog a basic directory listing of data files (default catalog does this), another could represent the CEDAR Catalog of data (based on a relational database).&lt;br /&gt;
&lt;br /&gt;
Unfortunately when the OLFS was developed it was written to rely on only the default BES catalog. This manifests in the Hyrax URLs as follows:&lt;br /&gt;
&lt;br /&gt;
The catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/&amp;lt;/nowiki&amp;gt;&#039;&#039;  refers to the top level in the default BES catalog. Accessing this URL issues the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
Notice that:&lt;br /&gt;
* The bes:showCatalog element does not specify a particular catalog, thus it implicitly specifies the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039;.&lt;br /&gt;
* The catalog URL has been reduced to a BES resource ID of &#039;&#039;/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Which is equivalent to the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;catalog:/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the OLFS had been written to support the implicit catalog organization in the BES then the correct catalog URL would have been:&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/catalog/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Changing this presents backward compatibility issues for Hyrax in that it is important that Hyrax not change the access URL&#039;s to existing data sets, catalogs, or inventories.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
The following is the agreed upon solution by James Gallagher, Nathan Potter, and Patrick West on April 20, 2011.&lt;br /&gt;
&lt;br /&gt;
The key is to maintain backward compatibility.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s say we have three catalogs.&lt;br /&gt;
&lt;br /&gt;
# The default catalog named &#039;&#039;&#039;catalog&#039;&#039;&#039;&lt;br /&gt;
# A jgofs catalog named &#039;&#039;&#039;jgofs&#039;&#039;&#039;&lt;br /&gt;
# A netcdf catalog named &#039;&#039;&#039;nc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Under the default catalog (which say points to $prefix/share/hyrax) has a single subdirectory called &#039;&#039;&#039;data&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would have the result:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;response reqID=&amp;quot;some_unique_value&amp;quot; xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset count=&amp;quot;3&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;6&amp;quot; lastModified=&amp;quot;2010-05-13T04:35:17&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;2&amp;quot; lastModified=&amp;quot;2011-04-18T18:42:44&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;9&amp;quot; lastModified=&amp;quot;2011-04-20T21:10:51&amp;quot; name=&amp;quot;nc&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;374&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Points to bring out:&lt;br /&gt;
* The default catalog root is returned as part of the result. The data directory has 6 elements under it (let&#039;s say), it is a node (has sub directories)&lt;br /&gt;
* The other two catalogs (jgofs and nc) are both listed here as part of the root of the default catalog&lt;br /&gt;
&lt;br /&gt;
A subsequent request to show the data node would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;data&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Whereas a request to show the root node of the jgofs catalog would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===So what about name clashes===&lt;br /&gt;
The default catalog always wins. So, if the root of the default catalog, in this case, had a directory called jgofs, then the request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would return the contents of the jgofs directory in the default catalog, not the root node of the jgofs catalog.&lt;br /&gt;
&lt;br /&gt;
===What does the OLFS do differently===&lt;br /&gt;
* Nothing&lt;br /&gt;
&lt;br /&gt;
===What does the BES do differently===&lt;br /&gt;
* Drop the node=&amp;quot;catalog:dir&amp;quot; notation and use node=&amp;quot;catalog/dir&amp;quot; or, in the case of the default catalog node=&amp;quot;dir&amp;quot;&lt;br /&gt;
* If the first part of the node (before a slash, or whole thing if no slash) matches the name of a catalog, then use the catalog&lt;br /&gt;
* Unless where the name matches an element in the default catalog root, at which point the default catalog wins&lt;br /&gt;
* in a setContainer request, store/space=&amp;quot;catalog&amp;quot; still needs to be used&lt;br /&gt;
** the value of the setContainer element needs to also be parsed to see if there is a catalog name at the front&lt;br /&gt;
&lt;br /&gt;
===What does the Patrick do differently===&lt;br /&gt;
* Currently, in doing ncml and jgofs work, modified the request to include a catalog=&amp;quot;&amp;quot; attribute in a showCatalog request&lt;br /&gt;
** remove this attribute&lt;br /&gt;
* Somewhere (perhaps in the XML request parsing) grab the node attribute in showCatalog, grab the first part (if there is one), and see if a catalog by that name exists&lt;br /&gt;
** also need to see if it&#039;s something in the root of the default catalog (SUCKS)&lt;br /&gt;
* When showing the root, instead of displaying the names of the catalogs, display the root of the default catalog, and the names of the other catalogs&lt;br /&gt;
** if there&#039;s a duplicate between the root of the default and a catalog name, leave it in. Make the admins change this&lt;br /&gt;
* When requesting a node, if the node is in the root of the default catalog AND there&#039;s a catalog with that name, then log an error message using BESLog&lt;br /&gt;
* Might want to move the catalog stuff into the bes_dispatch library instead of the bes_dap library&lt;br /&gt;
* In the setContainer request, look at the value of the element (the node) and see if it starts with a catalog name (if store/space=&amp;quot;catalog&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===Questions===&lt;br /&gt;
* Should the request for the root node include both the jgofs directory and the jgofs catalog? Would be confusing to user, so would say no. But might be a good thing if users send messages to the data admins to point this out.&lt;br /&gt;
** [&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;JG: Can you remind me what the JGOFS directory holds - the catalog is the collection of served data sets, yes?&amp;lt;/font&amp;gt;]&lt;br /&gt;
** This is just an example. Change the name from jgofs to foobar. What do I do if there&#039;s a catalog names foobar and a directory in the root of the default catalog named foobar? In the response to a showCatalog, do I include them both? I say yes.&lt;br /&gt;
** As for your jgofs question, directories are shown and can be traversed, just like the default catalog. But no files are listed. The jgofs objects are listed in the .remoteobjects file, if there is one in that directory.&lt;br /&gt;
* &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;JG: If we do this, will the SQL handler work? Almost? (and we can change the color or these questions once you all see them... I don&#039;t wan to make it all ugly.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Old Notes with Comments ==&lt;br /&gt;
&lt;br /&gt;
=== Possible Solutions ===&lt;br /&gt;
In order to acheive this compatibility the following schemes have been proposed:&lt;br /&gt;
&lt;br /&gt;
==== OLFS DispatchHandler for each catalog ====&lt;br /&gt;
&lt;br /&gt;
For each catalog that gets added to the BES a new OLFS DispatchHandler is written. This really would entail making a  copy of all the classes in the java package &#039;&#039;opendap.bes&#039;&#039; and modifying them slightly to allow for the different catalog names. It&#039;s a crummy solution because it grows the code base in a crazy way - lot&#039;s of replicate functionality that becomes a real problem to maintain as changes to the BES API will have to be implemented in multiple places in the  OLFS code base. This, I predict won&#039;t happen and things will constantly broken. &lt;br /&gt;
&lt;br /&gt;
It also means that every time someone writes a BES module that provides a complete DAP services stack and a new catalog that Hyrax will be unable to take advantage of it without having a java program written to support it. That&#039;s a bloody waste of resources.&lt;br /&gt;
&lt;br /&gt;
==== BES interprets resource ID&#039;s ====&lt;br /&gt;
&lt;br /&gt;
In lieu of specifying the catalog name explicitly in the various BES requests, the BES will look at the first part of the resource ID and compare it to its list of catalogs. If the first part of the resource ID matches a catalog name then the BES will pass the request to that catalog. Otherwise it will pass the request to the default catalog.&lt;br /&gt;
&lt;br /&gt;
===== Keep existing URLs working =====&lt;br /&gt;
&lt;br /&gt;
For example, in the catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt; http://localhost:8080/opendap/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
Would produce a resource ID of &#039;&#039;/data/nc&#039;&#039; Unless the BES actually contains a catalog named &#039;&#039;data&#039;&#039; then a catalog request for the resource ID &#039;&#039;/data/nc&#039;&#039; will be routed to the default catalog. &lt;br /&gt;
&lt;br /&gt;
===== Make the top level catalog include all of the catalogs =====&lt;br /&gt;
&lt;br /&gt;
When a request is made for the default top-level catalog:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
The BES will return a catalog containing an merging of the catalogs by name (as catalog &#039;&#039;nodes&#039;&#039;) and a listing of the top-level of the default catalog. For example if the BES has the &#039;&#039;rdh&#039;&#039;, &#039;&#039;cedar&#039;&#039;, and &#039;&#039;jgofs&#039;&#039; catalogs installed, and the default catalog contains data sets, regular files, and nodes the response might look like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset &amp;lt;font color=red&amp;gt;catalog=&amp;quot;catalog&amp;quot; (What would this be in this example?)&amp;lt;/font&amp;gt;  count=&amp;quot;13&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;578&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-11-19T20:56:15&amp;quot; name=&amp;quot;Test&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;918&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:34&amp;quot; name=&amp;quot;Trunk Monkey&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;238&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:31:56&amp;quot; name=&amp;quot;bears.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;852&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-11T16:27:59&amp;quot; name=&amp;quot;coverage&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-01-30T20:10:16&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;510&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-25T17:58:54&amp;quot; name=&amp;quot;fanfang&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;306&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-24T19:01:22&amp;quot; name=&amp;quot;fanfang.tar.gz&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;9055684&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-05T19:23:30&amp;quot; name=&amp;quot;namespaceAttributesTest.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;3396&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-02-12T21:25:11&amp;quot; name=&amp;quot;netcdf&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-17T21:45:19&amp;quot; name=&amp;quot;robots.txt&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;25&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;sst&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-30T21:47:58&amp;quot; name=&amp;quot;thredds&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;wcs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is a conflict between catalog name(s) and holdings in the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039; the offending catalog name(s) can be remapped using the BES configuration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GAH!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I still think that this is totally busted and I don&#039;t see how to fix it with out simply rewriting the OLFS to correctly work with the different catalogs in the BES which WILL change all of the URL&#039;s. The fact is that we (well ok, I) didn&#039;t get it right. And this is a pretty intractable problem otherwise. Fixing it in one of these half-baked ways just begs for the whole thing to come crashing down around us, not to mention the burden of creating an even MORE COMPLEX install and configuration procedure for our users. Maybe one of you can see a way out of this box... [[User:Ndp|ndp]] 13:35, 7 May 2009 (PDT)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Patrick seez ===&lt;br /&gt;
&lt;br /&gt;
==== In the BES ====&lt;br /&gt;
&lt;br /&gt;
instead of looking for the catalog as part of the node name, look for an attribute of the showCatalog element called catalog. If not present and ( the node attribute is not present or is empty or is slash ) then I return the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
If not present and the node is present and the node is not empty and the node is not slash then I default the catalog name to the default catalog specified in the BES configuration file.&lt;br /&gt;
&lt;br /&gt;
If present then I use that catalog name.&lt;br /&gt;
&lt;br /&gt;
In the response for &amp;lt;showCatalog /&amp;gt; I give you the list of the catalogs where the default catalog is marked with default=&amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Or perhaps there&#039;s a new command &amp;lt;showCatalogs /&amp;gt; that gives the list of catalogs?&lt;br /&gt;
&lt;br /&gt;
==== In the OLFS ====&lt;br /&gt;
&lt;br /&gt;
When the OLFS starts up make a &amp;lt;showCatalog /&amp;gt; request to get the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/ then you show them the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/catalogname then you show them the root node of that catalog&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/ (no catalog name is present) then this is an old URL, you pass this off to the BES without a catalog name, and the BES will use the default catalog.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/fnoc1.nc.das (no catalog name is present) then, again this is an old URL. Given the list of catalogs in the beginning you use the default catalog name.&lt;br /&gt;
&lt;br /&gt;
How can you tell if the catalog name is not present ... when the OLFS started up you asked for the list of catalogs. If data is not the name of a catalog then you know we are using the default catalog.&lt;br /&gt;
&lt;br /&gt;
Or ... if possible ... redirect the old URLs to one with the catalog name. Not sure if you can do this. So, if someone browses to www.example.com/opendap/data/nc then you redirect that to www.example.com/opendap/catalog/data/nc, and the same for www.example.com/opendap/data/nc/fnoc1.nc.das you redirect to www.example.com/opendap/catalog/data/nc/fnoc1.nc&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
I don&#039;t like the idea of when asked for the root node, if no catalog is specified then I give you the root for the default catalog and the names of the other catalogs. I think that if you ask for no catalog and no node then you should get the list of catalogs, including the default.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;showCatalog /&amp;gt;&lt;br /&gt;
  &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset catalog=&amp;quot;root&amp;quot;  count=&amp;quot;4&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; default=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Comments===&lt;br /&gt;
Why does this matter? Do we need to use multiple catalogs for something? [[User:Jimg|jimg]] 10:43, 12 August 2009 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Yes. As we grow Hyrax we will need to support additional catalogs and services. Because both the BES and the OLFS can independently (and as part of their regular usage pattern) modify the catalog by adding either services which are connected to a URL or catalog content that is mapped into the URL space. &lt;br /&gt;
&lt;br /&gt;
:I guess one way to think of this is that the catalog for a particular instance of Hyrax is the collection of all URLs that are valid. (Where valid means that they return an HTTP status of 200.) Can&#039;t we consider the collection of URL stings to represent a tree? Doesn&#039;t it define a collection of named nodes? Some which are leaves and some which contain more stuff?&lt;br /&gt;
:--[[User:Ndp|ndp]] 09:21, 7 March 2010 (PST)&lt;br /&gt;
&lt;br /&gt;
[[User:pwest | Patrick]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development|Fixing the Broken Hyrax Catalogs]][[Category:Hyrax Development|Fixing the Broken Hyrax Catalogs]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6340</id>
		<title>Hyrax Catalogs</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6340"/>
		<updated>2011-04-20T23:44:24Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* What does the Patrick do differently */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hyrax/BES catalog integration issues ==&lt;br /&gt;
&lt;br /&gt;
Up until now Hyrax has been relying on only the default catalog in the BES. The default catalog is named &#039;&#039;&#039;catalog&#039;&#039;&#039; (Unfortunately for those of us reading and writing about it the word is both a proper noun and a regular noun in this context - confusing to say the least) The BES supports any number of other catalogs, each possibly representing a different repository or collection of data. For example, one catalog could be the jgofs repository, another catalog a basic directory listing of data files (default catalog does this), another could represent the CEDAR Catalog of data (based on a relational database).&lt;br /&gt;
&lt;br /&gt;
Unfortunately when the OLFS was developed it was written to rely on only the default BES catalog. This manifests in the Hyrax URLs as follows:&lt;br /&gt;
&lt;br /&gt;
The catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/&amp;lt;/nowiki&amp;gt;&#039;&#039;  refers to the top level in the default BES catalog. Accessing this URL issues the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
Notice that:&lt;br /&gt;
* The bes:showCatalog element does not specify a particular catalog, thus it implicitly specifies the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039;.&lt;br /&gt;
* The catalog URL has been reduced to a BES resource ID of &#039;&#039;/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Which is equivalent to the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;catalog:/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the OLFS had been written to support the implicit catalog organization in the BES then the correct catalog URL would have been:&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/catalog/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Changing this presents backward compatibility issues for Hyrax in that it is important that Hyrax not change the access URL&#039;s to existing data sets, catalogs, or inventories.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
The following is the agreed upon solution by James Gallagher, Nathan Potter, and Patrick West on April 20, 2011.&lt;br /&gt;
&lt;br /&gt;
The key is to maintain backward compatibility.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s say we have three catalogs.&lt;br /&gt;
&lt;br /&gt;
# The default catalog named &#039;&#039;&#039;catalog&#039;&#039;&#039;&lt;br /&gt;
# A jgofs catalog named &#039;&#039;&#039;jgofs&#039;&#039;&#039;&lt;br /&gt;
# A netcdf catalog named &#039;&#039;&#039;nc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Under the default catalog (which say points to $prefix/share/hyrax) has a single subdirectory called &#039;&#039;&#039;data&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would have the result:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;response reqID=&amp;quot;some_unique_value&amp;quot; xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset count=&amp;quot;3&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;6&amp;quot; lastModified=&amp;quot;2010-05-13T04:35:17&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;2&amp;quot; lastModified=&amp;quot;2011-04-18T18:42:44&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;9&amp;quot; lastModified=&amp;quot;2011-04-20T21:10:51&amp;quot; name=&amp;quot;nc&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;374&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Points to bring out:&lt;br /&gt;
* The default catalog root is returned as part of the result. The data directory has 6 elements under it (let&#039;s say), it is a node (has sub directories)&lt;br /&gt;
* The other two catalogs (jgofs and nc) are both listed here as part of the root of the default catalog&lt;br /&gt;
&lt;br /&gt;
A subsequent request to show the data node would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;data&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Whereas a request to show the root node of the jgofs catalog would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===So what about name clashes===&lt;br /&gt;
The default catalog always wins. So, if the root of the default catalog, in this case, had a directory called jgofs, then the request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would return the contents of the jgofs directory in the default catalog, not the root node of the jgofs catalog.&lt;br /&gt;
&lt;br /&gt;
===What does the OLFS do differently===&lt;br /&gt;
* Nothing&lt;br /&gt;
&lt;br /&gt;
===What does the BES do differently===&lt;br /&gt;
* Drop the node=&amp;quot;catalog:dir&amp;quot; notation and use node=&amp;quot;catalog/dir&amp;quot; or, in the case of the default catalog node=&amp;quot;dir&amp;quot;&lt;br /&gt;
* If the first part of the node (before a slash, or whole thing if no slash) matches the name of a catalog, then use the catalog&lt;br /&gt;
* Unless where the name matches an element in the default catalog root, at which point the default catalog wins&lt;br /&gt;
* in a setContainer request, store/space=&amp;quot;catalog&amp;quot; still needs to be used&lt;br /&gt;
** the value of the setContainer element needs to also be parsed to see if there is a catalog name at the front&lt;br /&gt;
&lt;br /&gt;
===What does the Patrick do differently===&lt;br /&gt;
* Currently, in doing ncml and jgofs work, modified the request to include a catalog=&amp;quot;&amp;quot; attribute in a showCatalog request&lt;br /&gt;
** remove this attribute&lt;br /&gt;
* Somewhere (perhaps in the XML request parsing) grab the node attribute in showCatalog, grab the first part (if there is one), and see if a catalog by that name exists&lt;br /&gt;
** also need to see if it&#039;s something in the root of the default catalog (SUCKS)&lt;br /&gt;
* When showing the root, instead of displaying the names of the catalogs, display the root of the default catalog, and the names of the other catalogs&lt;br /&gt;
** if there&#039;s a duplicate between the root of the default and a catalog name, leave it in. Make the admins change this&lt;br /&gt;
* When requesting a node, if the node is in the root of the default catalog AND there&#039;s a catalog with that name, then log an error message using BESLog&lt;br /&gt;
* Might want to move the catalog stuff into the bes_dispatch library instead of the bes_dap library&lt;br /&gt;
* In the setContainer request, look at the value of the element (the node) and see if it starts with a catalog name (if store/space=&amp;quot;catalog&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===Questions===&lt;br /&gt;
* Should the request for the root node include both the jgofs directory and the jgofs catalog? Would be confusing to user, so would say no. But might be a good thing if users send messages to the data admins to point this out.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Old Notes with Comments ==&lt;br /&gt;
&lt;br /&gt;
=== Possible Solutions ===&lt;br /&gt;
In order to acheive this compatibility the following schemes have been proposed:&lt;br /&gt;
&lt;br /&gt;
==== OLFS DispatchHandler for each catalog ====&lt;br /&gt;
&lt;br /&gt;
For each catalog that gets added to the BES a new OLFS DispatchHandler is written. This really would entail making a  copy of all the classes in the java package &#039;&#039;opendap.bes&#039;&#039; and modifying them slightly to allow for the different catalog names. It&#039;s a crummy solution because it grows the code base in a crazy way - lot&#039;s of replicate functionality that becomes a real problem to maintain as changes to the BES API will have to be implemented in multiple places in the  OLFS code base. This, I predict won&#039;t happen and things will constantly broken. &lt;br /&gt;
&lt;br /&gt;
It also means that every time someone writes a BES module that provides a complete DAP services stack and a new catalog that Hyrax will be unable to take advantage of it without having a java program written to support it. That&#039;s a bloody waste of resources.&lt;br /&gt;
&lt;br /&gt;
==== BES interprets resource ID&#039;s ====&lt;br /&gt;
&lt;br /&gt;
In lieu of specifying the catalog name explicitly in the various BES requests, the BES will look at the first part of the resource ID and compare it to its list of catalogs. If the first part of the resource ID matches a catalog name then the BES will pass the request to that catalog. Otherwise it will pass the request to the default catalog.&lt;br /&gt;
&lt;br /&gt;
===== Keep existing URLs working =====&lt;br /&gt;
&lt;br /&gt;
For example, in the catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt; http://localhost:8080/opendap/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
Would produce a resource ID of &#039;&#039;/data/nc&#039;&#039; Unless the BES actually contains a catalog named &#039;&#039;data&#039;&#039; then a catalog request for the resource ID &#039;&#039;/data/nc&#039;&#039; will be routed to the default catalog. &lt;br /&gt;
&lt;br /&gt;
===== Make the top level catalog include all of the catalogs =====&lt;br /&gt;
&lt;br /&gt;
When a request is made for the default top-level catalog:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
The BES will return a catalog containing an merging of the catalogs by name (as catalog &#039;&#039;nodes&#039;&#039;) and a listing of the top-level of the default catalog. For example if the BES has the &#039;&#039;rdh&#039;&#039;, &#039;&#039;cedar&#039;&#039;, and &#039;&#039;jgofs&#039;&#039; catalogs installed, and the default catalog contains data sets, regular files, and nodes the response might look like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset &amp;lt;font color=red&amp;gt;catalog=&amp;quot;catalog&amp;quot; (What would this be in this example?)&amp;lt;/font&amp;gt;  count=&amp;quot;13&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;578&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-11-19T20:56:15&amp;quot; name=&amp;quot;Test&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;918&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:34&amp;quot; name=&amp;quot;Trunk Monkey&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;238&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:31:56&amp;quot; name=&amp;quot;bears.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;852&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-11T16:27:59&amp;quot; name=&amp;quot;coverage&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-01-30T20:10:16&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;510&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-25T17:58:54&amp;quot; name=&amp;quot;fanfang&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;306&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-24T19:01:22&amp;quot; name=&amp;quot;fanfang.tar.gz&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;9055684&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-05T19:23:30&amp;quot; name=&amp;quot;namespaceAttributesTest.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;3396&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-02-12T21:25:11&amp;quot; name=&amp;quot;netcdf&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-17T21:45:19&amp;quot; name=&amp;quot;robots.txt&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;25&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;sst&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-30T21:47:58&amp;quot; name=&amp;quot;thredds&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;wcs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is a conflict between catalog name(s) and holdings in the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039; the offending catalog name(s) can be remapped using the BES configuration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GAH!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I still think that this is totally busted and I don&#039;t see how to fix it with out simply rewriting the OLFS to correctly work with the different catalogs in the BES which WILL change all of the URL&#039;s. The fact is that we (well ok, I) didn&#039;t get it right. And this is a pretty intractable problem otherwise. Fixing it in one of these half-baked ways just begs for the whole thing to come crashing down around us, not to mention the burden of creating an even MORE COMPLEX install and configuration procedure for our users. Maybe one of you can see a way out of this box... [[User:Ndp|ndp]] 13:35, 7 May 2009 (PDT)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Patrick seez ===&lt;br /&gt;
&lt;br /&gt;
==== In the BES ====&lt;br /&gt;
&lt;br /&gt;
instead of looking for the catalog as part of the node name, look for an attribute of the showCatalog element called catalog. If not present and ( the node attribute is not present or is empty or is slash ) then I return the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
If not present and the node is present and the node is not empty and the node is not slash then I default the catalog name to the default catalog specified in the BES configuration file.&lt;br /&gt;
&lt;br /&gt;
If present then I use that catalog name.&lt;br /&gt;
&lt;br /&gt;
In the response for &amp;lt;showCatalog /&amp;gt; I give you the list of the catalogs where the default catalog is marked with default=&amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Or perhaps there&#039;s a new command &amp;lt;showCatalogs /&amp;gt; that gives the list of catalogs?&lt;br /&gt;
&lt;br /&gt;
==== In the OLFS ====&lt;br /&gt;
&lt;br /&gt;
When the OLFS starts up make a &amp;lt;showCatalog /&amp;gt; request to get the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/ then you show them the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/catalogname then you show them the root node of that catalog&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/ (no catalog name is present) then this is an old URL, you pass this off to the BES without a catalog name, and the BES will use the default catalog.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/fnoc1.nc.das (no catalog name is present) then, again this is an old URL. Given the list of catalogs in the beginning you use the default catalog name.&lt;br /&gt;
&lt;br /&gt;
How can you tell if the catalog name is not present ... when the OLFS started up you asked for the list of catalogs. If data is not the name of a catalog then you know we are using the default catalog.&lt;br /&gt;
&lt;br /&gt;
Or ... if possible ... redirect the old URLs to one with the catalog name. Not sure if you can do this. So, if someone browses to www.example.com/opendap/data/nc then you redirect that to www.example.com/opendap/catalog/data/nc, and the same for www.example.com/opendap/data/nc/fnoc1.nc.das you redirect to www.example.com/opendap/catalog/data/nc/fnoc1.nc&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
I don&#039;t like the idea of when asked for the root node, if no catalog is specified then I give you the root for the default catalog and the names of the other catalogs. I think that if you ask for no catalog and no node then you should get the list of catalogs, including the default.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;showCatalog /&amp;gt;&lt;br /&gt;
  &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset catalog=&amp;quot;root&amp;quot;  count=&amp;quot;4&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; default=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Comments===&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Why does this matter? Do we need to use multiple catalogs for something? [[User:Jimg|jimg]] 10:43, 12 August 2009 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Yes. As we grow Hyrax we will need to support additional catalogs and services. Because both the BES and the OLFS can independently (and as part of their regular usage pattern) modify the catalog by adding either services which are connected to a URL or catalog content that is mapped into the URL space. &lt;br /&gt;
&lt;br /&gt;
:I guess one way to think of this is that the catalog for a particular instance of Hyrax is the colection of all URLs that are valid. (Where valid means that they return an HTTP status of 200.) Can&#039;t we consider the collection of URL stings to represent a tree? Doesn&#039;t it define a collection of named nodes? Some which are leaves and some which contain more stuff?&lt;br /&gt;
:--[[User:Ndp|ndp]] 09:21, 7 March 2010 (PST)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[User:pwest | Patrick]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development|Fixing the Broken Hyrax Catalogs]][[Category:Hyrax Development|Fixing the Broken Hyrax Catalogs]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6339</id>
		<title>Hyrax Catalogs</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6339"/>
		<updated>2011-04-20T23:43:49Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* What does the BES do differently */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hyrax/BES catalog integration issues ==&lt;br /&gt;
&lt;br /&gt;
Up until now Hyrax has been relying on only the default catalog in the BES. The default catalog is named &#039;&#039;&#039;catalog&#039;&#039;&#039; (Unfortunately for those of us reading and writing about it the word is both a proper noun and a regular noun in this context - confusing to say the least) The BES supports any number of other catalogs, each possibly representing a different repository or collection of data. For example, one catalog could be the jgofs repository, another catalog a basic directory listing of data files (default catalog does this), another could represent the CEDAR Catalog of data (based on a relational database).&lt;br /&gt;
&lt;br /&gt;
Unfortunately when the OLFS was developed it was written to rely on only the default BES catalog. This manifests in the Hyrax URLs as follows:&lt;br /&gt;
&lt;br /&gt;
The catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/&amp;lt;/nowiki&amp;gt;&#039;&#039;  refers to the top level in the default BES catalog. Accessing this URL issues the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
Notice that:&lt;br /&gt;
* The bes:showCatalog element does not specify a particular catalog, thus it implicitly specifies the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039;.&lt;br /&gt;
* The catalog URL has been reduced to a BES resource ID of &#039;&#039;/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Which is equivalent to the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;catalog:/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the OLFS had been written to support the implicit catalog organization in the BES then the correct catalog URL would have been:&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/catalog/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Changing this presents backward compatibility issues for Hyrax in that it is important that Hyrax not change the access URL&#039;s to existing data sets, catalogs, or inventories.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
The following is the agreed upon solution by James Gallagher, Nathan Potter, and Patrick West on April 20, 2011.&lt;br /&gt;
&lt;br /&gt;
The key is to maintain backward compatibility.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s say we have three catalogs.&lt;br /&gt;
&lt;br /&gt;
# The default catalog named &#039;&#039;&#039;catalog&#039;&#039;&#039;&lt;br /&gt;
# A jgofs catalog named &#039;&#039;&#039;jgofs&#039;&#039;&#039;&lt;br /&gt;
# A netcdf catalog named &#039;&#039;&#039;nc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Under the default catalog (which say points to $prefix/share/hyrax) has a single subdirectory called &#039;&#039;&#039;data&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would have the result:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;response reqID=&amp;quot;some_unique_value&amp;quot; xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset count=&amp;quot;3&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;6&amp;quot; lastModified=&amp;quot;2010-05-13T04:35:17&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;2&amp;quot; lastModified=&amp;quot;2011-04-18T18:42:44&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;9&amp;quot; lastModified=&amp;quot;2011-04-20T21:10:51&amp;quot; name=&amp;quot;nc&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;374&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Points to bring out:&lt;br /&gt;
* The default catalog root is returned as part of the result. The data directory has 6 elements under it (let&#039;s say), it is a node (has sub directories)&lt;br /&gt;
* The other two catalogs (jgofs and nc) are both listed here as part of the root of the default catalog&lt;br /&gt;
&lt;br /&gt;
A subsequent request to show the data node would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;data&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Whereas a request to show the root node of the jgofs catalog would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===So what about name clashes===&lt;br /&gt;
The default catalog always wins. So, if the root of the default catalog, in this case, had a directory called jgofs, then the request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would return the contents of the jgofs directory in the default catalog, not the root node of the jgofs catalog.&lt;br /&gt;
&lt;br /&gt;
===What does the OLFS do differently===&lt;br /&gt;
* Nothing&lt;br /&gt;
&lt;br /&gt;
===What does the BES do differently===&lt;br /&gt;
* Drop the node=&amp;quot;catalog:dir&amp;quot; notation and use node=&amp;quot;catalog/dir&amp;quot; or, in the case of the default catalog node=&amp;quot;dir&amp;quot;&lt;br /&gt;
* If the first part of the node (before a slash, or whole thing if no slash) matches the name of a catalog, then use the catalog&lt;br /&gt;
* Unless where the name matches an element in the default catalog root, at which point the default catalog wins&lt;br /&gt;
* in a setContainer request, store/space=&amp;quot;catalog&amp;quot; still needs to be used&lt;br /&gt;
** the value of the setContainer element needs to also be parsed to see if there is a catalog name at the front&lt;br /&gt;
&lt;br /&gt;
===What does the Patrick do differently===&lt;br /&gt;
* Currently, in doing ncml and jgofs work, modified the request to include a catalog=&amp;quot;&amp;quot; attribute in a showCatalog request&lt;br /&gt;
** remove this attribute&lt;br /&gt;
* Somewhere (perhaps in the XML request parsing) grab the node attribute in showCatalog, grab the first part (if there is one), and see if a catalog by that name exists&lt;br /&gt;
** also need to see if it&#039;s something in the root of the default catalog (SUCKS)&lt;br /&gt;
* When showing the root, instead of displaying the names of the catalogs, display the root of the default catalog, and the names of the other catalogs&lt;br /&gt;
** if there&#039;s a duplicate between the root of the default and a catalog name, leave it in. Make the admins change this&lt;br /&gt;
* When requesting a node, if the node is in the root of the default catalog AND there&#039;s a catalog with that name, then log an error message using BESLog&lt;br /&gt;
* Might want to move the catalog stuff into the bes_dispatch library instead of the bes_dap library&lt;br /&gt;
* Might want to remove the non-catalog version of BES.RootDirectory (etc...) and just use the catalog stuff&lt;br /&gt;
* In the setContainer request, look at the value of the element (the node) and see if it starts with a catalog name (if store/space=&amp;quot;catalog&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===Questions===&lt;br /&gt;
* Should the request for the root node include both the jgofs directory and the jgofs catalog? Would be confusing to user, so would say no. But might be a good thing if users send messages to the data admins to point this out.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Old Notes with Comments ==&lt;br /&gt;
&lt;br /&gt;
=== Possible Solutions ===&lt;br /&gt;
In order to acheive this compatibility the following schemes have been proposed:&lt;br /&gt;
&lt;br /&gt;
==== OLFS DispatchHandler for each catalog ====&lt;br /&gt;
&lt;br /&gt;
For each catalog that gets added to the BES a new OLFS DispatchHandler is written. This really would entail making a  copy of all the classes in the java package &#039;&#039;opendap.bes&#039;&#039; and modifying them slightly to allow for the different catalog names. It&#039;s a crummy solution because it grows the code base in a crazy way - lot&#039;s of replicate functionality that becomes a real problem to maintain as changes to the BES API will have to be implemented in multiple places in the  OLFS code base. This, I predict won&#039;t happen and things will constantly broken. &lt;br /&gt;
&lt;br /&gt;
It also means that every time someone writes a BES module that provides a complete DAP services stack and a new catalog that Hyrax will be unable to take advantage of it without having a java program written to support it. That&#039;s a bloody waste of resources.&lt;br /&gt;
&lt;br /&gt;
==== BES interprets resource ID&#039;s ====&lt;br /&gt;
&lt;br /&gt;
In lieu of specifying the catalog name explicitly in the various BES requests, the BES will look at the first part of the resource ID and compare it to its list of catalogs. If the first part of the resource ID matches a catalog name then the BES will pass the request to that catalog. Otherwise it will pass the request to the default catalog.&lt;br /&gt;
&lt;br /&gt;
===== Keep existing URLs working =====&lt;br /&gt;
&lt;br /&gt;
For example, in the catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt; http://localhost:8080/opendap/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
Would produce a resource ID of &#039;&#039;/data/nc&#039;&#039; Unless the BES actually contains a catalog named &#039;&#039;data&#039;&#039; then a catalog request for the resource ID &#039;&#039;/data/nc&#039;&#039; will be routed to the default catalog. &lt;br /&gt;
&lt;br /&gt;
===== Make the top level catalog include all of the catalogs =====&lt;br /&gt;
&lt;br /&gt;
When a request is made for the default top-level catalog:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
The BES will return a catalog containing an merging of the catalogs by name (as catalog &#039;&#039;nodes&#039;&#039;) and a listing of the top-level of the default catalog. For example if the BES has the &#039;&#039;rdh&#039;&#039;, &#039;&#039;cedar&#039;&#039;, and &#039;&#039;jgofs&#039;&#039; catalogs installed, and the default catalog contains data sets, regular files, and nodes the response might look like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset &amp;lt;font color=red&amp;gt;catalog=&amp;quot;catalog&amp;quot; (What would this be in this example?)&amp;lt;/font&amp;gt;  count=&amp;quot;13&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;578&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-11-19T20:56:15&amp;quot; name=&amp;quot;Test&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;918&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:34&amp;quot; name=&amp;quot;Trunk Monkey&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;238&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:31:56&amp;quot; name=&amp;quot;bears.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;852&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-11T16:27:59&amp;quot; name=&amp;quot;coverage&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-01-30T20:10:16&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;510&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-25T17:58:54&amp;quot; name=&amp;quot;fanfang&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;306&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-24T19:01:22&amp;quot; name=&amp;quot;fanfang.tar.gz&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;9055684&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-05T19:23:30&amp;quot; name=&amp;quot;namespaceAttributesTest.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;3396&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-02-12T21:25:11&amp;quot; name=&amp;quot;netcdf&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-17T21:45:19&amp;quot; name=&amp;quot;robots.txt&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;25&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;sst&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-30T21:47:58&amp;quot; name=&amp;quot;thredds&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;wcs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is a conflict between catalog name(s) and holdings in the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039; the offending catalog name(s) can be remapped using the BES configuration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GAH!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I still think that this is totally busted and I don&#039;t see how to fix it with out simply rewriting the OLFS to correctly work with the different catalogs in the BES which WILL change all of the URL&#039;s. The fact is that we (well ok, I) didn&#039;t get it right. And this is a pretty intractable problem otherwise. Fixing it in one of these half-baked ways just begs for the whole thing to come crashing down around us, not to mention the burden of creating an even MORE COMPLEX install and configuration procedure for our users. Maybe one of you can see a way out of this box... [[User:Ndp|ndp]] 13:35, 7 May 2009 (PDT)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Patrick seez ===&lt;br /&gt;
&lt;br /&gt;
==== In the BES ====&lt;br /&gt;
&lt;br /&gt;
instead of looking for the catalog as part of the node name, look for an attribute of the showCatalog element called catalog. If not present and ( the node attribute is not present or is empty or is slash ) then I return the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
If not present and the node is present and the node is not empty and the node is not slash then I default the catalog name to the default catalog specified in the BES configuration file.&lt;br /&gt;
&lt;br /&gt;
If present then I use that catalog name.&lt;br /&gt;
&lt;br /&gt;
In the response for &amp;lt;showCatalog /&amp;gt; I give you the list of the catalogs where the default catalog is marked with default=&amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Or perhaps there&#039;s a new command &amp;lt;showCatalogs /&amp;gt; that gives the list of catalogs?&lt;br /&gt;
&lt;br /&gt;
==== In the OLFS ====&lt;br /&gt;
&lt;br /&gt;
When the OLFS starts up make a &amp;lt;showCatalog /&amp;gt; request to get the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/ then you show them the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/catalogname then you show them the root node of that catalog&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/ (no catalog name is present) then this is an old URL, you pass this off to the BES without a catalog name, and the BES will use the default catalog.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/fnoc1.nc.das (no catalog name is present) then, again this is an old URL. Given the list of catalogs in the beginning you use the default catalog name.&lt;br /&gt;
&lt;br /&gt;
How can you tell if the catalog name is not present ... when the OLFS started up you asked for the list of catalogs. If data is not the name of a catalog then you know we are using the default catalog.&lt;br /&gt;
&lt;br /&gt;
Or ... if possible ... redirect the old URLs to one with the catalog name. Not sure if you can do this. So, if someone browses to www.example.com/opendap/data/nc then you redirect that to www.example.com/opendap/catalog/data/nc, and the same for www.example.com/opendap/data/nc/fnoc1.nc.das you redirect to www.example.com/opendap/catalog/data/nc/fnoc1.nc&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
I don&#039;t like the idea of when asked for the root node, if no catalog is specified then I give you the root for the default catalog and the names of the other catalogs. I think that if you ask for no catalog and no node then you should get the list of catalogs, including the default.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;showCatalog /&amp;gt;&lt;br /&gt;
  &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset catalog=&amp;quot;root&amp;quot;  count=&amp;quot;4&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; default=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Comments===&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Why does this matter? Do we need to use multiple catalogs for something? [[User:Jimg|jimg]] 10:43, 12 August 2009 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Yes. As we grow Hyrax we will need to support additional catalogs and services. Because both the BES and the OLFS can independently (and as part of their regular usage pattern) modify the catalog by adding either services which are connected to a URL or catalog content that is mapped into the URL space. &lt;br /&gt;
&lt;br /&gt;
:I guess one way to think of this is that the catalog for a particular instance of Hyrax is the colection of all URLs that are valid. (Where valid means that they return an HTTP status of 200.) Can&#039;t we consider the collection of URL stings to represent a tree? Doesn&#039;t it define a collection of named nodes? Some which are leaves and some which contain more stuff?&lt;br /&gt;
:--[[User:Ndp|ndp]] 09:21, 7 March 2010 (PST)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[User:pwest | Patrick]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development|Fixing the Broken Hyrax Catalogs]][[Category:Hyrax Development|Fixing the Broken Hyrax Catalogs]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6338</id>
		<title>Hyrax Catalogs</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6338"/>
		<updated>2011-04-20T23:42:56Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* What does the Patrick do differently */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hyrax/BES catalog integration issues ==&lt;br /&gt;
&lt;br /&gt;
Up until now Hyrax has been relying on only the default catalog in the BES. The default catalog is named &#039;&#039;&#039;catalog&#039;&#039;&#039; (Unfortunately for those of us reading and writing about it the word is both a proper noun and a regular noun in this context - confusing to say the least) The BES supports any number of other catalogs, each possibly representing a different repository or collection of data. For example, one catalog could be the jgofs repository, another catalog a basic directory listing of data files (default catalog does this), another could represent the CEDAR Catalog of data (based on a relational database).&lt;br /&gt;
&lt;br /&gt;
Unfortunately when the OLFS was developed it was written to rely on only the default BES catalog. This manifests in the Hyrax URLs as follows:&lt;br /&gt;
&lt;br /&gt;
The catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/&amp;lt;/nowiki&amp;gt;&#039;&#039;  refers to the top level in the default BES catalog. Accessing this URL issues the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
Notice that:&lt;br /&gt;
* The bes:showCatalog element does not specify a particular catalog, thus it implicitly specifies the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039;.&lt;br /&gt;
* The catalog URL has been reduced to a BES resource ID of &#039;&#039;/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Which is equivalent to the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;catalog:/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the OLFS had been written to support the implicit catalog organization in the BES then the correct catalog URL would have been:&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/catalog/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Changing this presents backward compatibility issues for Hyrax in that it is important that Hyrax not change the access URL&#039;s to existing data sets, catalogs, or inventories.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
The following is the agreed upon solution by James Gallagher, Nathan Potter, and Patrick West on April 20, 2011.&lt;br /&gt;
&lt;br /&gt;
The key is to maintain backward compatibility.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s say we have three catalogs.&lt;br /&gt;
&lt;br /&gt;
# The default catalog named &#039;&#039;&#039;catalog&#039;&#039;&#039;&lt;br /&gt;
# A jgofs catalog named &#039;&#039;&#039;jgofs&#039;&#039;&#039;&lt;br /&gt;
# A netcdf catalog named &#039;&#039;&#039;nc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Under the default catalog (which say points to $prefix/share/hyrax) has a single subdirectory called &#039;&#039;&#039;data&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would have the result:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;response reqID=&amp;quot;some_unique_value&amp;quot; xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset count=&amp;quot;3&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;6&amp;quot; lastModified=&amp;quot;2010-05-13T04:35:17&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;2&amp;quot; lastModified=&amp;quot;2011-04-18T18:42:44&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;9&amp;quot; lastModified=&amp;quot;2011-04-20T21:10:51&amp;quot; name=&amp;quot;nc&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;374&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Points to bring out:&lt;br /&gt;
* The default catalog root is returned as part of the result. The data directory has 6 elements under it (let&#039;s say), it is a node (has sub directories)&lt;br /&gt;
* The other two catalogs (jgofs and nc) are both listed here as part of the root of the default catalog&lt;br /&gt;
&lt;br /&gt;
A subsequent request to show the data node would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;data&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Whereas a request to show the root node of the jgofs catalog would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===So what about name clashes===&lt;br /&gt;
The default catalog always wins. So, if the root of the default catalog, in this case, had a directory called jgofs, then the request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would return the contents of the jgofs directory in the default catalog, not the root node of the jgofs catalog.&lt;br /&gt;
&lt;br /&gt;
===What does the OLFS do differently===&lt;br /&gt;
* Nothing&lt;br /&gt;
&lt;br /&gt;
===What does the BES do differently===&lt;br /&gt;
* Drop the node=&amp;quot;catalog:dir&amp;quot; notation and use node=&amp;quot;catalog/dir&amp;quot; or, in the case of the default catalog node=&amp;quot;dir&amp;quot;&lt;br /&gt;
* If the first part of the node (before a slash, or whole thing if no slash) matches the name of a catalog, then use the catalog&lt;br /&gt;
* Unless where the name matches an element in the default catalog root, at which point the default catalog wins&lt;br /&gt;
* in a setContainer request, store/space=&amp;quot;catalog&amp;quot; still needs to be used (unless we drop that out of the BES as well)&lt;br /&gt;
** the value of the setContainer element needs to also be parsed to see if there is a catalog name at the front&lt;br /&gt;
&lt;br /&gt;
===What does the Patrick do differently===&lt;br /&gt;
* Currently, in doing ncml and jgofs work, modified the request to include a catalog=&amp;quot;&amp;quot; attribute in a showCatalog request&lt;br /&gt;
** remove this attribute&lt;br /&gt;
* Somewhere (perhaps in the XML request parsing) grab the node attribute in showCatalog, grab the first part (if there is one), and see if a catalog by that name exists&lt;br /&gt;
** also need to see if it&#039;s something in the root of the default catalog (SUCKS)&lt;br /&gt;
* When showing the root, instead of displaying the names of the catalogs, display the root of the default catalog, and the names of the other catalogs&lt;br /&gt;
** if there&#039;s a duplicate between the root of the default and a catalog name, leave it in. Make the admins change this&lt;br /&gt;
* When requesting a node, if the node is in the root of the default catalog AND there&#039;s a catalog with that name, then log an error message using BESLog&lt;br /&gt;
* Might want to move the catalog stuff into the bes_dispatch library instead of the bes_dap library&lt;br /&gt;
* Might want to remove the non-catalog version of BES.RootDirectory (etc...) and just use the catalog stuff&lt;br /&gt;
* In the setContainer request, look at the value of the element (the node) and see if it starts with a catalog name (if store/space=&amp;quot;catalog&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===Questions===&lt;br /&gt;
* Should the request for the root node include both the jgofs directory and the jgofs catalog? Would be confusing to user, so would say no. But might be a good thing if users send messages to the data admins to point this out.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Old Notes with Comments ==&lt;br /&gt;
&lt;br /&gt;
=== Possible Solutions ===&lt;br /&gt;
In order to acheive this compatibility the following schemes have been proposed:&lt;br /&gt;
&lt;br /&gt;
==== OLFS DispatchHandler for each catalog ====&lt;br /&gt;
&lt;br /&gt;
For each catalog that gets added to the BES a new OLFS DispatchHandler is written. This really would entail making a  copy of all the classes in the java package &#039;&#039;opendap.bes&#039;&#039; and modifying them slightly to allow for the different catalog names. It&#039;s a crummy solution because it grows the code base in a crazy way - lot&#039;s of replicate functionality that becomes a real problem to maintain as changes to the BES API will have to be implemented in multiple places in the  OLFS code base. This, I predict won&#039;t happen and things will constantly broken. &lt;br /&gt;
&lt;br /&gt;
It also means that every time someone writes a BES module that provides a complete DAP services stack and a new catalog that Hyrax will be unable to take advantage of it without having a java program written to support it. That&#039;s a bloody waste of resources.&lt;br /&gt;
&lt;br /&gt;
==== BES interprets resource ID&#039;s ====&lt;br /&gt;
&lt;br /&gt;
In lieu of specifying the catalog name explicitly in the various BES requests, the BES will look at the first part of the resource ID and compare it to its list of catalogs. If the first part of the resource ID matches a catalog name then the BES will pass the request to that catalog. Otherwise it will pass the request to the default catalog.&lt;br /&gt;
&lt;br /&gt;
===== Keep existing URLs working =====&lt;br /&gt;
&lt;br /&gt;
For example, in the catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt; http://localhost:8080/opendap/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
Would produce a resource ID of &#039;&#039;/data/nc&#039;&#039; Unless the BES actually contains a catalog named &#039;&#039;data&#039;&#039; then a catalog request for the resource ID &#039;&#039;/data/nc&#039;&#039; will be routed to the default catalog. &lt;br /&gt;
&lt;br /&gt;
===== Make the top level catalog include all of the catalogs =====&lt;br /&gt;
&lt;br /&gt;
When a request is made for the default top-level catalog:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
The BES will return a catalog containing an merging of the catalogs by name (as catalog &#039;&#039;nodes&#039;&#039;) and a listing of the top-level of the default catalog. For example if the BES has the &#039;&#039;rdh&#039;&#039;, &#039;&#039;cedar&#039;&#039;, and &#039;&#039;jgofs&#039;&#039; catalogs installed, and the default catalog contains data sets, regular files, and nodes the response might look like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset &amp;lt;font color=red&amp;gt;catalog=&amp;quot;catalog&amp;quot; (What would this be in this example?)&amp;lt;/font&amp;gt;  count=&amp;quot;13&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;578&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-11-19T20:56:15&amp;quot; name=&amp;quot;Test&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;918&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:34&amp;quot; name=&amp;quot;Trunk Monkey&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;238&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:31:56&amp;quot; name=&amp;quot;bears.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;852&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-11T16:27:59&amp;quot; name=&amp;quot;coverage&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-01-30T20:10:16&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;510&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-25T17:58:54&amp;quot; name=&amp;quot;fanfang&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;306&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-24T19:01:22&amp;quot; name=&amp;quot;fanfang.tar.gz&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;9055684&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-05T19:23:30&amp;quot; name=&amp;quot;namespaceAttributesTest.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;3396&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-02-12T21:25:11&amp;quot; name=&amp;quot;netcdf&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-17T21:45:19&amp;quot; name=&amp;quot;robots.txt&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;25&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;sst&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-30T21:47:58&amp;quot; name=&amp;quot;thredds&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;wcs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is a conflict between catalog name(s) and holdings in the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039; the offending catalog name(s) can be remapped using the BES configuration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GAH!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I still think that this is totally busted and I don&#039;t see how to fix it with out simply rewriting the OLFS to correctly work with the different catalogs in the BES which WILL change all of the URL&#039;s. The fact is that we (well ok, I) didn&#039;t get it right. And this is a pretty intractable problem otherwise. Fixing it in one of these half-baked ways just begs for the whole thing to come crashing down around us, not to mention the burden of creating an even MORE COMPLEX install and configuration procedure for our users. Maybe one of you can see a way out of this box... [[User:Ndp|ndp]] 13:35, 7 May 2009 (PDT)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Patrick seez ===&lt;br /&gt;
&lt;br /&gt;
==== In the BES ====&lt;br /&gt;
&lt;br /&gt;
instead of looking for the catalog as part of the node name, look for an attribute of the showCatalog element called catalog. If not present and ( the node attribute is not present or is empty or is slash ) then I return the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
If not present and the node is present and the node is not empty and the node is not slash then I default the catalog name to the default catalog specified in the BES configuration file.&lt;br /&gt;
&lt;br /&gt;
If present then I use that catalog name.&lt;br /&gt;
&lt;br /&gt;
In the response for &amp;lt;showCatalog /&amp;gt; I give you the list of the catalogs where the default catalog is marked with default=&amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Or perhaps there&#039;s a new command &amp;lt;showCatalogs /&amp;gt; that gives the list of catalogs?&lt;br /&gt;
&lt;br /&gt;
==== In the OLFS ====&lt;br /&gt;
&lt;br /&gt;
When the OLFS starts up make a &amp;lt;showCatalog /&amp;gt; request to get the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/ then you show them the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/catalogname then you show them the root node of that catalog&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/ (no catalog name is present) then this is an old URL, you pass this off to the BES without a catalog name, and the BES will use the default catalog.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/fnoc1.nc.das (no catalog name is present) then, again this is an old URL. Given the list of catalogs in the beginning you use the default catalog name.&lt;br /&gt;
&lt;br /&gt;
How can you tell if the catalog name is not present ... when the OLFS started up you asked for the list of catalogs. If data is not the name of a catalog then you know we are using the default catalog.&lt;br /&gt;
&lt;br /&gt;
Or ... if possible ... redirect the old URLs to one with the catalog name. Not sure if you can do this. So, if someone browses to www.example.com/opendap/data/nc then you redirect that to www.example.com/opendap/catalog/data/nc, and the same for www.example.com/opendap/data/nc/fnoc1.nc.das you redirect to www.example.com/opendap/catalog/data/nc/fnoc1.nc&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
I don&#039;t like the idea of when asked for the root node, if no catalog is specified then I give you the root for the default catalog and the names of the other catalogs. I think that if you ask for no catalog and no node then you should get the list of catalogs, including the default.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;showCatalog /&amp;gt;&lt;br /&gt;
  &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset catalog=&amp;quot;root&amp;quot;  count=&amp;quot;4&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; default=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Comments===&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Why does this matter? Do we need to use multiple catalogs for something? [[User:Jimg|jimg]] 10:43, 12 August 2009 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Yes. As we grow Hyrax we will need to support additional catalogs and services. Because both the BES and the OLFS can independently (and as part of their regular usage pattern) modify the catalog by adding either services which are connected to a URL or catalog content that is mapped into the URL space. &lt;br /&gt;
&lt;br /&gt;
:I guess one way to think of this is that the catalog for a particular instance of Hyrax is the colection of all URLs that are valid. (Where valid means that they return an HTTP status of 200.) Can&#039;t we consider the collection of URL stings to represent a tree? Doesn&#039;t it define a collection of named nodes? Some which are leaves and some which contain more stuff?&lt;br /&gt;
:--[[User:Ndp|ndp]] 09:21, 7 March 2010 (PST)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[User:pwest | Patrick]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development|Fixing the Broken Hyrax Catalogs]][[Category:Hyrax Development|Fixing the Broken Hyrax Catalogs]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6337</id>
		<title>Hyrax Catalogs</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6337"/>
		<updated>2011-04-20T23:40:25Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* What does the BES do differently */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hyrax/BES catalog integration issues ==&lt;br /&gt;
&lt;br /&gt;
Up until now Hyrax has been relying on only the default catalog in the BES. The default catalog is named &#039;&#039;&#039;catalog&#039;&#039;&#039; (Unfortunately for those of us reading and writing about it the word is both a proper noun and a regular noun in this context - confusing to say the least) The BES supports any number of other catalogs, each possibly representing a different repository or collection of data. For example, one catalog could be the jgofs repository, another catalog a basic directory listing of data files (default catalog does this), another could represent the CEDAR Catalog of data (based on a relational database).&lt;br /&gt;
&lt;br /&gt;
Unfortunately when the OLFS was developed it was written to rely on only the default BES catalog. This manifests in the Hyrax URLs as follows:&lt;br /&gt;
&lt;br /&gt;
The catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/&amp;lt;/nowiki&amp;gt;&#039;&#039;  refers to the top level in the default BES catalog. Accessing this URL issues the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
Notice that:&lt;br /&gt;
* The bes:showCatalog element does not specify a particular catalog, thus it implicitly specifies the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039;.&lt;br /&gt;
* The catalog URL has been reduced to a BES resource ID of &#039;&#039;/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Which is equivalent to the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;catalog:/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the OLFS had been written to support the implicit catalog organization in the BES then the correct catalog URL would have been:&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/catalog/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Changing this presents backward compatibility issues for Hyrax in that it is important that Hyrax not change the access URL&#039;s to existing data sets, catalogs, or inventories.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
The following is the agreed upon solution by James Gallagher, Nathan Potter, and Patrick West on April 20, 2011.&lt;br /&gt;
&lt;br /&gt;
The key is to maintain backward compatibility.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s say we have three catalogs.&lt;br /&gt;
&lt;br /&gt;
# The default catalog named &#039;&#039;&#039;catalog&#039;&#039;&#039;&lt;br /&gt;
# A jgofs catalog named &#039;&#039;&#039;jgofs&#039;&#039;&#039;&lt;br /&gt;
# A netcdf catalog named &#039;&#039;&#039;nc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Under the default catalog (which say points to $prefix/share/hyrax) has a single subdirectory called &#039;&#039;&#039;data&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would have the result:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;response reqID=&amp;quot;some_unique_value&amp;quot; xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset count=&amp;quot;3&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;6&amp;quot; lastModified=&amp;quot;2010-05-13T04:35:17&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;2&amp;quot; lastModified=&amp;quot;2011-04-18T18:42:44&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;9&amp;quot; lastModified=&amp;quot;2011-04-20T21:10:51&amp;quot; name=&amp;quot;nc&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;374&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Points to bring out:&lt;br /&gt;
* The default catalog root is returned as part of the result. The data directory has 6 elements under it (let&#039;s say), it is a node (has sub directories)&lt;br /&gt;
* The other two catalogs (jgofs and nc) are both listed here as part of the root of the default catalog&lt;br /&gt;
&lt;br /&gt;
A subsequent request to show the data node would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;data&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Whereas a request to show the root node of the jgofs catalog would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===So what about name clashes===&lt;br /&gt;
The default catalog always wins. So, if the root of the default catalog, in this case, had a directory called jgofs, then the request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would return the contents of the jgofs directory in the default catalog, not the root node of the jgofs catalog.&lt;br /&gt;
&lt;br /&gt;
===What does the OLFS do differently===&lt;br /&gt;
* Nothing&lt;br /&gt;
&lt;br /&gt;
===What does the BES do differently===&lt;br /&gt;
* Drop the node=&amp;quot;catalog:dir&amp;quot; notation and use node=&amp;quot;catalog/dir&amp;quot; or, in the case of the default catalog node=&amp;quot;dir&amp;quot;&lt;br /&gt;
* If the first part of the node (before a slash, or whole thing if no slash) matches the name of a catalog, then use the catalog&lt;br /&gt;
* Unless where the name matches an element in the default catalog root, at which point the default catalog wins&lt;br /&gt;
* in a setContainer request, store/space=&amp;quot;catalog&amp;quot; still needs to be used (unless we drop that out of the BES as well)&lt;br /&gt;
** the value of the setContainer element needs to also be parsed to see if there is a catalog name at the front&lt;br /&gt;
&lt;br /&gt;
===What does the Patrick do differently===&lt;br /&gt;
* Currently, in doing ncml and jgofs work, modified the request to include a catalog=&amp;quot;&amp;quot; attribute in a showCatalog request&lt;br /&gt;
** remove this attribute&lt;br /&gt;
* Somewhere (perhaps in the XML request parsing) grab the node attribute in showCatalog, grab the first part (if there is one), and see if a catalog by that name exists&lt;br /&gt;
** also need to see if it&#039;s something in the root of the default catalog (SUCKS)&lt;br /&gt;
* When showing the root, instead of displaying the names of the catalogs, display the root of the default catalog, and the names of the other catalogs&lt;br /&gt;
** if there&#039;s a duplicate between the root of the default and a catalog name, leave it in. Make the admins change this&lt;br /&gt;
* When requesting a node, if the node is in the root of the default catalog AND there&#039;s a catalog with that name, then log an error message using BESLog&lt;br /&gt;
&lt;br /&gt;
===Questions===&lt;br /&gt;
* Should the request for the root node include both the jgofs directory and the jgofs catalog? Would be confusing to user, so would say no. But might be a good thing if users send messages to the data admins to point this out.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Old Notes with Comments ==&lt;br /&gt;
&lt;br /&gt;
=== Possible Solutions ===&lt;br /&gt;
In order to acheive this compatibility the following schemes have been proposed:&lt;br /&gt;
&lt;br /&gt;
==== OLFS DispatchHandler for each catalog ====&lt;br /&gt;
&lt;br /&gt;
For each catalog that gets added to the BES a new OLFS DispatchHandler is written. This really would entail making a  copy of all the classes in the java package &#039;&#039;opendap.bes&#039;&#039; and modifying them slightly to allow for the different catalog names. It&#039;s a crummy solution because it grows the code base in a crazy way - lot&#039;s of replicate functionality that becomes a real problem to maintain as changes to the BES API will have to be implemented in multiple places in the  OLFS code base. This, I predict won&#039;t happen and things will constantly broken. &lt;br /&gt;
&lt;br /&gt;
It also means that every time someone writes a BES module that provides a complete DAP services stack and a new catalog that Hyrax will be unable to take advantage of it without having a java program written to support it. That&#039;s a bloody waste of resources.&lt;br /&gt;
&lt;br /&gt;
==== BES interprets resource ID&#039;s ====&lt;br /&gt;
&lt;br /&gt;
In lieu of specifying the catalog name explicitly in the various BES requests, the BES will look at the first part of the resource ID and compare it to its list of catalogs. If the first part of the resource ID matches a catalog name then the BES will pass the request to that catalog. Otherwise it will pass the request to the default catalog.&lt;br /&gt;
&lt;br /&gt;
===== Keep existing URLs working =====&lt;br /&gt;
&lt;br /&gt;
For example, in the catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt; http://localhost:8080/opendap/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
Would produce a resource ID of &#039;&#039;/data/nc&#039;&#039; Unless the BES actually contains a catalog named &#039;&#039;data&#039;&#039; then a catalog request for the resource ID &#039;&#039;/data/nc&#039;&#039; will be routed to the default catalog. &lt;br /&gt;
&lt;br /&gt;
===== Make the top level catalog include all of the catalogs =====&lt;br /&gt;
&lt;br /&gt;
When a request is made for the default top-level catalog:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
The BES will return a catalog containing an merging of the catalogs by name (as catalog &#039;&#039;nodes&#039;&#039;) and a listing of the top-level of the default catalog. For example if the BES has the &#039;&#039;rdh&#039;&#039;, &#039;&#039;cedar&#039;&#039;, and &#039;&#039;jgofs&#039;&#039; catalogs installed, and the default catalog contains data sets, regular files, and nodes the response might look like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset &amp;lt;font color=red&amp;gt;catalog=&amp;quot;catalog&amp;quot; (What would this be in this example?)&amp;lt;/font&amp;gt;  count=&amp;quot;13&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;578&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-11-19T20:56:15&amp;quot; name=&amp;quot;Test&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;918&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:34&amp;quot; name=&amp;quot;Trunk Monkey&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;238&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:31:56&amp;quot; name=&amp;quot;bears.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;852&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-11T16:27:59&amp;quot; name=&amp;quot;coverage&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-01-30T20:10:16&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;510&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-25T17:58:54&amp;quot; name=&amp;quot;fanfang&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;306&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-24T19:01:22&amp;quot; name=&amp;quot;fanfang.tar.gz&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;9055684&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-05T19:23:30&amp;quot; name=&amp;quot;namespaceAttributesTest.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;3396&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-02-12T21:25:11&amp;quot; name=&amp;quot;netcdf&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-17T21:45:19&amp;quot; name=&amp;quot;robots.txt&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;25&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;sst&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-30T21:47:58&amp;quot; name=&amp;quot;thredds&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;wcs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is a conflict between catalog name(s) and holdings in the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039; the offending catalog name(s) can be remapped using the BES configuration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GAH!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I still think that this is totally busted and I don&#039;t see how to fix it with out simply rewriting the OLFS to correctly work with the different catalogs in the BES which WILL change all of the URL&#039;s. The fact is that we (well ok, I) didn&#039;t get it right. And this is a pretty intractable problem otherwise. Fixing it in one of these half-baked ways just begs for the whole thing to come crashing down around us, not to mention the burden of creating an even MORE COMPLEX install and configuration procedure for our users. Maybe one of you can see a way out of this box... [[User:Ndp|ndp]] 13:35, 7 May 2009 (PDT)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Patrick seez ===&lt;br /&gt;
&lt;br /&gt;
==== In the BES ====&lt;br /&gt;
&lt;br /&gt;
instead of looking for the catalog as part of the node name, look for an attribute of the showCatalog element called catalog. If not present and ( the node attribute is not present or is empty or is slash ) then I return the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
If not present and the node is present and the node is not empty and the node is not slash then I default the catalog name to the default catalog specified in the BES configuration file.&lt;br /&gt;
&lt;br /&gt;
If present then I use that catalog name.&lt;br /&gt;
&lt;br /&gt;
In the response for &amp;lt;showCatalog /&amp;gt; I give you the list of the catalogs where the default catalog is marked with default=&amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Or perhaps there&#039;s a new command &amp;lt;showCatalogs /&amp;gt; that gives the list of catalogs?&lt;br /&gt;
&lt;br /&gt;
==== In the OLFS ====&lt;br /&gt;
&lt;br /&gt;
When the OLFS starts up make a &amp;lt;showCatalog /&amp;gt; request to get the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/ then you show them the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/catalogname then you show them the root node of that catalog&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/ (no catalog name is present) then this is an old URL, you pass this off to the BES without a catalog name, and the BES will use the default catalog.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/fnoc1.nc.das (no catalog name is present) then, again this is an old URL. Given the list of catalogs in the beginning you use the default catalog name.&lt;br /&gt;
&lt;br /&gt;
How can you tell if the catalog name is not present ... when the OLFS started up you asked for the list of catalogs. If data is not the name of a catalog then you know we are using the default catalog.&lt;br /&gt;
&lt;br /&gt;
Or ... if possible ... redirect the old URLs to one with the catalog name. Not sure if you can do this. So, if someone browses to www.example.com/opendap/data/nc then you redirect that to www.example.com/opendap/catalog/data/nc, and the same for www.example.com/opendap/data/nc/fnoc1.nc.das you redirect to www.example.com/opendap/catalog/data/nc/fnoc1.nc&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
I don&#039;t like the idea of when asked for the root node, if no catalog is specified then I give you the root for the default catalog and the names of the other catalogs. I think that if you ask for no catalog and no node then you should get the list of catalogs, including the default.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;showCatalog /&amp;gt;&lt;br /&gt;
  &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset catalog=&amp;quot;root&amp;quot;  count=&amp;quot;4&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; default=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Comments===&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Why does this matter? Do we need to use multiple catalogs for something? [[User:Jimg|jimg]] 10:43, 12 August 2009 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Yes. As we grow Hyrax we will need to support additional catalogs and services. Because both the BES and the OLFS can independently (and as part of their regular usage pattern) modify the catalog by adding either services which are connected to a URL or catalog content that is mapped into the URL space. &lt;br /&gt;
&lt;br /&gt;
:I guess one way to think of this is that the catalog for a particular instance of Hyrax is the colection of all URLs that are valid. (Where valid means that they return an HTTP status of 200.) Can&#039;t we consider the collection of URL stings to represent a tree? Doesn&#039;t it define a collection of named nodes? Some which are leaves and some which contain more stuff?&lt;br /&gt;
:--[[User:Ndp|ndp]] 09:21, 7 March 2010 (PST)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[User:pwest | Patrick]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development|Fixing the Broken Hyrax Catalogs]][[Category:Hyrax Development|Fixing the Broken Hyrax Catalogs]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6336</id>
		<title>Hyrax Catalogs</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6336"/>
		<updated>2011-04-20T23:37:39Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* What does the Patrick do differently */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hyrax/BES catalog integration issues ==&lt;br /&gt;
&lt;br /&gt;
Up until now Hyrax has been relying on only the default catalog in the BES. The default catalog is named &#039;&#039;&#039;catalog&#039;&#039;&#039; (Unfortunately for those of us reading and writing about it the word is both a proper noun and a regular noun in this context - confusing to say the least) The BES supports any number of other catalogs, each possibly representing a different repository or collection of data. For example, one catalog could be the jgofs repository, another catalog a basic directory listing of data files (default catalog does this), another could represent the CEDAR Catalog of data (based on a relational database).&lt;br /&gt;
&lt;br /&gt;
Unfortunately when the OLFS was developed it was written to rely on only the default BES catalog. This manifests in the Hyrax URLs as follows:&lt;br /&gt;
&lt;br /&gt;
The catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/&amp;lt;/nowiki&amp;gt;&#039;&#039;  refers to the top level in the default BES catalog. Accessing this URL issues the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
Notice that:&lt;br /&gt;
* The bes:showCatalog element does not specify a particular catalog, thus it implicitly specifies the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039;.&lt;br /&gt;
* The catalog URL has been reduced to a BES resource ID of &#039;&#039;/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Which is equivalent to the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;catalog:/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the OLFS had been written to support the implicit catalog organization in the BES then the correct catalog URL would have been:&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/catalog/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Changing this presents backward compatibility issues for Hyrax in that it is important that Hyrax not change the access URL&#039;s to existing data sets, catalogs, or inventories.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
The following is the agreed upon solution by James Gallagher, Nathan Potter, and Patrick West on April 20, 2011.&lt;br /&gt;
&lt;br /&gt;
The key is to maintain backward compatibility.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s say we have three catalogs.&lt;br /&gt;
&lt;br /&gt;
# The default catalog named &#039;&#039;&#039;catalog&#039;&#039;&#039;&lt;br /&gt;
# A jgofs catalog named &#039;&#039;&#039;jgofs&#039;&#039;&#039;&lt;br /&gt;
# A netcdf catalog named &#039;&#039;&#039;nc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Under the default catalog (which say points to $prefix/share/hyrax) has a single subdirectory called &#039;&#039;&#039;data&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would have the result:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;response reqID=&amp;quot;some_unique_value&amp;quot; xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset count=&amp;quot;3&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;6&amp;quot; lastModified=&amp;quot;2010-05-13T04:35:17&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;2&amp;quot; lastModified=&amp;quot;2011-04-18T18:42:44&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;9&amp;quot; lastModified=&amp;quot;2011-04-20T21:10:51&amp;quot; name=&amp;quot;nc&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;374&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Points to bring out:&lt;br /&gt;
* The default catalog root is returned as part of the result. The data directory has 6 elements under it (let&#039;s say), it is a node (has sub directories)&lt;br /&gt;
* The other two catalogs (jgofs and nc) are both listed here as part of the root of the default catalog&lt;br /&gt;
&lt;br /&gt;
A subsequent request to show the data node would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;data&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Whereas a request to show the root node of the jgofs catalog would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===So what about name clashes===&lt;br /&gt;
The default catalog always wins. So, if the root of the default catalog, in this case, had a directory called jgofs, then the request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would return the contents of the jgofs directory in the default catalog, not the root node of the jgofs catalog.&lt;br /&gt;
&lt;br /&gt;
===What does the OLFS do differently===&lt;br /&gt;
* Nothing&lt;br /&gt;
&lt;br /&gt;
===What does the BES do differently===&lt;br /&gt;
* Drop the node=&amp;quot;catalog:dir&amp;quot; notation and use node=&amp;quot;catalog/dir&amp;quot; or, in the case of the default catalog node=&amp;quot;dir&amp;quot;&lt;br /&gt;
* If the first part of the node (before a slash, or whole thing if no slash) matches the name of a catalog, then use the catalog&lt;br /&gt;
* Unless where the name matches an element in the default catalog root, at which point the default catalog wins&lt;br /&gt;
&lt;br /&gt;
===What does the Patrick do differently===&lt;br /&gt;
* Currently, in doing ncml and jgofs work, modified the request to include a catalog=&amp;quot;&amp;quot; attribute in a showCatalog request&lt;br /&gt;
** remove this attribute&lt;br /&gt;
* Somewhere (perhaps in the XML request parsing) grab the node attribute in showCatalog, grab the first part (if there is one), and see if a catalog by that name exists&lt;br /&gt;
** also need to see if it&#039;s something in the root of the default catalog (SUCKS)&lt;br /&gt;
* When showing the root, instead of displaying the names of the catalogs, display the root of the default catalog, and the names of the other catalogs&lt;br /&gt;
** if there&#039;s a duplicate between the root of the default and a catalog name, leave it in. Make the admins change this&lt;br /&gt;
* When requesting a node, if the node is in the root of the default catalog AND there&#039;s a catalog with that name, then log an error message using BESLog&lt;br /&gt;
&lt;br /&gt;
===Questions===&lt;br /&gt;
* Should the request for the root node include both the jgofs directory and the jgofs catalog? Would be confusing to user, so would say no. But might be a good thing if users send messages to the data admins to point this out.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Old Notes with Comments ==&lt;br /&gt;
&lt;br /&gt;
=== Possible Solutions ===&lt;br /&gt;
In order to acheive this compatibility the following schemes have been proposed:&lt;br /&gt;
&lt;br /&gt;
==== OLFS DispatchHandler for each catalog ====&lt;br /&gt;
&lt;br /&gt;
For each catalog that gets added to the BES a new OLFS DispatchHandler is written. This really would entail making a  copy of all the classes in the java package &#039;&#039;opendap.bes&#039;&#039; and modifying them slightly to allow for the different catalog names. It&#039;s a crummy solution because it grows the code base in a crazy way - lot&#039;s of replicate functionality that becomes a real problem to maintain as changes to the BES API will have to be implemented in multiple places in the  OLFS code base. This, I predict won&#039;t happen and things will constantly broken. &lt;br /&gt;
&lt;br /&gt;
It also means that every time someone writes a BES module that provides a complete DAP services stack and a new catalog that Hyrax will be unable to take advantage of it without having a java program written to support it. That&#039;s a bloody waste of resources.&lt;br /&gt;
&lt;br /&gt;
==== BES interprets resource ID&#039;s ====&lt;br /&gt;
&lt;br /&gt;
In lieu of specifying the catalog name explicitly in the various BES requests, the BES will look at the first part of the resource ID and compare it to its list of catalogs. If the first part of the resource ID matches a catalog name then the BES will pass the request to that catalog. Otherwise it will pass the request to the default catalog.&lt;br /&gt;
&lt;br /&gt;
===== Keep existing URLs working =====&lt;br /&gt;
&lt;br /&gt;
For example, in the catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt; http://localhost:8080/opendap/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
Would produce a resource ID of &#039;&#039;/data/nc&#039;&#039; Unless the BES actually contains a catalog named &#039;&#039;data&#039;&#039; then a catalog request for the resource ID &#039;&#039;/data/nc&#039;&#039; will be routed to the default catalog. &lt;br /&gt;
&lt;br /&gt;
===== Make the top level catalog include all of the catalogs =====&lt;br /&gt;
&lt;br /&gt;
When a request is made for the default top-level catalog:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
The BES will return a catalog containing an merging of the catalogs by name (as catalog &#039;&#039;nodes&#039;&#039;) and a listing of the top-level of the default catalog. For example if the BES has the &#039;&#039;rdh&#039;&#039;, &#039;&#039;cedar&#039;&#039;, and &#039;&#039;jgofs&#039;&#039; catalogs installed, and the default catalog contains data sets, regular files, and nodes the response might look like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset &amp;lt;font color=red&amp;gt;catalog=&amp;quot;catalog&amp;quot; (What would this be in this example?)&amp;lt;/font&amp;gt;  count=&amp;quot;13&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;578&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-11-19T20:56:15&amp;quot; name=&amp;quot;Test&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;918&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:34&amp;quot; name=&amp;quot;Trunk Monkey&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;238&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:31:56&amp;quot; name=&amp;quot;bears.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;852&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-11T16:27:59&amp;quot; name=&amp;quot;coverage&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-01-30T20:10:16&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;510&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-25T17:58:54&amp;quot; name=&amp;quot;fanfang&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;306&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-24T19:01:22&amp;quot; name=&amp;quot;fanfang.tar.gz&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;9055684&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-05T19:23:30&amp;quot; name=&amp;quot;namespaceAttributesTest.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;3396&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-02-12T21:25:11&amp;quot; name=&amp;quot;netcdf&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-17T21:45:19&amp;quot; name=&amp;quot;robots.txt&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;25&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;sst&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-30T21:47:58&amp;quot; name=&amp;quot;thredds&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;wcs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is a conflict between catalog name(s) and holdings in the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039; the offending catalog name(s) can be remapped using the BES configuration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GAH!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I still think that this is totally busted and I don&#039;t see how to fix it with out simply rewriting the OLFS to correctly work with the different catalogs in the BES which WILL change all of the URL&#039;s. The fact is that we (well ok, I) didn&#039;t get it right. And this is a pretty intractable problem otherwise. Fixing it in one of these half-baked ways just begs for the whole thing to come crashing down around us, not to mention the burden of creating an even MORE COMPLEX install and configuration procedure for our users. Maybe one of you can see a way out of this box... [[User:Ndp|ndp]] 13:35, 7 May 2009 (PDT)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Patrick seez ===&lt;br /&gt;
&lt;br /&gt;
==== In the BES ====&lt;br /&gt;
&lt;br /&gt;
instead of looking for the catalog as part of the node name, look for an attribute of the showCatalog element called catalog. If not present and ( the node attribute is not present or is empty or is slash ) then I return the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
If not present and the node is present and the node is not empty and the node is not slash then I default the catalog name to the default catalog specified in the BES configuration file.&lt;br /&gt;
&lt;br /&gt;
If present then I use that catalog name.&lt;br /&gt;
&lt;br /&gt;
In the response for &amp;lt;showCatalog /&amp;gt; I give you the list of the catalogs where the default catalog is marked with default=&amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Or perhaps there&#039;s a new command &amp;lt;showCatalogs /&amp;gt; that gives the list of catalogs?&lt;br /&gt;
&lt;br /&gt;
==== In the OLFS ====&lt;br /&gt;
&lt;br /&gt;
When the OLFS starts up make a &amp;lt;showCatalog /&amp;gt; request to get the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/ then you show them the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/catalogname then you show them the root node of that catalog&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/ (no catalog name is present) then this is an old URL, you pass this off to the BES without a catalog name, and the BES will use the default catalog.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/fnoc1.nc.das (no catalog name is present) then, again this is an old URL. Given the list of catalogs in the beginning you use the default catalog name.&lt;br /&gt;
&lt;br /&gt;
How can you tell if the catalog name is not present ... when the OLFS started up you asked for the list of catalogs. If data is not the name of a catalog then you know we are using the default catalog.&lt;br /&gt;
&lt;br /&gt;
Or ... if possible ... redirect the old URLs to one with the catalog name. Not sure if you can do this. So, if someone browses to www.example.com/opendap/data/nc then you redirect that to www.example.com/opendap/catalog/data/nc, and the same for www.example.com/opendap/data/nc/fnoc1.nc.das you redirect to www.example.com/opendap/catalog/data/nc/fnoc1.nc&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
I don&#039;t like the idea of when asked for the root node, if no catalog is specified then I give you the root for the default catalog and the names of the other catalogs. I think that if you ask for no catalog and no node then you should get the list of catalogs, including the default.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;showCatalog /&amp;gt;&lt;br /&gt;
  &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset catalog=&amp;quot;root&amp;quot;  count=&amp;quot;4&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; default=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Comments===&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Why does this matter? Do we need to use multiple catalogs for something? [[User:Jimg|jimg]] 10:43, 12 August 2009 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Yes. As we grow Hyrax we will need to support additional catalogs and services. Because both the BES and the OLFS can independently (and as part of their regular usage pattern) modify the catalog by adding either services which are connected to a URL or catalog content that is mapped into the URL space. &lt;br /&gt;
&lt;br /&gt;
:I guess one way to think of this is that the catalog for a particular instance of Hyrax is the colection of all URLs that are valid. (Where valid means that they return an HTTP status of 200.) Can&#039;t we consider the collection of URL stings to represent a tree? Doesn&#039;t it define a collection of named nodes? Some which are leaves and some which contain more stuff?&lt;br /&gt;
:--[[User:Ndp|ndp]] 09:21, 7 March 2010 (PST)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[User:pwest | Patrick]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development|Fixing the Broken Hyrax Catalogs]][[Category:Hyrax Development|Fixing the Broken Hyrax Catalogs]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6335</id>
		<title>Hyrax Catalogs</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6335"/>
		<updated>2011-04-20T23:33:43Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hyrax/BES catalog integration issues ==&lt;br /&gt;
&lt;br /&gt;
Up until now Hyrax has been relying on only the default catalog in the BES. The default catalog is named &#039;&#039;&#039;catalog&#039;&#039;&#039; (Unfortunately for those of us reading and writing about it the word is both a proper noun and a regular noun in this context - confusing to say the least) The BES supports any number of other catalogs, each possibly representing a different repository or collection of data. For example, one catalog could be the jgofs repository, another catalog a basic directory listing of data files (default catalog does this), another could represent the CEDAR Catalog of data (based on a relational database).&lt;br /&gt;
&lt;br /&gt;
Unfortunately when the OLFS was developed it was written to rely on only the default BES catalog. This manifests in the Hyrax URLs as follows:&lt;br /&gt;
&lt;br /&gt;
The catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/&amp;lt;/nowiki&amp;gt;&#039;&#039;  refers to the top level in the default BES catalog. Accessing this URL issues the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
Notice that:&lt;br /&gt;
* The bes:showCatalog element does not specify a particular catalog, thus it implicitly specifies the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039;.&lt;br /&gt;
* The catalog URL has been reduced to a BES resource ID of &#039;&#039;/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Which is equivalent to the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;catalog:/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the OLFS had been written to support the implicit catalog organization in the BES then the correct catalog URL would have been:&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/catalog/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Changing this presents backward compatibility issues for Hyrax in that it is important that Hyrax not change the access URL&#039;s to existing data sets, catalogs, or inventories.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
The following is the agreed upon solution by James Gallagher, Nathan Potter, and Patrick West on April 20, 2011.&lt;br /&gt;
&lt;br /&gt;
The key is to maintain backward compatibility.&lt;br /&gt;
&lt;br /&gt;
So let&#039;s say we have three catalogs.&lt;br /&gt;
&lt;br /&gt;
# The default catalog named &#039;&#039;&#039;catalog&#039;&#039;&#039;&lt;br /&gt;
# A jgofs catalog named &#039;&#039;&#039;jgofs&#039;&#039;&#039;&lt;br /&gt;
# A netcdf catalog named &#039;&#039;&#039;nc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Under the default catalog (which say points to $prefix/share/hyrax) has a single subdirectory called &#039;&#039;&#039;data&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would have the result:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;response reqID=&amp;quot;some_unique_value&amp;quot; xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset count=&amp;quot;3&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;6&amp;quot; lastModified=&amp;quot;2010-05-13T04:35:17&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;2&amp;quot; lastModified=&amp;quot;2011-04-18T18:42:44&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;dataset count=&amp;quot;9&amp;quot; lastModified=&amp;quot;2011-04-20T21:10:51&amp;quot; name=&amp;quot;nc&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;374&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Points to bring out:&lt;br /&gt;
* The default catalog root is returned as part of the result. The data directory has 6 elements under it (let&#039;s say), it is a node (has sub directories)&lt;br /&gt;
* The other two catalogs (jgofs and nc) are both listed here as part of the root of the default catalog&lt;br /&gt;
&lt;br /&gt;
A subsequent request to show the data node would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;data&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Whereas a request to show the root node of the jgofs catalog would look like:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===So what about name clashes===&lt;br /&gt;
The default catalog always wins. So, if the root of the default catalog, in this case, had a directory called jgofs, then the request:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;jgofs&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would return the contents of the jgofs directory in the default catalog, not the root node of the jgofs catalog.&lt;br /&gt;
&lt;br /&gt;
===What does the OLFS do differently===&lt;br /&gt;
* Nothing&lt;br /&gt;
&lt;br /&gt;
===What does the BES do differently===&lt;br /&gt;
* Drop the node=&amp;quot;catalog:dir&amp;quot; notation and use node=&amp;quot;catalog/dir&amp;quot; or, in the case of the default catalog node=&amp;quot;dir&amp;quot;&lt;br /&gt;
* If the first part of the node (before a slash, or whole thing if no slash) matches the name of a catalog, then use the catalog&lt;br /&gt;
* Unless where the name matches an element in the default catalog root, at which point the default catalog wins&lt;br /&gt;
&lt;br /&gt;
===What does the Patrick do differently===&lt;br /&gt;
* Currently, in doing ncml and jgofs work, modified the request to include a catalog=&amp;quot;&amp;quot; attribute in a showCatalog request&lt;br /&gt;
&lt;br /&gt;
===Questions===&lt;br /&gt;
* Should the request for the root node include both the jgofs directory and the jgofs catalog? Would be confusing to user, so would say no. But might be a good thing if users send messages to the data admins to point this out.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Old Notes with Comments ==&lt;br /&gt;
&lt;br /&gt;
=== Possible Solutions ===&lt;br /&gt;
In order to acheive this compatibility the following schemes have been proposed:&lt;br /&gt;
&lt;br /&gt;
==== OLFS DispatchHandler for each catalog ====&lt;br /&gt;
&lt;br /&gt;
For each catalog that gets added to the BES a new OLFS DispatchHandler is written. This really would entail making a  copy of all the classes in the java package &#039;&#039;opendap.bes&#039;&#039; and modifying them slightly to allow for the different catalog names. It&#039;s a crummy solution because it grows the code base in a crazy way - lot&#039;s of replicate functionality that becomes a real problem to maintain as changes to the BES API will have to be implemented in multiple places in the  OLFS code base. This, I predict won&#039;t happen and things will constantly broken. &lt;br /&gt;
&lt;br /&gt;
It also means that every time someone writes a BES module that provides a complete DAP services stack and a new catalog that Hyrax will be unable to take advantage of it without having a java program written to support it. That&#039;s a bloody waste of resources.&lt;br /&gt;
&lt;br /&gt;
==== BES interprets resource ID&#039;s ====&lt;br /&gt;
&lt;br /&gt;
In lieu of specifying the catalog name explicitly in the various BES requests, the BES will look at the first part of the resource ID and compare it to its list of catalogs. If the first part of the resource ID matches a catalog name then the BES will pass the request to that catalog. Otherwise it will pass the request to the default catalog.&lt;br /&gt;
&lt;br /&gt;
===== Keep existing URLs working =====&lt;br /&gt;
&lt;br /&gt;
For example, in the catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt; http://localhost:8080/opendap/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
Would produce a resource ID of &#039;&#039;/data/nc&#039;&#039; Unless the BES actually contains a catalog named &#039;&#039;data&#039;&#039; then a catalog request for the resource ID &#039;&#039;/data/nc&#039;&#039; will be routed to the default catalog. &lt;br /&gt;
&lt;br /&gt;
===== Make the top level catalog include all of the catalogs =====&lt;br /&gt;
&lt;br /&gt;
When a request is made for the default top-level catalog:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
The BES will return a catalog containing an merging of the catalogs by name (as catalog &#039;&#039;nodes&#039;&#039;) and a listing of the top-level of the default catalog. For example if the BES has the &#039;&#039;rdh&#039;&#039;, &#039;&#039;cedar&#039;&#039;, and &#039;&#039;jgofs&#039;&#039; catalogs installed, and the default catalog contains data sets, regular files, and nodes the response might look like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset &amp;lt;font color=red&amp;gt;catalog=&amp;quot;catalog&amp;quot; (What would this be in this example?)&amp;lt;/font&amp;gt;  count=&amp;quot;13&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;578&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-11-19T20:56:15&amp;quot; name=&amp;quot;Test&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;918&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:34&amp;quot; name=&amp;quot;Trunk Monkey&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;238&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:31:56&amp;quot; name=&amp;quot;bears.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;852&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-11T16:27:59&amp;quot; name=&amp;quot;coverage&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-01-30T20:10:16&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;510&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-25T17:58:54&amp;quot; name=&amp;quot;fanfang&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;306&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-24T19:01:22&amp;quot; name=&amp;quot;fanfang.tar.gz&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;9055684&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-05T19:23:30&amp;quot; name=&amp;quot;namespaceAttributesTest.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;3396&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-02-12T21:25:11&amp;quot; name=&amp;quot;netcdf&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-17T21:45:19&amp;quot; name=&amp;quot;robots.txt&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;25&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;sst&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-30T21:47:58&amp;quot; name=&amp;quot;thredds&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;wcs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is a conflict between catalog name(s) and holdings in the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039; the offending catalog name(s) can be remapped using the BES configuration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GAH!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I still think that this is totally busted and I don&#039;t see how to fix it with out simply rewriting the OLFS to correctly work with the different catalogs in the BES which WILL change all of the URL&#039;s. The fact is that we (well ok, I) didn&#039;t get it right. And this is a pretty intractable problem otherwise. Fixing it in one of these half-baked ways just begs for the whole thing to come crashing down around us, not to mention the burden of creating an even MORE COMPLEX install and configuration procedure for our users. Maybe one of you can see a way out of this box... [[User:Ndp|ndp]] 13:35, 7 May 2009 (PDT)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Patrick seez ===&lt;br /&gt;
&lt;br /&gt;
==== In the BES ====&lt;br /&gt;
&lt;br /&gt;
instead of looking for the catalog as part of the node name, look for an attribute of the showCatalog element called catalog. If not present and ( the node attribute is not present or is empty or is slash ) then I return the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
If not present and the node is present and the node is not empty and the node is not slash then I default the catalog name to the default catalog specified in the BES configuration file.&lt;br /&gt;
&lt;br /&gt;
If present then I use that catalog name.&lt;br /&gt;
&lt;br /&gt;
In the response for &amp;lt;showCatalog /&amp;gt; I give you the list of the catalogs where the default catalog is marked with default=&amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Or perhaps there&#039;s a new command &amp;lt;showCatalogs /&amp;gt; that gives the list of catalogs?&lt;br /&gt;
&lt;br /&gt;
==== In the OLFS ====&lt;br /&gt;
&lt;br /&gt;
When the OLFS starts up make a &amp;lt;showCatalog /&amp;gt; request to get the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/ then you show them the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/catalogname then you show them the root node of that catalog&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/ (no catalog name is present) then this is an old URL, you pass this off to the BES without a catalog name, and the BES will use the default catalog.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/fnoc1.nc.das (no catalog name is present) then, again this is an old URL. Given the list of catalogs in the beginning you use the default catalog name.&lt;br /&gt;
&lt;br /&gt;
How can you tell if the catalog name is not present ... when the OLFS started up you asked for the list of catalogs. If data is not the name of a catalog then you know we are using the default catalog.&lt;br /&gt;
&lt;br /&gt;
Or ... if possible ... redirect the old URLs to one with the catalog name. Not sure if you can do this. So, if someone browses to www.example.com/opendap/data/nc then you redirect that to www.example.com/opendap/catalog/data/nc, and the same for www.example.com/opendap/data/nc/fnoc1.nc.das you redirect to www.example.com/opendap/catalog/data/nc/fnoc1.nc&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
I don&#039;t like the idea of when asked for the root node, if no catalog is specified then I give you the root for the default catalog and the names of the other catalogs. I think that if you ask for no catalog and no node then you should get the list of catalogs, including the default.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;showCatalog /&amp;gt;&lt;br /&gt;
  &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset catalog=&amp;quot;root&amp;quot;  count=&amp;quot;4&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; default=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Comments===&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Why does this matter? Do we need to use multiple catalogs for something? [[User:Jimg|jimg]] 10:43, 12 August 2009 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Yes. As we grow Hyrax we will need to support additional catalogs and services. Because both the BES and the OLFS can independently (and as part of their regular usage pattern) modify the catalog by adding either services which are connected to a URL or catalog content that is mapped into the URL space. &lt;br /&gt;
&lt;br /&gt;
:I guess one way to think of this is that the catalog for a particular instance of Hyrax is the colection of all URLs that are valid. (Where valid means that they return an HTTP status of 200.) Can&#039;t we consider the collection of URL stings to represent a tree? Doesn&#039;t it define a collection of named nodes? Some which are leaves and some which contain more stuff?&lt;br /&gt;
:--[[User:Ndp|ndp]] 09:21, 7 March 2010 (PST)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[User:pwest | Patrick]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development|Fixing the Broken Hyrax Catalogs]][[Category:Hyrax Development|Fixing the Broken Hyrax Catalogs]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Fixing_the_(currently)_broken_Hyrax_catalogs&amp;diff=6334</id>
		<title>Fixing the (currently) broken Hyrax catalogs</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Fixing_the_(currently)_broken_Hyrax_catalogs&amp;diff=6334"/>
		<updated>2011-04-20T23:06:45Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: Fixing the (currently) broken Hyrax catalogs moved to Hyrax Catalogs: James said so&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Hyrax Catalogs]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6333</id>
		<title>Hyrax Catalogs</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6333"/>
		<updated>2011-04-20T23:06:45Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: Fixing the (currently) broken Hyrax catalogs moved to Hyrax Catalogs: James said so&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hyrax/BES catalog integration issues ==&lt;br /&gt;
&lt;br /&gt;
Up until now Hyrax has been relying on only the default catalog in the BES. The default catalog is named &#039;&#039;&#039;catalog&#039;&#039;&#039; (Unfortunately for those of us reading and writing about it the word is both a proper noun and a regular noun in this context - confusing to say the least) The BES supports any number of other catalogs, all of which have default names that can be remapped if needed through the BES configuration.(&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Patrick: Is that true? If not it should be.&amp;lt;/font&amp;gt; - yes, this is true. Could be called something different in the configuration file)&lt;br /&gt;
&lt;br /&gt;
Unfortunately when Hyrax was developed it was written to rely on only the default BES catalog. This manifests in the Hyrax URLs as follows:&lt;br /&gt;
&lt;br /&gt;
The catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/&amp;lt;/nowiki&amp;gt;&#039;&#039;  refers to the top level in the default BES catalog. Accessing this URL issues the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
Notice that:&lt;br /&gt;
* The bes:showCatalog element does not specify a particular catalog, thus it implicitly specifies the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039;.&lt;br /&gt;
* The catalog URL has been reduced to a BES resource ID of &#039;&#039;/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Which is equivalent to the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;catalog:/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
: &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Patrick: Is that true? How do you &amp;quot;do&amp;quot; a bes:showCatalog for a particular catalog? It&#039;s not documented here: [[BES XML Commands]]&amp;lt;/font&amp;gt; - [[User:ndp]]&lt;br /&gt;
: I changed the documentation at the BES XML Commands page and modified the request document above for showing the root node of the catalog named &amp;quot;catalog&amp;quot;. This needs to change. Should be able to say &amp;lt;bes:showCatalog catalog=&amp;quot;catname&amp;quot; node=&amp;quot;/&amp;quot; /&amp;gt; - [[User:pwest]]&lt;br /&gt;
&lt;br /&gt;
If Hyrax had been written to support the implicit catalog organization in the BES then the correct catalog URL would have been:&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/catalog/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Changing this presents backward compatibility issues for Hyrax in that it is important that Hyrax not change the access URL&#039;s to existing data sets, catalogs, or inventories.&lt;br /&gt;
&lt;br /&gt;
== Possible Solutions ==&lt;br /&gt;
In order to acheive this compatibility the following schemes have been proposed:&lt;br /&gt;
&lt;br /&gt;
==== OLFS DispatchHandler for each catalog ====&lt;br /&gt;
&lt;br /&gt;
For each catalog that gets added to the BES a new OLFS DispatchHandler is written. This really would entail making a  copy of all the classes in the java package &#039;&#039;opendap.bes&#039;&#039; and modifying them slightly to allow for the different catalog names. It&#039;s a crummy solution because it grows the code base in a crazy way - lot&#039;s of replicate functionality that becomes a real problem to maintain as changes to the BES API will have to be implemented in multiple places in the  OLFS code base. This, I predict won&#039;t happen and things will constantly broken. &lt;br /&gt;
&lt;br /&gt;
It also means that every time someone writes a BES module that provides a complete DAP services stack and a new catalog that Hyrax will be unable to take advantage of it without having a java program written to support it. That&#039;s a bloody waste of resources.&lt;br /&gt;
&lt;br /&gt;
==== BES interprets resource ID&#039;s ====&lt;br /&gt;
&lt;br /&gt;
In lieu of specifying the catalog name explicitly in the various BES requests, the BES will look at the first part of the resource ID and compare it to its list of catalogs. If the first part of the resource ID matches a catalog name then the BES will pass the request to that catalog. Otherwise it will pass the request to the default catalog.&lt;br /&gt;
&lt;br /&gt;
===== Keep existing URLs working =====&lt;br /&gt;
&lt;br /&gt;
For example, in the catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt; http://localhost:8080/opendap/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
Would produce a resource ID of &#039;&#039;/data/nc&#039;&#039; Unless the BES actually contains a catalog named &#039;&#039;data&#039;&#039; then a catalog request for the resource ID &#039;&#039;/data/nc&#039;&#039; will be routed to the default catalog. &lt;br /&gt;
&lt;br /&gt;
===== Make the top level catalog include all of the catalogs =====&lt;br /&gt;
&lt;br /&gt;
When a request is made for the default top-level catalog:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
The BES will return a catalog containing an merging of the catalogs by name (as catalog &#039;&#039;nodes&#039;&#039;) and a listing of the top-level of the default catalog. For example if the BES has the &#039;&#039;rdh&#039;&#039;, &#039;&#039;cedar&#039;&#039;, and &#039;&#039;jgofs&#039;&#039; catalogs installed, and the default catalog contains data sets, regular files, and nodes the response might look like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset &amp;lt;font color=red&amp;gt;catalog=&amp;quot;catalog&amp;quot; (What would this be in this example?)&amp;lt;/font&amp;gt;  count=&amp;quot;13&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;578&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-11-19T20:56:15&amp;quot; name=&amp;quot;Test&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;918&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:34&amp;quot; name=&amp;quot;Trunk Monkey&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;238&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:31:56&amp;quot; name=&amp;quot;bears.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;852&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-11T16:27:59&amp;quot; name=&amp;quot;coverage&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-01-30T20:10:16&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;510&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-25T17:58:54&amp;quot; name=&amp;quot;fanfang&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;306&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-24T19:01:22&amp;quot; name=&amp;quot;fanfang.tar.gz&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;9055684&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-05T19:23:30&amp;quot; name=&amp;quot;namespaceAttributesTest.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;3396&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-02-12T21:25:11&amp;quot; name=&amp;quot;netcdf&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-17T21:45:19&amp;quot; name=&amp;quot;robots.txt&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;25&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;sst&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-30T21:47:58&amp;quot; name=&amp;quot;thredds&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;wcs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is a conflict between catalog name(s) and holdings in the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039; the offending catalog name(s) can be remapped using the BES configuration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GAH!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I still think that this is totally busted and I don&#039;t see how to fix it with out simply rewriting the OLFS to correctly work with the different catalogs in the BES which WILL change all of the URL&#039;s. The fact is that we (well ok, I) didn&#039;t get it right. And this is a pretty intractable problem otherwise. Fixing it in one of these half-baked ways just begs for the whole thing to come crashing down around us, not to mention the burden of creating an even MORE COMPLEX install and configuration procedure for our users. Maybe one of you can see a way out of this box... [[User:Ndp|ndp]] 13:35, 7 May 2009 (PDT)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Patrick seez ==&lt;br /&gt;
&lt;br /&gt;
==== In the BES ====&lt;br /&gt;
&lt;br /&gt;
instead of looking for the catalog as part of the node name, look for an attribute of the showCatalog element called catalog. If not present and ( the node attribute is not present or is empty or is slash ) then I return the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
If not present and the node is present and the node is not empty and the node is not slash then I default the catalog name to the default catalog specified in the BES configuration file.&lt;br /&gt;
&lt;br /&gt;
If present then I use that catalog name.&lt;br /&gt;
&lt;br /&gt;
In the response for &amp;lt;showCatalog /&amp;gt; I give you the list of the catalogs where the default catalog is marked with default=&amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Or perhaps there&#039;s a new command &amp;lt;showCatalogs /&amp;gt; that gives the list of catalogs?&lt;br /&gt;
&lt;br /&gt;
==== In the OLFS ====&lt;br /&gt;
&lt;br /&gt;
When the OLFS starts up make a &amp;lt;showCatalog /&amp;gt; request to get the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/ then you show them the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/catalogname then you show them the root node of that catalog&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/ (no catalog name is present) then this is an old URL, you pass this off to the BES without a catalog name, and the BES will use the default catalog.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/fnoc1.nc.das (no catalog name is present) then, again this is an old URL. Given the list of catalogs in the beginning you use the default catalog name.&lt;br /&gt;
&lt;br /&gt;
How can you tell if the catalog name is not present ... when the OLFS started up you asked for the list of catalogs. If data is not the name of a catalog then you know we are using the default catalog.&lt;br /&gt;
&lt;br /&gt;
Or ... if possible ... redirect the old URLs to one with the catalog name. Not sure if you can do this. So, if someone browses to www.example.com/opendap/data/nc then you redirect that to www.example.com/opendap/catalog/data/nc, and the same for www.example.com/opendap/data/nc/fnoc1.nc.das you redirect to www.example.com/opendap/catalog/data/nc/fnoc1.nc&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
I don&#039;t like the idea of when asked for the root node, if no catalog is specified then I give you the root for the default catalog and the names of the other catalogs. I think that if you ask for no catalog and no node then you should get the list of catalogs, including the default.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;showCatalog /&amp;gt;&lt;br /&gt;
  &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset catalog=&amp;quot;root&amp;quot;  count=&amp;quot;4&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; default=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Why does this matter? Do we need to use multiple catalogs for something? [[User:Jimg|jimg]] 10:43, 12 August 2009 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Yes. As we grow Hyrax we will need to support additional catalogs and services. Because both the BES and the OLFS can independently (and as part of their regular usage pattern) modify the catalog by adding either services which are connected to a URL or catalog content that is mapped into the URL space. &lt;br /&gt;
&lt;br /&gt;
:I guess one way to think of this is that the catalog for a particular instance of Hyrax is the colection of all URLs that are valid. (Where valid means that they return an HTTP status of 200.) Can&#039;t we consider the collection of URL stings to represent a tree? Doesn&#039;t it define a collection of named nodes? Some which are leaves and some which contain more stuff?&lt;br /&gt;
:--[[User:Ndp|ndp]] 09:21, 7 March 2010 (PST)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[User:pwest | Patrick]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development|Fixing the Broken Hyrax Catalogs]][[Category:Hyrax Development|Fixing the Broken Hyrax Catalogs]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6323</id>
		<title>Hyrax Catalogs</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6323"/>
		<updated>2011-04-17T06:00:22Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hyrax/BES catalog integration issues ==&lt;br /&gt;
&lt;br /&gt;
Up until now Hyrax has been relying on only the default catalog in the BES. The default catalog is named &#039;&#039;&#039;catalog&#039;&#039;&#039; (Unfortunately for those of us reading and writing about it the word is both a proper noun and a regular noun in this context - confusing to say the least) The BES supports any number of other catalogs, all of which have default names that can be remapped if needed through the BES configuration.(&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Patrick: Is that true? If not it should be.&amp;lt;/font&amp;gt; - yes, this is true. Could be called something different in the configuration file)&lt;br /&gt;
&lt;br /&gt;
Unfortunately when Hyrax was developed it was written to rely on only the default BES catalog. This manifests in the Hyrax URLs as follows:&lt;br /&gt;
&lt;br /&gt;
The catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/&amp;lt;/nowiki&amp;gt;&#039;&#039;  refers to the top level in the default BES catalog. Accessing this URL issues the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
Notice that:&lt;br /&gt;
* The bes:showCatalog element does not specify a particular catalog, thus it implicitly specifies the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039;.&lt;br /&gt;
* The catalog URL has been reduced to a BES resource ID of &#039;&#039;/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Which is equivalent to the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;catalog:/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
: &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Patrick: Is that true? How do you &amp;quot;do&amp;quot; a bes:showCatalog for a particular catalog? It&#039;s not documented here: [[BES XML Commands]]&amp;lt;/font&amp;gt; - [[User:ndp]]&lt;br /&gt;
: I changed the documentation at the BES XML Commands page and modified the request document above for showing the root node of the catalog named &amp;quot;catalog&amp;quot;. This needs to change. Should be able to say &amp;lt;bes:showCatalog catalog=&amp;quot;catname&amp;quot; node=&amp;quot;/&amp;quot; /&amp;gt; - [[User:pwest]]&lt;br /&gt;
&lt;br /&gt;
If Hyrax had been written to support the implicit catalog organization in the BES then the correct catalog URL would have been:&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/catalog/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Changing this presents backward compatibility issues for Hyrax in that it is important that Hyrax not change the access URL&#039;s to existing data sets, catalogs, or inventories.&lt;br /&gt;
&lt;br /&gt;
== Possible Solutions ==&lt;br /&gt;
In order to acheive this compatibility the following schemes have been proposed:&lt;br /&gt;
&lt;br /&gt;
==== OLFS DispatchHandler for each catalog ====&lt;br /&gt;
&lt;br /&gt;
For each catalog that gets added to the BES a new OLFS DispatchHandler is written. This really would entail making a  copy of all the classes in the java package &#039;&#039;opendap.bes&#039;&#039; and modifying them slightly to allow for the different catalog names. It&#039;s a crummy solution because it grows the code base in a crazy way - lot&#039;s of replicate functionality that becomes a real problem to maintain as changes to the BES API will have to be implemented in multiple places in the  OLFS code base. This, I predict won&#039;t happen and things will constantly broken. &lt;br /&gt;
&lt;br /&gt;
It also means that every time someone writes a BES module that provides a complete DAP services stack and a new catalog that Hyrax will be unable to take advantage of it without having a java program written to support it. That&#039;s a bloody waste of resources.&lt;br /&gt;
&lt;br /&gt;
==== BES interprets resource ID&#039;s ====&lt;br /&gt;
&lt;br /&gt;
In lieu of specifying the catalog name explicitly in the various BES requests, the BES will look at the first part of the resource ID and compare it to its list of catalogs. If the first part of the resource ID matches a catalog name then the BES will pass the request to that catalog. Otherwise it will pass the request to the default catalog.&lt;br /&gt;
&lt;br /&gt;
===== Keep existing URLs working =====&lt;br /&gt;
&lt;br /&gt;
For example, in the catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt; http://localhost:8080/opendap/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
Would produce a resource ID of &#039;&#039;/data/nc&#039;&#039; Unless the BES actually contains a catalog named &#039;&#039;data&#039;&#039; then a catalog request for the resource ID &#039;&#039;/data/nc&#039;&#039; will be routed to the default catalog. &lt;br /&gt;
&lt;br /&gt;
===== Make the top level catalog include all of the catalogs =====&lt;br /&gt;
&lt;br /&gt;
When a request is made for the default top-level catalog:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
The BES will return a catalog containing an merging of the catalogs by name (as catalog &#039;&#039;nodes&#039;&#039;) and a listing of the top-level of the default catalog. For example if the BES has the &#039;&#039;rdh&#039;&#039;, &#039;&#039;cedar&#039;&#039;, and &#039;&#039;jgofs&#039;&#039; catalogs installed, and the default catalog contains data sets, regular files, and nodes the response might look like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset &amp;lt;font color=red&amp;gt;catalog=&amp;quot;catalog&amp;quot; (What would this be in this example?)&amp;lt;/font&amp;gt;  count=&amp;quot;13&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;578&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-11-19T20:56:15&amp;quot; name=&amp;quot;Test&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;918&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:34&amp;quot; name=&amp;quot;Trunk Monkey&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;238&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:31:56&amp;quot; name=&amp;quot;bears.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;852&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-11T16:27:59&amp;quot; name=&amp;quot;coverage&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-01-30T20:10:16&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;510&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-25T17:58:54&amp;quot; name=&amp;quot;fanfang&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;306&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-24T19:01:22&amp;quot; name=&amp;quot;fanfang.tar.gz&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;9055684&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-05T19:23:30&amp;quot; name=&amp;quot;namespaceAttributesTest.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;3396&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-02-12T21:25:11&amp;quot; name=&amp;quot;netcdf&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-17T21:45:19&amp;quot; name=&amp;quot;robots.txt&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;25&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;sst&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-30T21:47:58&amp;quot; name=&amp;quot;thredds&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;wcs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is a conflict between catalog name(s) and holdings in the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039; the offending catalog name(s) can be remapped using the BES configuration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GAH!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I still think that this is totally busted and I don&#039;t see how to fix it with out simply rewriting the OLFS to correctly work with the different catalogs in the BES which WILL change all of the URL&#039;s. The fact is that we (well ok, I) didn&#039;t get it right. And this is a pretty intractable problem otherwise. Fixing it in one of these half-baked ways just begs for the whole thing to come crashing down around us, not to mention the burden of creating an even MORE COMPLEX install and configuration procedure for our users. Maybe one of you can see a way out of this box... [[User:Ndp|ndp]] 13:35, 7 May 2009 (PDT)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Patrick seez ==&lt;br /&gt;
&lt;br /&gt;
==== In the BES ====&lt;br /&gt;
&lt;br /&gt;
instead of looking for the catalog as part of the node name, look for an attribute of the showCatalog element called catalog. If not present and ( the node attribute is not present or is empty or is slash ) then I return the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
If not present and the node is present and the node is not empty and the node is not slash then I default the catalog name to the default catalog specified in the BES configuration file.&lt;br /&gt;
&lt;br /&gt;
If present then I use that catalog name.&lt;br /&gt;
&lt;br /&gt;
In the response for &amp;lt;showCatalog /&amp;gt; I give you the list of the catalogs where the default catalog is marked with default=&amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Or perhaps there&#039;s a new command &amp;lt;showCatalogs /&amp;gt; that gives the list of catalogs?&lt;br /&gt;
&lt;br /&gt;
==== In the OLFS ====&lt;br /&gt;
&lt;br /&gt;
When the OLFS starts up make a &amp;lt;showCatalog /&amp;gt; request to get the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/ then you show them the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/catalogname then you show them the root node of that catalog&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/ (no catalog name is present) then this is an old URL, you pass this off to the BES without a catalog name, and the BES will use the default catalog.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/fnoc1.nc.das (no catalog name is present) then, again this is an old URL. Given the list of catalogs in the beginning you use the default catalog name.&lt;br /&gt;
&lt;br /&gt;
How can you tell if the catalog name is not present ... when the OLFS started up you asked for the list of catalogs. If data is not the name of a catalog then you know we are using the default catalog.&lt;br /&gt;
&lt;br /&gt;
Or ... if possible ... redirect the old URLs to one with the catalog name. Not sure if you can do this. So, if someone browses to www.example.com/opendap/data/nc then you redirect that to www.example.com/opendap/catalog/data/nc, and the same for www.example.com/opendap/data/nc/fnoc1.nc.das you redirect to www.example.com/opendap/catalog/data/nc/fnoc1.nc&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
I don&#039;t like the idea of when asked for the root node, if no catalog is specified then I give you the root for the default catalog and the names of the other catalogs. I think that if you ask for no catalog and no node then you should get the list of catalogs, including the default.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;showCatalog /&amp;gt;&lt;br /&gt;
  &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset catalog=&amp;quot;root&amp;quot;  count=&amp;quot;4&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; default=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Why does this matter? Do we need to use multiple catalogs for something? [[User:Jimg|jimg]] 10:43, 12 August 2009 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Yes. As we grow Hyrax we will need to support additional catalogs and services. Because both the BES and the OLFS can independently (and as part of their regular usage pattern) modify the catalog by adding either services which are connected to a URL or catalog content that is mapped into the URL space. &lt;br /&gt;
&lt;br /&gt;
:I guess one way to think of this is that the catalog for a particular instance of Hyrax is the colection of all URLs that are valid. (Where valid means that they return an HTTP status of 200.) Can&#039;t we consider the collection of URL stings to represent a tree? Doesn&#039;t it define a collection of named nodes? Some which are leaves and some which contain more stuff?&lt;br /&gt;
:--[[User:Ndp|ndp]] 09:21, 7 March 2010 (PST)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[User:pwest | Patrick]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development|Fixing the Broken Hyrax Catalogs]][[Category:Hyrax Development|Fixing the Broken Hyrax Catalogs]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6322</id>
		<title>Hyrax Catalogs</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6322"/>
		<updated>2011-04-17T05:39:02Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hyrax/BES catalog integration issues ==&lt;br /&gt;
&lt;br /&gt;
Up until now Hyrax has been relying on only the default catalog in the BES. The default catalog is named &#039;&#039;&#039;catalog&#039;&#039;&#039; (Unfortunately for those of us reading and writing about it the word is both a proper noun and a regular noun in this context - confusing to say the least) The BES supports any number of other catalogs, all of which have default names that can be remapped if needed through the BES configuration.(&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Patrick: Is that true? If not it should be.&amp;lt;/font&amp;gt; - yes, this is true. Could be called something different in the configuration file)&lt;br /&gt;
&lt;br /&gt;
Unfortunately when Hyrax was developed it was written to rely on only the default BES catalog. This manifests in the Hyrax URLs as follows:&lt;br /&gt;
&lt;br /&gt;
The catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/&amp;lt;/nowiki&amp;gt;&#039;&#039;  refers to the top level in the default BES catalog. Accessing this URL issues the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog/&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
Notice that:&lt;br /&gt;
* The bes:showCatalog element does not specify a particular catalog, thus it implicitly specifies the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039;.&lt;br /&gt;
* The catalog URL has been reduced to a BES resource ID of &#039;&#039;/&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Which is equivalent to the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;catalog:/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
: &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Patrick: Is that true? How do you &amp;quot;do&amp;quot; a bes:showCatalog for a particular catalog? It&#039;s not documented here: [[BES XML Commands]]&amp;lt;/font&amp;gt; - [[User:ndp]]&lt;br /&gt;
: I changed the documentation at the BES XML Commands page and modified the request document above for showing the root node of the catalog named &amp;quot;catalog&amp;quot;. This needs to change. Should be able to say &amp;lt;bes:showCatalog catalog=&amp;quot;catname&amp;quot; node=&amp;quot;/&amp;quot; /&amp;gt; - [[User:pwest]]&lt;br /&gt;
&lt;br /&gt;
If Hyrax had been written to support the implicit catalog organization in the BES the the correct catalog URL would have been:&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/catalog/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Changing this presents backward compatibility issues for Hyrax in that it is important that Hyrax not change the access URL&#039;s to existing data sets, catalogs, or inventories.&lt;br /&gt;
&lt;br /&gt;
== Possible Solutions ==&lt;br /&gt;
In order to acheive this compatibility the following schemes have been proposed:&lt;br /&gt;
&lt;br /&gt;
==== OLFS DispatchHandler for each catalog ====&lt;br /&gt;
&lt;br /&gt;
For each catalog that gets added to the BES a new OLFS DispatchHandler is written. This really would entail making a  copy of all the classes in the java package &#039;&#039;opendap.bes&#039;&#039; and modifying them slightly to allow for the different catalog names. It&#039;s a crummy solution because it grows the code base in a crazy way - lot&#039;s of replicate functionality that becomes a real problem to maintain as changes to the BES API will have to be implemented in multiple places in the  OLFS code base. This, I predict won&#039;t happen and things will constantly broken. &lt;br /&gt;
&lt;br /&gt;
It also means that every time someone writes a BES module that provides a complete DAP services stack and a new catalog that Hyrax will be unable to take advantage of it without having a java program written to support it. That&#039;s a bloody waste of resources.&lt;br /&gt;
&lt;br /&gt;
==== BES interprets resource ID&#039;s ====&lt;br /&gt;
&lt;br /&gt;
In lieu of specifying the catalog name explicitly in the various BES requests, the BES will look at the first part of the resource ID and compare it to its list of catalogs. If the first part of the resource ID matches a catalog name then the BES will pass the request to that catalog. Otherwise it will pass the request to the default catalog.&lt;br /&gt;
&lt;br /&gt;
===== Keep existing URLs working =====&lt;br /&gt;
&lt;br /&gt;
For example, in the catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt; http://localhost:8080/opendap/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
Would produce a resource ID of &#039;&#039;/data/nc&#039;&#039; Unless the BES actually contains a catalog named &#039;&#039;data&#039;&#039; then a catalog request for the resource ID &#039;&#039;/data/nc&#039;&#039; will be routed to the default catalog. &lt;br /&gt;
&lt;br /&gt;
===== Make the top level catalog include all of the catalogs =====&lt;br /&gt;
&lt;br /&gt;
When a request is made for the default top-level catalog:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
The BES will return a catalog containing an merging of the catalogs by name (as catalog &#039;&#039;nodes&#039;&#039;) and a listing of the top-level of the default catalog. For example if the BES has the &#039;&#039;rdh&#039;&#039;, &#039;&#039;cedar&#039;&#039;, and &#039;&#039;jgofs&#039;&#039; catalogs installed, and the default catalog contains data sets, regular files, and nodes the response might look like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset &amp;lt;font color=red&amp;gt;catalog=&amp;quot;catalog&amp;quot; (What would this be in this example?)&amp;lt;/font&amp;gt;  count=&amp;quot;13&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;578&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-11-19T20:56:15&amp;quot; name=&amp;quot;Test&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;918&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:34&amp;quot; name=&amp;quot;Trunk Monkey&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;238&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:31:56&amp;quot; name=&amp;quot;bears.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;852&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-11T16:27:59&amp;quot; name=&amp;quot;coverage&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-01-30T20:10:16&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;510&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-25T17:58:54&amp;quot; name=&amp;quot;fanfang&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;306&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-24T19:01:22&amp;quot; name=&amp;quot;fanfang.tar.gz&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;9055684&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-05T19:23:30&amp;quot; name=&amp;quot;namespaceAttributesTest.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;3396&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-02-12T21:25:11&amp;quot; name=&amp;quot;netcdf&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-17T21:45:19&amp;quot; name=&amp;quot;robots.txt&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;25&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;sst&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-30T21:47:58&amp;quot; name=&amp;quot;thredds&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;wcs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is a conflict between catalog name(s) and holdings in the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039; the offending catalog name(s) can be remapped using the BES configuration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GAH!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I still think that this is totally busted and I don&#039;t see how to fix it with out simply rewriting the OLFS to correctly work with the different catalogs in the BES which WILL change all of the URL&#039;s. The fact is that we (well ok, I) didn&#039;t get it right. And this is a pretty intractable problem otherwise. Fixing it in one of these half-baked ways just begs for the whole thing to come crashing down around us, not to mention the burden of creating an even MORE COMPLEX install and configuration procedure for our users. Maybe one of you can see a way out of this box... [[User:Ndp|ndp]] 13:35, 7 May 2009 (PDT)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Patrick seez ==&lt;br /&gt;
&lt;br /&gt;
==== In the BES ====&lt;br /&gt;
&lt;br /&gt;
instead of looking for the catalog as part of the node name, look for an attribute of the showCatalog element called catalog. If not present and ( the node attribute is not present or is empty or is slash ) then I return the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
If not present and the node is present and the node is not empty and the node is not slash then I default the catalog name to the default catalog specified in the BES configuration file.&lt;br /&gt;
&lt;br /&gt;
If present then I use that catalog name.&lt;br /&gt;
&lt;br /&gt;
In the response for &amp;lt;showCatalog /&amp;gt; I give you the list of the catalogs where the default catalog is marked with default=&amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Or perhaps there&#039;s a new command &amp;lt;showCatalogs /&amp;gt; that gives the list of catalogs?&lt;br /&gt;
&lt;br /&gt;
==== In the OLFS ====&lt;br /&gt;
&lt;br /&gt;
When the OLFS starts up make a &amp;lt;showCatalog /&amp;gt; request to get the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/ then you show them the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/catalogname then you show them the root node of that catalog&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/ (no catalog name is present) then this is an old URL, you pass this off to the BES without a catalog name, and the BES will use the default catalog.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/fnoc1.nc.das (no catalog name is present) then, again this is an old URL. Given the list of catalogs in the beginning you use the default catalog name.&lt;br /&gt;
&lt;br /&gt;
How can you tell if the catalog name is not present ... when the OLFS started up you asked for the list of catalogs. If data is not the name of a catalog then you know we are using the default catalog.&lt;br /&gt;
&lt;br /&gt;
Or ... if possible ... redirect the old URLs to one with the catalog name. Not sure if you can do this. So, if someone browses to www.example.com/opendap/data/nc then you redirect that to www.example.com/opendap/catalog/data/nc, and the same for www.example.com/opendap/data/nc/fnoc1.nc.das you redirect to www.example.com/opendap/catalog/data/nc/fnoc1.nc&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
I don&#039;t like the idea of when asked for the root node, if no catalog is specified then I give you the root for the default catalog and the names of the other catalogs. I thing that if you ask for no catalog and no node then you should get the list of catalogs, including the default.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;showCatalog /&amp;gt;&lt;br /&gt;
  &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset catalog=&amp;quot;root&amp;quot;  count=&amp;quot;4&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; default=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Why does this matter? Do we need to use multiple catalogs for something? [[User:Jimg|jimg]] 10:43, 12 August 2009 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Yes. As we grow Hyrax we will need to support additional catalogs and services. Because both the BES and the OLFS can independently (and as part of their regular usage pattern) modify the catalog by adding either services which are connected to a URL or catalog content that is mapped into the URL space. &lt;br /&gt;
&lt;br /&gt;
:I guess one way to think of this is that the catalog for a particular instance of Hyrax is the colection of all URLs that are valid. (Where valid means that they return an HTTP status of 200.) Can&#039;t we consider the collection of URL stings to represent a tree? Doesn&#039;t it define a collection of named nodes? Some which are leaves and some which contain more stuff?&lt;br /&gt;
:--[[User:Ndp|ndp]] 09:21, 7 March 2010 (PST)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[User:pwest | Patrick]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development|Fixing the Broken Hyrax Catalogs]][[Category:Hyrax Development|Fixing the Broken Hyrax Catalogs]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6321</id>
		<title>Hyrax Catalogs</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_Catalogs&amp;diff=6321"/>
		<updated>2011-04-17T05:28:53Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hyrax/BES catalog integration issues ==&lt;br /&gt;
&lt;br /&gt;
Up until now Hyrax has been relying on only the default catalog in the BES. The default catalog is named &#039;&#039;&#039;catalog&#039;&#039;&#039; (Unfortunately for those of us reading and writing about it the word is both a proper noun and a regular noun in this context - confusing to say the least) The BES supports any number of other catalogs, all of which have default names that can be remapped if needed through the BES configuration.(&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Patrick: Is that true? If not it should be.&amp;lt;/font&amp;gt; - yes, this is true. Could be called something different in the configuration file)&lt;br /&gt;
&lt;br /&gt;
Unfortunately when Hyrax was developed it was written to rely on only the default BES catalog. This manifests in the Hyrax URLs as follows:&lt;br /&gt;
&lt;br /&gt;
The catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;  refers to the top level in the default BES catalog. Accessing this URL issues the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;/data/nc&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
Notice that:&lt;br /&gt;
* The bes:showCatalog element does not specify a particular catalog, thus it implicitly specifies the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039;.&lt;br /&gt;
* The catalog URL ahs been reduced to a BES resource ID of &#039;&#039;/data/nc&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Which is equivalent to the BES command:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;catalog:/data/nc&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
: &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Patrick: Is that true? How do you &amp;quot;do&amp;quot; a bes:showCatalog for a particular catalog? It&#039;s not documented here: [[BES XML Commands]]&amp;lt;/font&amp;gt; - [[User:ndp]]&lt;br /&gt;
: I changed the documentation at the BES XML Commands page and modified the request document above for showing the root node of the catalog named &amp;quot;catalog&amp;quot;. This needs to change. Should be able to say &amp;lt;bes:showCatalog catalog=&amp;quot;catname&amp;quot; node=&amp;quot;/&amp;quot; /&amp;gt; - [[User:pwest]]&lt;br /&gt;
&lt;br /&gt;
If Hyrax had been written to support the implicit catalog organization in the BES the the correct catalog URL would have been:&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;http://localhost:8080/opendap/catalog/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Changing this presents backward compatibility issues for Hyrax in that it is important that Hyrax not change the access URL&#039;s to existing data sets, catalogs, or inventories.&lt;br /&gt;
&lt;br /&gt;
== Possible Solutions ==&lt;br /&gt;
In order to acheive this compatibility the following schemes have been proposed:&lt;br /&gt;
&lt;br /&gt;
==== OLFS DispatchHandler for each catalog ====&lt;br /&gt;
&lt;br /&gt;
For each catalog that gets added to the BES a new OLFS DispatchHandler is written. This really would entail making a  copy of all the classes in the java package &#039;&#039;opendap.bes&#039;&#039; and modifying them slightly to allow for the different catalog names. It&#039;s a crummy solution because it grows the code base in a crazy way - lot&#039;s of replicate functionality that becomes a real problem to maintain as changes to the BES API will have to be implemented in multiple places in the  OLFS code base. This, I predict won&#039;t happen and things will constantly broken. &lt;br /&gt;
&lt;br /&gt;
It also means that every time someone writes a BES module that provides a complete DAP services stack and a new catalog that Hyrax will be unable to take advantage of it without having a java program written to support it. That&#039;s a bloody waste of resources.&lt;br /&gt;
&lt;br /&gt;
==== BES interprets resource ID&#039;s ====&lt;br /&gt;
&lt;br /&gt;
In lieu of specifying the catalog name explicitly in the various BES requests, the BES will look at the first part of the resource ID and compare it to its list of catalogs. If the first part of the resource ID matches a catalog name then the BES will pass the request to that catalog. Otherwise it will pass the request to the default catalog.&lt;br /&gt;
&lt;br /&gt;
===== Keep existing URLs working =====&lt;br /&gt;
&lt;br /&gt;
For example, in the catalog URL &#039;&#039;&amp;lt;nowiki&amp;gt; http://localhost:8080/opendap/data/nc&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
Would produce a resource ID of &#039;&#039;/data/nc&#039;&#039; Unless the BES actually contains a catalog named &#039;&#039;data&#039;&#039; then a catalog request for the resource ID &#039;&#039;/data/nc&#039;&#039; will be routed to the default catalog. &lt;br /&gt;
&lt;br /&gt;
===== Make the top level catalog include all of the catalogs =====&lt;br /&gt;
&lt;br /&gt;
When a request is made for the default top-level catalog:&lt;br /&gt;
 &amp;lt;bes:request xmlns:bes=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;[http-8080-1:16:bes_request]&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;bes:setContext name=&amp;quot;errors&amp;quot;&amp;gt;xml&amp;lt;/bes:setContext&amp;gt;&lt;br /&gt;
   &amp;lt;bes:showCatalog node=&amp;quot;/&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/bes:request&amp;gt;&lt;br /&gt;
The BES will return a catalog containing an merging of the catalogs by name (as catalog &#039;&#039;nodes&#039;&#039;) and a listing of the top-level of the default catalog. For example if the BES has the &#039;&#039;rdh&#039;&#039;, &#039;&#039;cedar&#039;&#039;, and &#039;&#039;jgofs&#039;&#039; catalogs installed, and the default catalog contains data sets, regular files, and nodes the response might look like this:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset &amp;lt;font color=red&amp;gt;catalog=&amp;quot;catalog&amp;quot; (What would this be in this example?)&amp;lt;/font&amp;gt;  count=&amp;quot;13&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;578&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-11-19T20:56:15&amp;quot; name=&amp;quot;Test&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;918&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:34&amp;quot; name=&amp;quot;Trunk Monkey&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;238&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:31:56&amp;quot; name=&amp;quot;bears.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;852&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-11T16:27:59&amp;quot; name=&amp;quot;coverage&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;102&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-01-30T20:10:16&amp;quot; name=&amp;quot;data&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;510&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-25T17:58:54&amp;quot; name=&amp;quot;fanfang&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;306&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-03-24T19:01:22&amp;quot; name=&amp;quot;fanfang.tar.gz&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;9055684&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-05T19:23:30&amp;quot; name=&amp;quot;namespaceAttributesTest.nc&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;3396&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;serviceRef&amp;gt;dap&amp;lt;/serviceRef&amp;gt;&lt;br /&gt;
            &amp;lt;/dataset&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2009-02-12T21:25:11&amp;quot; name=&amp;quot;netcdf&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;136&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-09-17T21:45:19&amp;quot; name=&amp;quot;robots.txt&amp;quot; node=&amp;quot;false&amp;quot; size=&amp;quot;25&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;sst&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-12-30T21:47:58&amp;quot; name=&amp;quot;thredds&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2008-05-29T23:32:04&amp;quot; name=&amp;quot;wcs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;68&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there is a conflict between catalog name(s) and holdings in the default catalog &#039;&#039;&#039;catalog&#039;&#039;&#039; the offending catalog name(s) can be remapped using the BES configuration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GAH!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I still think that this is totally busted and I don&#039;t see how to fix it with out simply rewriting the OLFS to correctly work with the different catalogs in the BES which WILL change all of the URL&#039;s. The fact is that we (well ok, I) didn&#039;t get it right. And this is a pretty intractable problem otherwise. Fixing it in one of these half-baked ways just begs for the whole thing to come crashing down around us, not to mention the burden of creating an even MORE COMPLEX install and configuration procedure for our users. Maybe one of you can see a way out of this box... [[User:Ndp|ndp]] 13:35, 7 May 2009 (PDT)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Patrick seez ==&lt;br /&gt;
&lt;br /&gt;
==== In the BES ====&lt;br /&gt;
&lt;br /&gt;
instead of looking for the catalog as part of the node name, look for an attribute of the showCatalog element called catalog. If not present and ( the node attribute is not present or is empty or is slash ) then I return the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
If not present and the node is present and the node is not empty and the node is not slash then I default the catalog name to the default catalog specified in the BES configuration file.&lt;br /&gt;
&lt;br /&gt;
If present then I use that catalog name.&lt;br /&gt;
&lt;br /&gt;
In the response for &amp;lt;showCatalog /&amp;gt; I give you the list of the catalogs where the default catalog is marked with default=&amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Or perhaps there&#039;s a new command &amp;lt;showCatalogs /&amp;gt; that gives the list of catalogs?&lt;br /&gt;
&lt;br /&gt;
==== In the OLFS ====&lt;br /&gt;
&lt;br /&gt;
When the OLFS starts up make a &amp;lt;showCatalog /&amp;gt; request to get the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/ then you show them the list of catalogs.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/catalogname then you show them the root node of that catalog&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/ (no catalog name is present) then this is an old URL, you pass this off to the BES without a catalog name, and the BES will use the default catalog.&lt;br /&gt;
&lt;br /&gt;
When someone browses to www.example.com/opendap/data/nc/fnoc1.nc.das (no catalog name is present) then, again this is an old URL. Given the list of catalogs in the beginning you use the default catalog name.&lt;br /&gt;
&lt;br /&gt;
How can you tell if the catalog name is not present ... when the OLFS started up you asked for the list of catalogs. If data is not the name of a catalog then you know we are using the default catalog.&lt;br /&gt;
&lt;br /&gt;
Or ... if possible ... redirect the old URLs to one with the catalog name. Not sure if you can do this. So, if someone browses to www.example.com/opendap/data/nc then you redirect that to www.example.com/opendap/catalog/data/nc, and the same for www.example.com/opendap/data/nc/fnoc1.nc.das you redirect to www.example.com/opendap/catalog/data/nc/fnoc1.nc&lt;br /&gt;
&lt;br /&gt;
What do you think?&lt;br /&gt;
&lt;br /&gt;
I don&#039;t like the idea of when asked for the root node, if no catalog is specified then I give you the root for the default catalog and the names of the other catalogs. I thing that if you ask for no catalog and no node then you should get the list of catalogs, including the default.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;showCatalog /&amp;gt;&lt;br /&gt;
  &amp;lt;response xmlns=&amp;quot;http://xml.opendap.org/ns/bes/1.0#&amp;quot; reqID=&amp;quot;some_unique_value&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;showCatalog&amp;gt;&lt;br /&gt;
        &amp;lt;dataset catalog=&amp;quot;root&amp;quot;  count=&amp;quot;4&amp;quot; lastModified=&amp;quot;2009-03-24T19:02:46&amp;quot; name=&amp;quot;/&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;catalog&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;catalog&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; default=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;rdh&amp;quot; lastModified=&amp;quot;2003-09-11T16:27:59&amp;quot; name=&amp;quot;rdh&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;jgofs&amp;quot; lastModified=&amp;quot;2001-05-29T23:32:04&amp;quot; name=&amp;quot;jgofs&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;dataset catalog=&amp;quot;cedar&amp;quot; lastModified=&amp;quot;2017 -12-30T21:47:58&amp;quot; name=&amp;quot;cedar&amp;quot; node=&amp;quot;true&amp;quot; size=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
       &amp;lt;/dataset&amp;gt;&lt;br /&gt;
    &amp;lt;/showCatalog&amp;gt;&lt;br /&gt;
 &amp;lt;/response&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Comments==&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Why does this matter? Do we need to use multiple catalogs for something? [[User:Jimg|jimg]] 10:43, 12 August 2009 (PDT)&lt;br /&gt;
&lt;br /&gt;
:Yes. As we grow Hyrax we will need to support additional catalogs and services. Because both the BES and the OLFS can independently (and as part of their regular usage pattern) modify the catalog by adding either services which are connected to a URL or catalog content that is mapped into the URL space. &lt;br /&gt;
&lt;br /&gt;
:I guess one way to think of this is that the catalog for a particular instance of Hyrax is the colection of all URLs that are valid. (Where valid means that they return an HTTP status of 200.) Can&#039;t we consider the collection of URL stings to represent a tree? Doesn&#039;t it define a collection of named nodes? Some which are leaves and some which contain more stuff?&lt;br /&gt;
:--[[User:Ndp|ndp]] 09:21, 7 March 2010 (PST)&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
[[User:pwest | Patrick]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development|Fixing the Broken Hyrax Catalogs]][[Category:Hyrax Development|Fixing the Broken Hyrax Catalogs]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=NCML_Service&amp;diff=6301</id>
		<title>NCML Service</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=NCML_Service&amp;diff=6301"/>
		<updated>2011-03-08T18:28:59Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Service allows for the reading of THREDDS catalogs, and ones that contain embedded NCML elements, passing that element to the BES for storage using the NCML id from the THREDDS catalog as a dataset name.&lt;br /&gt;
&lt;br /&gt;
[http://tw.rpi.edu/web/project/ESG-CET/workinggroups/aggregation RPI ESG Aggregation documentation]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=NCML_Service&amp;diff=6299</id>
		<title>NCML Service</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=NCML_Service&amp;diff=6299"/>
		<updated>2011-03-08T17:07:35Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: New page: Service allows for the reading of THREDDS catalogs, and ones that contain embedded NCML elements, passing that element to the BES for storage using the NCML id from the THREDDS catalog as ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Service allows for the reading of THREDDS catalogs, and ones that contain embedded NCML elements, passing that element to the BES for storage using the NCML id from the THREDDS catalog as a dataset name.&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_-_BES_Build_Instructions&amp;diff=6256</id>
		<title>Hyrax - BES Build Instructions</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_-_BES_Build_Instructions&amp;diff=6256"/>
		<updated>2011-02-03T18:54:02Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* From Subversion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How to build the BES from either a source code distribution, or directly from our [http://subversion.tigris.org/ Subversion] repository. These instructions are for the latest release of the BES, which is version 3.9.0 used for Hyrax 1.6.2.&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
=Dependancies=&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/gcc.html GCC, the GNU compiler]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: gcc 4.x&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: gcc 4.2.1&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using gcc 4.0.1 on Intel OS-X. The default compiler was used, version 4.0.1. You can also obtain the compiler using such tools as [http://darwinports.opendarwin.org/ DarwinPorts] on OS-X, package managers on Unix-like machines.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/autoconf.html autoconf]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: autoconf 2.61&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: autoconf 2.65&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using autoconf 2.63 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/automake.html automake]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: automake 1.10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: automake 1.11.1&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using automake 1.11 on Intel OS-X. The reason for requiring 1.10 is that there is an issue with building some of the configuration and tests for the BES.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/libtool.html libtool]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: libtool 1.5.18&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: libtool 2.2.6&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using libtool 2.2.6 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/readline.html readline]==&lt;br /&gt;
&lt;br /&gt;
This library allows users to edit command lines as they are being typed in. This is used by the BES command line application bescmdln in the interactive mode (the default mode).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: readline 4.3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: readline 4.3&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using readline 4.3 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://opendap.org/download/hyrax.html libdap]==&lt;br /&gt;
&lt;br /&gt;
The BES does not specifically require the libdap libraries. But, to get Dap 2 responses you must have libdap. With libdap you get the DAS, DDS, DataDDS, DDX responses as well as catalog support for THREDDS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: libdap 3.11.0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: libdap 3.11.0&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using libdap 3.9.2 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
=Optional Dependencies=&lt;br /&gt;
&lt;br /&gt;
==[http://www.openssl.org/ openssl]==&lt;br /&gt;
&lt;br /&gt;
Openssl is used for a secure server. If you specify BES.ServerSecure=yes (default is no) in the [[Hyrax - BES Configuration|BES Configuration]] file then a client will be required to authenticate with the BES.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: openssl 0.9.7&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: openssl 0.9.7&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using openssl 0.9.7i on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==[http://www.gnu.org/software/dejagnu/ dejagnu]==&lt;br /&gt;
&lt;br /&gt;
In order to run many of the tests in the BES you will need dejagnu. We are in the process of converting our tests to use autotest, which will remove this dependency. If you wish to run &#039;make check&#039;, then you will need dejagnu.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: dejagnu 1.4.4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: dejagnu 1.4.4&lt;br /&gt;
&lt;br /&gt;
This BES software was tested using dejagnu 1.4.4 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==[http://sourceforge.net/projects/cppunit/ cppunit]==&lt;br /&gt;
&lt;br /&gt;
In order to run many of the tests in the BES you will need cppunit. If you wish to run all of the tests using &#039;make check&#039;, then you will need cppunit, although it is not required.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: cppunit 1.12.1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: cppunit 1.12.1&lt;br /&gt;
&lt;br /&gt;
This BES software was tested using cppunit 1.12.1 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Getting The Source Code=&lt;br /&gt;
&lt;br /&gt;
==As A Source Code Distribution==&lt;br /&gt;
The most recent source code distribution will available at both the [http://opendap.org/download/hyrax.html Hyrax download page] and the [http://opendap.org/download/BES.html BES download page]. If you are attempting to build the BES in conjunction with the OLFS  - for example you are building Hyrax - then get both the source distributions from the same Hyrax release on the  [http://opendap.org/download/hyrax.html Hyrax download page], other wise you may experience compatibility issues. &lt;br /&gt;
&lt;br /&gt;
Go get the source code bundle. It will be a file named something like bes-&#039;&#039;x.x.x&#039;&#039;.tar.gz&lt;br /&gt;
&lt;br /&gt;
Unpack the bundle using the command:&lt;br /&gt;
&lt;br /&gt;
 tar zxvf bes-&#039;&#039;x.x.x&#039;&#039;.tar.gz&lt;br /&gt;
&lt;br /&gt;
This will unpack the source code distribution into a directory called &#039;&#039;bes.x.x.x&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==From Subversion==&lt;br /&gt;
* Check out the software for the BES from our [http://subversion.tigris.org/ Subversion] repository located at http://scm.opendap.org/svn/trunk/bes:&lt;br /&gt;
 svn co http://scm.opendap.org/svn/trunk/bes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Building the code=&lt;br /&gt;
Building the BES software should be very simple.&lt;br /&gt;
&lt;br /&gt;
# Enter the top level directory of the bes source code tree (&#039;&#039;bes&#039;&#039; if you got the source code from Subversion, &#039;&#039;bes-.x.x.x&#039;&#039; if you got it from a distribution bundle.)&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# If you checked out the latest from the Subversion repository, run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;autoreconf --force&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will create the configuration scripts&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;./configure&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will run the configuration script to make sure that you have all the required dependencies met and will also generate Makefiles and other configuration files needed to build the BES and to run the BES.&amp;lt;br /&amp;gt;You may want to change some of the configuration options. Please refer to the README and INSTALL files in the top level directory for configuration options. You can also run &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;./configure --help&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; to get more options. The most commonly used option is the --prefix=&amp;lt;directory&amp;gt; option, which tells the build to install the bes into the specified directory. The default directory is /usr/local.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will build the BES code&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;make check&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will test to make sure that you have a successful build of the BES.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Installing the BES from source code=&lt;br /&gt;
Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will install the BES into /usr/local if no --prefix was specified on the configure line, or in the specified directory if you did use the --prefix option.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure that the BES bin directory is in your PATH. For example, if you installed the BES in the default location, the directory /usr/local/bin should be on your path. If you installed it in a non-standard location, then you will need to update your PATH environment  variable. For example, if you installed the bes into /usr/local/bes, then make sure that /usr/local/bes/bin is on your PATH.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Testing the install=&lt;br /&gt;
Try running the following to make sure that the install was successful.&lt;br /&gt;
&lt;br /&gt;
 bes-config --version&lt;br /&gt;
&lt;br /&gt;
You should see the version of the bes that you just installed.&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s try to run the BES. Try typing the following on the command line:&lt;br /&gt;
&lt;br /&gt;
 besctl start&lt;br /&gt;
&lt;br /&gt;
You should see something like this:&lt;br /&gt;
&lt;br /&gt;
 BES install directory: /usr/local&lt;br /&gt;
 BES configuration file: /usr/local/etc/bes/bes.conf&lt;br /&gt;
 Starting the BES daemon&lt;br /&gt;
 Unix socket name: /tmp/opendap.socket&lt;br /&gt;
 PID: 10491 UID: 6779&lt;br /&gt;
&lt;br /&gt;
And then you should be able to run the bescmdln application. After running it you should see a prompt. Type in the command &amp;lt;code&amp;gt;show version;&amp;lt;/code&amp;gt;, and then type in the command &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bescmdln -h localhost -p 10002&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Type &#039;exit&#039; to exit the command line client and &#039;help&#039; or &#039;?&#039; to display the help screen&lt;br /&gt;
&lt;br /&gt;
BESClient&amp;amp;gt; show version;&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;showVersion&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;response&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;BES&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;lib&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;name&amp;amp;gt;bes&amp;amp;lt;/name&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;3.4.1&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;/lib&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/BES&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;Handlers&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;DAP&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;2.0&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;3.0&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;3.2&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;/DAP&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/Handlers&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;/response&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/showVersion&amp;amp;gt;&lt;br /&gt;
BESClient&amp;amp;gt; exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_-_BES_Build_Instructions&amp;diff=6255</id>
		<title>Hyrax - BES Build Instructions</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_-_BES_Build_Instructions&amp;diff=6255"/>
		<updated>2011-02-03T18:53:01Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How to build the BES from either a source code distribution, or directly from our [http://subversion.tigris.org/ Subversion] repository. These instructions are for the latest release of the BES, which is version 3.9.0 used for Hyrax 1.6.2.&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
=Dependancies=&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/gcc.html GCC, the GNU compiler]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: gcc 4.x&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: gcc 4.2.1&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using gcc 4.0.1 on Intel OS-X. The default compiler was used, version 4.0.1. You can also obtain the compiler using such tools as [http://darwinports.opendarwin.org/ DarwinPorts] on OS-X, package managers on Unix-like machines.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/autoconf.html autoconf]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: autoconf 2.61&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: autoconf 2.65&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using autoconf 2.63 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/automake.html automake]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: automake 1.10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: automake 1.11.1&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using automake 1.11 on Intel OS-X. The reason for requiring 1.10 is that there is an issue with building some of the configuration and tests for the BES.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/libtool.html libtool]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: libtool 1.5.18&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: libtool 2.2.6&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using libtool 2.2.6 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/readline.html readline]==&lt;br /&gt;
&lt;br /&gt;
This library allows users to edit command lines as they are being typed in. This is used by the BES command line application bescmdln in the interactive mode (the default mode).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: readline 4.3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: readline 4.3&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using readline 4.3 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://opendap.org/download/hyrax.html libdap]==&lt;br /&gt;
&lt;br /&gt;
The BES does not specifically require the libdap libraries. But, to get Dap 2 responses you must have libdap. With libdap you get the DAS, DDS, DataDDS, DDX responses as well as catalog support for THREDDS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: libdap 3.11.0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: libdap 3.11.0&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using libdap 3.9.2 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
=Optional Dependencies=&lt;br /&gt;
&lt;br /&gt;
==[http://www.openssl.org/ openssl]==&lt;br /&gt;
&lt;br /&gt;
Openssl is used for a secure server. If you specify BES.ServerSecure=yes (default is no) in the [[Hyrax - BES Configuration|BES Configuration]] file then a client will be required to authenticate with the BES.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: openssl 0.9.7&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: openssl 0.9.7&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using openssl 0.9.7i on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==[http://www.gnu.org/software/dejagnu/ dejagnu]==&lt;br /&gt;
&lt;br /&gt;
In order to run many of the tests in the BES you will need dejagnu. We are in the process of converting our tests to use autotest, which will remove this dependency. If you wish to run &#039;make check&#039;, then you will need dejagnu.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: dejagnu 1.4.4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: dejagnu 1.4.4&lt;br /&gt;
&lt;br /&gt;
This BES software was tested using dejagnu 1.4.4 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==[http://sourceforge.net/projects/cppunit/ cppunit]==&lt;br /&gt;
&lt;br /&gt;
In order to run many of the tests in the BES you will need cppunit. If you wish to run all of the tests using &#039;make check&#039;, then you will need cppunit, although it is not required.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: cppunit 1.12.1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: cppunit 1.12.1&lt;br /&gt;
&lt;br /&gt;
This BES software was tested using cppunit 1.12.1 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Getting The Source Code=&lt;br /&gt;
&lt;br /&gt;
==As A Source Code Distribution==&lt;br /&gt;
The most recent source code distribution will available at both the [http://opendap.org/download/hyrax.html Hyrax download page] and the [http://opendap.org/download/BES.html BES download page]. If you are attempting to build the BES in conjunction with the OLFS  - for example you are building Hyrax - then get both the source distributions from the same Hyrax release on the  [http://opendap.org/download/hyrax.html Hyrax download page], other wise you may experience compatibility issues. &lt;br /&gt;
&lt;br /&gt;
Go get the source code bundle. It will be a file named something like bes-&#039;&#039;x.x.x&#039;&#039;.tar.gz&lt;br /&gt;
&lt;br /&gt;
Unpack the bundle using the command:&lt;br /&gt;
&lt;br /&gt;
 tar zxvf bes-&#039;&#039;x.x.x&#039;&#039;.tar.gz&lt;br /&gt;
&lt;br /&gt;
This will unpack the source code distribution into a directory called &#039;&#039;bes.x.x.x&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==From Subversion==&lt;br /&gt;
* Check out the software for the BES from our [http://subversion.tigris.org/ Subversion] repository located at http://scm.opendap.org:8090/svn/trunk/bes:&lt;br /&gt;
 svn co http://scm.opendap.org:8090/svn/trunk/bes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Building the code=&lt;br /&gt;
Building the BES software should be very simple.&lt;br /&gt;
&lt;br /&gt;
# Enter the top level directory of the bes source code tree (&#039;&#039;bes&#039;&#039; if you got the source code from Subversion, &#039;&#039;bes-.x.x.x&#039;&#039; if you got it from a distribution bundle.)&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# If you checked out the latest from the Subversion repository, run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;autoreconf --force&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will create the configuration scripts&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;./configure&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will run the configuration script to make sure that you have all the required dependencies met and will also generate Makefiles and other configuration files needed to build the BES and to run the BES.&amp;lt;br /&amp;gt;You may want to change some of the configuration options. Please refer to the README and INSTALL files in the top level directory for configuration options. You can also run &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;./configure --help&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; to get more options. The most commonly used option is the --prefix=&amp;lt;directory&amp;gt; option, which tells the build to install the bes into the specified directory. The default directory is /usr/local.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will build the BES code&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;make check&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will test to make sure that you have a successful build of the BES.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Installing the BES from source code=&lt;br /&gt;
Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will install the BES into /usr/local if no --prefix was specified on the configure line, or in the specified directory if you did use the --prefix option.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure that the BES bin directory is in your PATH. For example, if you installed the BES in the default location, the directory /usr/local/bin should be on your path. If you installed it in a non-standard location, then you will need to update your PATH environment  variable. For example, if you installed the bes into /usr/local/bes, then make sure that /usr/local/bes/bin is on your PATH.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Testing the install=&lt;br /&gt;
Try running the following to make sure that the install was successful.&lt;br /&gt;
&lt;br /&gt;
 bes-config --version&lt;br /&gt;
&lt;br /&gt;
You should see the version of the bes that you just installed.&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s try to run the BES. Try typing the following on the command line:&lt;br /&gt;
&lt;br /&gt;
 besctl start&lt;br /&gt;
&lt;br /&gt;
You should see something like this:&lt;br /&gt;
&lt;br /&gt;
 BES install directory: /usr/local&lt;br /&gt;
 BES configuration file: /usr/local/etc/bes/bes.conf&lt;br /&gt;
 Starting the BES daemon&lt;br /&gt;
 Unix socket name: /tmp/opendap.socket&lt;br /&gt;
 PID: 10491 UID: 6779&lt;br /&gt;
&lt;br /&gt;
And then you should be able to run the bescmdln application. After running it you should see a prompt. Type in the command &amp;lt;code&amp;gt;show version;&amp;lt;/code&amp;gt;, and then type in the command &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bescmdln -h localhost -p 10002&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Type &#039;exit&#039; to exit the command line client and &#039;help&#039; or &#039;?&#039; to display the help screen&lt;br /&gt;
&lt;br /&gt;
BESClient&amp;amp;gt; show version;&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;showVersion&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;response&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;BES&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;lib&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;name&amp;amp;gt;bes&amp;amp;lt;/name&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;3.4.1&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;/lib&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/BES&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;Handlers&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;DAP&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;2.0&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;3.0&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;3.2&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;/DAP&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/Handlers&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;/response&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/showVersion&amp;amp;gt;&lt;br /&gt;
BESClient&amp;amp;gt; exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_-_BES_Build_Instructions&amp;diff=6254</id>
		<title>Hyrax - BES Build Instructions</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_-_BES_Build_Instructions&amp;diff=6254"/>
		<updated>2011-02-03T18:52:18Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How to build the BES from either a source code distribution, or directly from our [http://subversion.tigris.org/ Subversion] repository. These instructions are for the latest release of the BES, which is version 3.7.2 used for Hyrax 1.5.2.&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
=Dependancies=&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/gcc.html GCC, the GNU compiler]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: gcc 4.x&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: gcc 4.2.1&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using gcc 4.0.1 on Intel OS-X. The default compiler was used, version 4.0.1. You can also obtain the compiler using such tools as [http://darwinports.opendarwin.org/ DarwinPorts] on OS-X, package managers on Unix-like machines.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/autoconf.html autoconf]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: autoconf 2.61&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: autoconf 2.65&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using autoconf 2.63 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/automake.html automake]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: automake 1.10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: automake 1.11.1&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using automake 1.11 on Intel OS-X. The reason for requiring 1.10 is that there is an issue with building some of the configuration and tests for the BES.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/libtool.html libtool]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: libtool 1.5.18&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: libtool 2.2.6&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using libtool 2.2.6 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/readline.html readline]==&lt;br /&gt;
&lt;br /&gt;
This library allows users to edit command lines as they are being typed in. This is used by the BES command line application bescmdln in the interactive mode (the default mode).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: readline 4.3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: readline 4.3&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using readline 4.3 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://opendap.org/download/hyrax.html libdap]==&lt;br /&gt;
&lt;br /&gt;
The BES does not specifically require the libdap libraries. But, to get Dap 2 responses you must have libdap. With libdap you get the DAS, DDS, DataDDS, DDX responses as well as catalog support for THREDDS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: libdap 3.11.0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: libdap 3.11.0&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using libdap 3.9.2 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
=Optional Dependencies=&lt;br /&gt;
&lt;br /&gt;
==[http://www.openssl.org/ openssl]==&lt;br /&gt;
&lt;br /&gt;
Openssl is used for a secure server. If you specify BES.ServerSecure=yes (default is no) in the [[Hyrax - BES Configuration|BES Configuration]] file then a client will be required to authenticate with the BES.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: openssl 0.9.7&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: openssl 0.9.7&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using openssl 0.9.7i on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==[http://www.gnu.org/software/dejagnu/ dejagnu]==&lt;br /&gt;
&lt;br /&gt;
In order to run many of the tests in the BES you will need dejagnu. We are in the process of converting our tests to use autotest, which will remove this dependency. If you wish to run &#039;make check&#039;, then you will need dejagnu.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: dejagnu 1.4.4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: dejagnu 1.4.4&lt;br /&gt;
&lt;br /&gt;
This BES software was tested using dejagnu 1.4.4 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==[http://sourceforge.net/projects/cppunit/ cppunit]==&lt;br /&gt;
&lt;br /&gt;
In order to run many of the tests in the BES you will need cppunit. If you wish to run all of the tests using &#039;make check&#039;, then you will need cppunit, although it is not required.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: cppunit 1.12.1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: cppunit 1.12.1&lt;br /&gt;
&lt;br /&gt;
This BES software was tested using cppunit 1.12.1 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Getting The Source Code=&lt;br /&gt;
&lt;br /&gt;
==As A Source Code Distribution==&lt;br /&gt;
The most recent source code distribution will available at both the [http://opendap.org/download/hyrax.html Hyrax download page] and the [http://opendap.org/download/BES.html BES download page]. If you are attempting to build the BES in conjunction with the OLFS  - for example you are building Hyrax - then get both the source distributions from the same Hyrax release on the  [http://opendap.org/download/hyrax.html Hyrax download page], other wise you may experience compatibility issues. &lt;br /&gt;
&lt;br /&gt;
Go get the source code bundle. It will be a file named something like bes-&#039;&#039;x.x.x&#039;&#039;.tar.gz&lt;br /&gt;
&lt;br /&gt;
Unpack the bundle using the command:&lt;br /&gt;
&lt;br /&gt;
 tar zxvf bes-&#039;&#039;x.x.x&#039;&#039;.tar.gz&lt;br /&gt;
&lt;br /&gt;
This will unpack the source code distribution into a directory called &#039;&#039;bes.x.x.x&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==From Subversion==&lt;br /&gt;
* Check out the software for the BES from our [http://subversion.tigris.org/ Subversion] repository located at http://scm.opendap.org:8090/svn/trunk/bes:&lt;br /&gt;
 svn co http://scm.opendap.org:8090/svn/trunk/bes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Building the code=&lt;br /&gt;
Building the BES software should be very simple.&lt;br /&gt;
&lt;br /&gt;
# Enter the top level directory of the bes source code tree (&#039;&#039;bes&#039;&#039; if you got the source code from Subversion, &#039;&#039;bes-.x.x.x&#039;&#039; if you got it from a distribution bundle.)&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# If you checked out the latest from the Subversion repository, run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;autoreconf --force&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will create the configuration scripts&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;./configure&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will run the configuration script to make sure that you have all the required dependencies met and will also generate Makefiles and other configuration files needed to build the BES and to run the BES.&amp;lt;br /&amp;gt;You may want to change some of the configuration options. Please refer to the README and INSTALL files in the top level directory for configuration options. You can also run &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;./configure --help&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; to get more options. The most commonly used option is the --prefix=&amp;lt;directory&amp;gt; option, which tells the build to install the bes into the specified directory. The default directory is /usr/local.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will build the BES code&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;make check&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will test to make sure that you have a successful build of the BES.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Installing the BES from source code=&lt;br /&gt;
Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will install the BES into /usr/local if no --prefix was specified on the configure line, or in the specified directory if you did use the --prefix option.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure that the BES bin directory is in your PATH. For example, if you installed the BES in the default location, the directory /usr/local/bin should be on your path. If you installed it in a non-standard location, then you will need to update your PATH environment  variable. For example, if you installed the bes into /usr/local/bes, then make sure that /usr/local/bes/bin is on your PATH.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Testing the install=&lt;br /&gt;
Try running the following to make sure that the install was successful.&lt;br /&gt;
&lt;br /&gt;
 bes-config --version&lt;br /&gt;
&lt;br /&gt;
You should see the version of the bes that you just installed.&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s try to run the BES. Try typing the following on the command line:&lt;br /&gt;
&lt;br /&gt;
 besctl start&lt;br /&gt;
&lt;br /&gt;
You should see something like this:&lt;br /&gt;
&lt;br /&gt;
 BES install directory: /usr/local&lt;br /&gt;
 BES configuration file: /usr/local/etc/bes/bes.conf&lt;br /&gt;
 Starting the BES daemon&lt;br /&gt;
 Unix socket name: /tmp/opendap.socket&lt;br /&gt;
 PID: 10491 UID: 6779&lt;br /&gt;
&lt;br /&gt;
And then you should be able to run the bescmdln application. After running it you should see a prompt. Type in the command &amp;lt;code&amp;gt;show version;&amp;lt;/code&amp;gt;, and then type in the command &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bescmdln -h localhost -p 10002&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Type &#039;exit&#039; to exit the command line client and &#039;help&#039; or &#039;?&#039; to display the help screen&lt;br /&gt;
&lt;br /&gt;
BESClient&amp;amp;gt; show version;&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;showVersion&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;response&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;BES&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;lib&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;name&amp;amp;gt;bes&amp;amp;lt;/name&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;3.4.1&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;/lib&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/BES&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;Handlers&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;DAP&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;2.0&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;3.0&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;3.2&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;/DAP&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/Handlers&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;/response&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/showVersion&amp;amp;gt;&lt;br /&gt;
BESClient&amp;amp;gt; exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_-_BES_Build_Instructions&amp;diff=6253</id>
		<title>Hyrax - BES Build Instructions</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_-_BES_Build_Instructions&amp;diff=6253"/>
		<updated>2011-02-03T18:49:39Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How to build the BES from either a source code distribution, or directly from our [http://subversion.tigris.org/ Subversion] repository. These instructions are for the latest release of the BES, which is version 3.7.2 used for Hyrax 1.5.2.&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
=Dependancies=&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/gcc.html GCC, the GNU compiler]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: gcc 3.x&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: gcc 4.x&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using gcc 4.0.1 on Intel OS-X. The default compiler was used, version 4.0.1. You can also obtain the compiler using such tools as [http://darwinports.opendarwin.org/ DarwinPorts] on OS-X, package managers on Unix-like machines.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/autoconf.html autoconf]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: autoconf 2.61&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: autoconf 2.63&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using autoconf 2.63 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/automake.html automake]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: automake 1.10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: automake 1.11&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using automake 1.11 on Intel OS-X. The reason for requiring 1.10 is that there is an issue with building some of the configuration and tests for the BES.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/libtool.html libtool]==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: libtool 1.5.18&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: libtool 2.2.6&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using libtool 2.2.6 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://directory.fsf.org/readline.html readline]==&lt;br /&gt;
&lt;br /&gt;
This library allows users to edit command lines as they are being typed in. This is used by the BES command line application bescmdln in the interactive mode (the default mode).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: readline 4.3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: readline 4.3&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using readline 4.3 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
==[http://opendap.org/download/hyrax.html libdap]==&lt;br /&gt;
&lt;br /&gt;
The BES does not specifically require the libdap libraries. But, to get Dap 2 responses you must have libdap. With libdap you get the DAS, DDS, DataDDS, DDX responses as well as catalog support for THREDDS.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: libdap 3.9.2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: libdap 3.9.2&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using libdap 3.9.2 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
=Optional Dependencies=&lt;br /&gt;
&lt;br /&gt;
==[http://www.openssl.org/ openssl]==&lt;br /&gt;
&lt;br /&gt;
Openssl is used for a secure server. If you specify BES.ServerSecure=yes (default is no) in the [[Hyrax - BES Configuration|BES Configuration]] file then a client will be required to authenticate with the BES.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: openssl 0.9.7&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: openssl 0.9.7&lt;br /&gt;
&lt;br /&gt;
This software was developed and tested using openssl 0.9.7i on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==[http://www.gnu.org/software/dejagnu/ dejagnu]==&lt;br /&gt;
&lt;br /&gt;
In order to run many of the tests in the BES you will need dejagnu. We are in the process of converting our tests to use autotest, which will remove this dependency. If you wish to run &#039;make check&#039;, then you will need dejagnu.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: dejagnu 1.4.4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: dejagnu 1.4.4&lt;br /&gt;
&lt;br /&gt;
This BES software was tested using dejagnu 1.4.4 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==[http://sourceforge.net/projects/cppunit/ cppunit]==&lt;br /&gt;
&lt;br /&gt;
In order to run many of the tests in the BES you will need cppunit. If you wish to run all of the tests using &#039;make check&#039;, then you will need cppunit, although it is not required.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Minimum&#039;&#039;&#039;&#039;&#039;: cppunit 1.12.1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Recommended&#039;&#039;&#039;&#039;&#039;: cppunit 1.12.1&lt;br /&gt;
&lt;br /&gt;
This BES software was tested using cppunit 1.12.1 on Intel OS-X.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Getting The Source Code=&lt;br /&gt;
&lt;br /&gt;
==As A Source Code Distribution==&lt;br /&gt;
The most recent source code distribution will available at both the [http://opendap.org/download/hyrax.html Hyrax download page] and the [http://opendap.org/download/BES.html BES download page]. If you are attempting to build the BES in conjunction with the OLFS  - for example you are building Hyrax - then get both the source distributions from the same Hyrax release on the  [http://opendap.org/download/hyrax.html Hyrax download page], other wise you may experience compatibility issues. &lt;br /&gt;
&lt;br /&gt;
Go get the source code bundle. It will be a file named something like bes-&#039;&#039;x.x.x&#039;&#039;.tar.gz&lt;br /&gt;
&lt;br /&gt;
Unpack the bundle using the command:&lt;br /&gt;
&lt;br /&gt;
 tar zxvf bes-&#039;&#039;x.x.x&#039;&#039;.tar.gz&lt;br /&gt;
&lt;br /&gt;
This will unpack the source code distribution into a directory called &#039;&#039;bes.x.x.x&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==From Subversion==&lt;br /&gt;
* Check out the software for the BES from our [http://subversion.tigris.org/ Subversion] repository located at http://scm.opendap.org:8090/svn/trunk/bes:&lt;br /&gt;
 svn co http://scm.opendap.org:8090/svn/trunk/bes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Building the code=&lt;br /&gt;
Building the BES software should be very simple.&lt;br /&gt;
&lt;br /&gt;
# Enter the top level directory of the bes source code tree (&#039;&#039;bes&#039;&#039; if you got the source code from Subversion, &#039;&#039;bes-.x.x.x&#039;&#039; if you got it from a distribution bundle.)&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# If you checked out the latest from the Subversion repository, run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;autoreconf --force&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will create the configuration scripts&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;./configure&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will run the configuration script to make sure that you have all the required dependencies met and will also generate Makefiles and other configuration files needed to build the BES and to run the BES.&amp;lt;br /&amp;gt;You may want to change some of the configuration options. Please refer to the README and INSTALL files in the top level directory for configuration options. You can also run &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;./configure --help&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; to get more options. The most commonly used option is the --prefix=&amp;lt;directory&amp;gt; option, which tells the build to install the bes into the specified directory. The default directory is /usr/local.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will build the BES code&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
# Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;make check&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will test to make sure that you have a successful build of the BES.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Installing the BES from source code=&lt;br /&gt;
Run the command:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; This will install the BES into /usr/local if no --prefix was specified on the configure line, or in the specified directory if you did use the --prefix option.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure that the BES bin directory is in your PATH. For example, if you installed the BES in the default location, the directory /usr/local/bin should be on your path. If you installed it in a non-standard location, then you will need to update your PATH environment  variable. For example, if you installed the bes into /usr/local/bes, then make sure that /usr/local/bes/bin is on your PATH.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Testing the install=&lt;br /&gt;
Try running the following to make sure that the install was successful.&lt;br /&gt;
&lt;br /&gt;
 bes-config --version&lt;br /&gt;
&lt;br /&gt;
You should see the version of the bes that you just installed.&lt;br /&gt;
&lt;br /&gt;
Now, let&#039;s try to run the BES. Try typing the following on the command line:&lt;br /&gt;
&lt;br /&gt;
 besctl start&lt;br /&gt;
&lt;br /&gt;
You should see something like this:&lt;br /&gt;
&lt;br /&gt;
 BES install directory: /usr/local&lt;br /&gt;
 BES configuration file: /usr/local/etc/bes/bes.conf&lt;br /&gt;
 Starting the BES daemon&lt;br /&gt;
 Unix socket name: /tmp/opendap.socket&lt;br /&gt;
 PID: 10491 UID: 6779&lt;br /&gt;
&lt;br /&gt;
And then you should be able to run the bescmdln application. After running it you should see a prompt. Type in the command &amp;lt;code&amp;gt;show version;&amp;lt;/code&amp;gt;, and then type in the command &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bescmdln -h localhost -p 10002&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Type &#039;exit&#039; to exit the command line client and &#039;help&#039; or &#039;?&#039; to display the help screen&lt;br /&gt;
&lt;br /&gt;
BESClient&amp;amp;gt; show version;&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;showVersion&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;response&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;BES&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;lib&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;name&amp;amp;gt;bes&amp;amp;lt;/name&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;3.4.1&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;/lib&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/BES&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;Handlers&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;DAP&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;2.0&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;3.0&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;version&amp;amp;gt;3.2&amp;amp;lt;/version&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;/DAP&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/Handlers&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;/response&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/showVersion&amp;amp;gt;&lt;br /&gt;
BESClient&amp;amp;gt; exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_-_Frequently_Asked_Questions&amp;diff=6252</id>
		<title>Hyrax - Frequently Asked Questions</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_-_Frequently_Asked_Questions&amp;diff=6252"/>
		<updated>2011-02-03T01:12:12Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* BES Fatal; cannot open log file ./bes.log. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=OLFS=&lt;br /&gt;
The OPeNDAP Lightweight Front-end Service&lt;br /&gt;
&lt;br /&gt;
== Status 503 &amp;quot;application not currently available&amp;quot; ==&lt;br /&gt;
After starting up the tomcat server with the opendap.war file placed in the webapps directory, I can see the tomcat splash page if I go to &amp;lt;pre&amp;gt;http://localhost:8080/&amp;lt;/pre&amp;gt;. But when I go to &amp;lt;pre&amp;gt;http://localhost:8080/opendap/&amp;lt;/pre&amp;gt; I get this error.&lt;br /&gt;
&lt;br /&gt;
=BES=&lt;br /&gt;
The OPeNDAP Hyrax Back-End Server&lt;br /&gt;
&lt;br /&gt;
==Regular expression matches in BES==&lt;br /&gt;
&lt;br /&gt;
There are two regular expression matches in the BES, both configured in the BES configuration file bes.conf.&lt;br /&gt;
&lt;br /&gt;
* TypeMatch&lt;br /&gt;
&lt;br /&gt;
The TypeMatch regular expression is used to match file names with their type. For example, a file ending with the extension .hdf would match and be handled by the hdf4 module.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note: The regular expression must match the file including the path to the file.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The TypeMatch parameter is a list of handler/module names and a regular expression separated by a colon. If the regular expression matches an item, then the BES uses the associated handler/module. Each &amp;lt;handler&amp;gt;:&amp;lt;regular expression&amp;gt; pair is followed by a semicolon. This is used when creating containers in the BES (the &#039;set container&#039; command). The example regular expression says to use the &#039;h4&#039; handler for any file with an extension of &#039;hdf&#039;, &#039;HDF&#039; or &#039;eos&#039; which may also end in &#039;.gz&#039; or &#039;.bz2&#039; or &#039;.Z&#039;. In the latter case the file will be treated as a compressed file.&lt;br /&gt;
&lt;br /&gt;
  Example:&lt;br /&gt;
  BES.Catalog.catalog.TypeMatch=h4.*\.(hdf|HDF|eos)(\.gz|\.bz2|\.Z)?$;&lt;br /&gt;
&lt;br /&gt;
* Include/Exclude directive&lt;br /&gt;
&lt;br /&gt;
The Include/Exclude parameters in the BES configuration file tells the BES what files and directories to include/exclude in its catalog response.  Normally, when a client asks for a data catalog, all files and directories are shown. Use the following two parameters to customize this behavior. Each parameter is a list of regular expressions, each followed by a semicolon (last one must also end with a semicolon as in the example below.) First, the Include parameter is applied to the node, and then the Exclude parameter is applied. All collections of nodes are shown. In the default values below, all nodes are included (the Include parameter) except those that begin with a dot (the Exclude parameter).&lt;br /&gt;
&lt;br /&gt;
  Example:&lt;br /&gt;
  BES.Catalog.catalog.Include=;&lt;br /&gt;
  BES.Catalog.catalog.Exclude=^\..*;&lt;br /&gt;
&lt;br /&gt;
* There is a binary included in the distribution that will allow you to test a regular expression. The besregtest binary is run with the type of regular expression (type, include or exclude), the regular expression enclosed in quotes, and then the list of things to match. Here is the output of the usage of besregtest:&lt;br /&gt;
&lt;br /&gt;
 Usage: besregtest include|exclude|type &amp;lt;regular_expression&amp;gt; &amp;lt;string_to_match&amp;gt;&lt;br /&gt;
   samples:&lt;br /&gt;
     besregtest include &amp;quot;123456;&amp;quot; 01234567 matches 6 of 8 characters&lt;br /&gt;
     besregtest include &amp;quot;^123456$;&amp;quot; 01234567 does not match&lt;br /&gt;
     besregtest include &amp;quot;^123456$;&amp;quot; 123456 matches all 6 of 6 characters&lt;br /&gt;
     besregtest include &amp;quot;.*\.nc$;&amp;quot; fnoc1.nc matches&lt;br /&gt;
     besregtest include &amp;quot;.*\.nc$;&amp;quot; fnoc1.ncd does not matche&lt;br /&gt;
     besregtest type &amp;quot;nc:.*\.nc$;nc:.*\.nc\.gz$;ff:.*\.dat$;ff:.*\.dat\.gz$;&amp;quot; fnoc1.nc matches type nc&lt;br /&gt;
&lt;br /&gt;
* Examples of the TypeMatch parameter:&lt;br /&gt;
&lt;br /&gt;
 % besregtest type &amp;quot;nc:.*\.nc(\.bz2|\.gz|\.Z)?$|.*/JA2_[OIG]P[NRS]_.*$;&amp;quot; jason2/gdr/gdr/cycle004/JA2_GPN_2PTP004_069_20080813_105815_20080813_115428&lt;br /&gt;
 expression &amp;quot;.*\.nc(\.bz2|\.gz|\.Z)?$|.*JA2_[OIG]P[NRS]_.*$&amp;quot; matches exactly, type = nc&lt;br /&gt;
 &lt;br /&gt;
 Matches anything that ends with .nc OR anything that ends with a file that begins with JA2_; then one of O, I, G; then P; then one of N, R, S;&lt;br /&gt;
 followed by an underscore and anything else.&lt;br /&gt;
&lt;br /&gt;
==BES: unable to start properly because can not determine memory keys.==&lt;br /&gt;
&lt;br /&gt;
In release 1.4.1 of Hyrax, which includes release 3.6.0 of the BES, we fixed a typo in the BES configuration file. Unfortunately, this produces an error when you start up the BES if the configuration still contains the typo. The error message is:&lt;br /&gt;
&lt;br /&gt;
  BES: unable to start properly because can not determine memory keys.&lt;br /&gt;
&lt;br /&gt;
To correct this, please change the parameter BES.Memory.GlobalArea.Maximu&#039;&#039;&#039;n&#039;&#039;&#039;HeapSize to BES.Memory.GlobalArea.Maximu&#039;&#039;&#039;m&#039;&#039;&#039;HeapSize.&lt;br /&gt;
&lt;br /&gt;
==The service dap has already been registered==&lt;br /&gt;
&lt;br /&gt;
Starting with Hyrax 1.6.0, the BES configuration has changed. It used to be that each handler/module would modify the bes.conf file, or the user would have to modify the bes.conf file, in order to enable that module. Now, the handler/module installs a .conf file in the directory modules under &amp;lt;prefix&amp;gt;/etc/bes/modules. The bes.conf file exists in &amp;lt;prefix&amp;gt;/etc/bes, and includes any .conf files located in the modules directory.&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve installed the new BES for Hyrax 1.6, and then modify your bes.conf file like you&#039;ve done in the past, this could cause problems like duplicate modules registered, duplicate services registered, etc...&lt;br /&gt;
&lt;br /&gt;
So, in the new bes.conf file, there is a line:&lt;br /&gt;
&lt;br /&gt;
BES.modules=&lt;br /&gt;
&lt;br /&gt;
which is empty. Leave it empty. The .conf files in the modules directory, such as nc.conf, will contain a line that looks like this:&lt;br /&gt;
&lt;br /&gt;
BES.modules+=nc&lt;br /&gt;
BES.module.nc=&amp;lt;prefix&amp;gt;/lib/bes/libnc_module.so&lt;br /&gt;
&lt;br /&gt;
The only items that you will need to change in the bes.conf file is:&lt;br /&gt;
&lt;br /&gt;
 BES.ServerAdministrator=&lt;br /&gt;
 BES.User=&lt;br /&gt;
 BES.Group=&lt;br /&gt;
 BES.LogName=&amp;lt;path_to&amp;gt;/bes.log&lt;br /&gt;
 BES.CacheDir=&amp;lt;path_to_bes_cache_directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==I&#039;ve installed the BES, but I&#039;m not able to access any data==&lt;br /&gt;
&lt;br /&gt;
The BES is a software framework that allows data providers to serve specific kinds of data in specific ways. Off the shelf the BES doesn&#039;t provide any data access or any kinds of responses, not even DAP responses like DAS, DDS, ASCII, etc...&lt;br /&gt;
&lt;br /&gt;
In order to return DAP responses like DAS, DDS, DDX, DataDDS you have to have a BES installed that is built against libdap. When building from source you should first install, or build and install, libdap. When installing from RPM you will not be able to install without first installing the libdap RPM.&lt;br /&gt;
&lt;br /&gt;
In order to have an ascii response for your data, or have the html form presented, you must install the General Purpose Handlers, which can be found on the Hyrax Download Page, as can any of the data handlers, libdap, and the fileout module. Here is the official list of BES modules.&lt;br /&gt;
&lt;br /&gt;
In order to serve a particular type of data you must install one of the data handlers. The current officially supported data handlers are netcdf, hdf4, hdf5 and freeform. Again, these can be downloaded from Hyrax Download Page.&lt;br /&gt;
&lt;br /&gt;
If building from source or from SVN, just running &#039;make install&#039; isn&#039;t enough. You must also either run &#039;make bes-conf&#039; or run the bes-x-data.sh script for that data handler. For example, bes-nc-data.sh. Building that target using make, or running those scripts, adds information to the BES configuration file, bes.conf. This step is important to installing the different modules and handlers.&lt;br /&gt;
&lt;br /&gt;
==BES Fatal; cannot open log file ./bes.log.==&lt;br /&gt;
&lt;br /&gt;
Although the BES is started as root, it will be running as the user you set in the BES configuration file. So be sure that that user has permission to write to the current directory where you are starting the BES.&lt;br /&gt;
&lt;br /&gt;
Alternatively, edit the BES configuration file bes.conf and change the location of the bes.log file.&lt;br /&gt;
&lt;br /&gt;
==How do I add configuration parameters to my .conf file==&lt;br /&gt;
&lt;br /&gt;
Every module has its own configuration file, x.conf. For example, the netcdf data handler module has a configuration file called nc.conf. These files are located in the intall_dir/etc/bes/modules directory. So if you install in /usr/local, it will be in /usr/local/etc/bes/modules. If you are writing a module, you can add your own parameters to your configuration file.&lt;br /&gt;
&lt;br /&gt;
Please go to the [http://docs.opendap.org/index.php/Hyrax_-_Extending_BES_Module#Configuring_your_Module BES module page] for more information on how to do this.&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_-_Extending_BES_Module&amp;diff=6251</id>
		<title>Hyrax - Extending BES Module</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_-_Extending_BES_Module&amp;diff=6251"/>
		<updated>2011-02-02T20:47:03Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* Configuring your Module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Writing modules and handlers =&lt;br /&gt;
&lt;br /&gt;
== Putting it all together into a Module ==&lt;br /&gt;
Once you have created your extensions to the BES you need to be a able to add them to the BES. This is done in the Module class. For example, in the netcdf_handler directory you will see a NCModule class. Within this Module class there is a static function that gets called when the Module is loaded.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
extern &amp;quot;C&amp;quot;&lt;br /&gt;
{&lt;br /&gt;
    BESAbstractModule *maker()&lt;br /&gt;
    {&lt;br /&gt;
        return new NCModule ;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function must exist in your shared library in order for your module to be loaded into the BES. In the above example, the netcdf_handler module NCModule is created in the maker function.&lt;br /&gt;
&lt;br /&gt;
The Module classes have two methods:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void&lt;br /&gt;
NCModule::initialize( const string &amp;amp;modname )&lt;br /&gt;
{&lt;br /&gt;
    BESDEBUG( &amp;quot;Initializing NC Handlers:&amp;quot; &amp;lt;&amp;lt; endl )&lt;br /&gt;
&lt;br /&gt;
    // Your code here&lt;br /&gt;
&lt;br /&gt;
    BESDEBUG( &amp;quot;Done Initializing NC Handlers:&amp;quot; &amp;lt;&amp;lt; endl )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void&lt;br /&gt;
NCModule::terminate( const string &amp;amp;modname )&lt;br /&gt;
{&lt;br /&gt;
    BESDEBUG( &amp;quot;Removing NC Handlers:&amp;quot; &amp;lt;&amp;lt; endl )&lt;br /&gt;
&lt;br /&gt;
    // Your code here&lt;br /&gt;
&lt;br /&gt;
    BESDEBUG( &amp;quot;Done Removing NC Handlers:&amp;quot; &amp;lt;&amp;lt; endl )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you could probably already tell, the initialize method is where you would add all of your extensions and the terminate method is where you would remove them and do any cleanup of your module. This is not to be confused with the initialization and termination callbacks described later. The callbacks are called whenever a request is made to the BES where as the methods in the Module class are called when the module is loaded and when it is unloaded from the BES respectively.&lt;br /&gt;
&lt;br /&gt;
Once you have your new Module class you will need to build the new module. In order to be dynamically loaded by the BES the module needs to be built as a shared object module. The following is a snippet from a Makefile.am from an existing module for netcdf.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lib_besdir=$(libdir)/bes&lt;br /&gt;
lib_bes_LTLIBRARIES = libnc_module.la&lt;br /&gt;
&lt;br /&gt;
libnc_module_la_SOURCES = $(MODULE_SOURCES)&lt;br /&gt;
libnc_module_la_CPPFLAGS = $(BES_CPPFLAGS)&lt;br /&gt;
libnc_module_la_LDFLAGS = -avoid-version -module &lt;br /&gt;
libnc_module_la_LIBADD = $(BES_DAP_LIBS)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important line to take note of is for the LDFLAGS, where we spcify &amp;lt;code&amp;gt;-avoid-version -module&amp;lt;/code&amp;gt;. This will build a .so file for your library that can be loaded into the BES.&lt;br /&gt;
&lt;br /&gt;
==Configuring your Module==&lt;br /&gt;
Now that you have the shared object module built you need to have it loaded into the BES. To do this you need to create/edit your configuration file. If you used the script we&#039;ve provided to create a template module, find the *.conf.in file. And find this line.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BES.modules+=your_module_name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, using the netcdf_handler as an example again, we would have the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BES.modules+=nc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you need to tell it where to find that &amp;lt;code&amp;gt;nc&amp;lt;/code&amp;gt; module. So you&#039;ll need to add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BES.module.nc=/full/path/to/installation/lib/bes/libnc_module.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the next time the BES is started it will know to load your module (in this example) nc. It will know to find the nc module using the full path to the shared object module libnc_module.so.&lt;br /&gt;
&lt;br /&gt;
If you&#039;d like to add new key/value pairs (parameters) to your configuration file, you can do so at the end of the file. For example, in the nc module we have:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NC.ShowSharedDimensions=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In your code, you&#039;ll look for this parameter using the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bool found = false ;&lt;br /&gt;
string key = &amp;quot;NC.ShowSharedDimensions&amp;quot; ;&lt;br /&gt;
string value ;&lt;br /&gt;
TheBESKeys::TheKeys()-&amp;gt;get_value( key, value, found ) ;&lt;br /&gt;
if( found )&lt;br /&gt;
{&lt;br /&gt;
  // Do something here with the value&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* key - the parameter name that you are looking for&lt;br /&gt;
* value - the value of the parameter if found&lt;br /&gt;
* found - whether the parameter was found in any of the configuration files&lt;br /&gt;
&lt;br /&gt;
You can also have multiple values for a parameter. Notice in the BES.modules parameter, we use += to add a value to this parameter. To get these values you would use the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bool found = false ;&lt;br /&gt;
string key = &amp;quot;NC.MultiValue.Parameter&amp;quot; ;&lt;br /&gt;
vector&amp;lt;string&amp;gt; values ;&lt;br /&gt;
TheBESKeys::TheKeys()-&amp;gt;get_values( key, values, found ) ;&lt;br /&gt;
if( found )&lt;br /&gt;
{&lt;br /&gt;
  // Do something here with the values&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* key - the parameter name that you are looking for&lt;br /&gt;
* values - the vector of values for the parameter if found&lt;br /&gt;
* found - whether the parameter was found in any of the configuration files&lt;br /&gt;
&lt;br /&gt;
Throughout this document we will tell you how to add the particular extensions to the Module class&#039; initialization method and how to remove your extensions in the Module class&#039; termination method.&lt;br /&gt;
&lt;br /&gt;
== New services ==&lt;br /&gt;
A service is a grouping of commands that are provided by a module and can be handled by other modules, like data handlers. For example, OPeNDAP provides the &amp;lt;code&amp;gt;dap&amp;lt;/code&amp;gt; service with the commands &amp;lt;code&amp;gt;das, dds, ddx, and dods&amp;lt;/code&amp;gt;. These commands can be handled by the different data handlers that can serve up OPeNDAP responses for these commands. The format for each of these commands is &amp;lt;code&amp;gt;dap2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[New Services]]&lt;br /&gt;
&lt;br /&gt;
== New response types. ==&lt;br /&gt;
A response to a BES request is considered here to be a response type. Whether this response type is a simple informational response, such as a response to &#039;show help;&#039; or the response type is a data response such as a DAS response in the &#039;get das for definition;&#039; command. New response types can be added to the BES.&lt;br /&gt;
&lt;br /&gt;
[[New Response Types]]&lt;br /&gt;
&lt;br /&gt;
== New request/data handlers ==&lt;br /&gt;
A request handler is a handler that knows how to fill in a particular response, such as DAS, DDS, DataDDS, help, and version responses, for example.&lt;br /&gt;
&lt;br /&gt;
[[New Request Handlers]]&lt;br /&gt;
&lt;br /&gt;
== Containers and how to store them ==&lt;br /&gt;
New ways of storing containers, called container storage. Currently we have built in volatile storage, which means storing new containers only during the duration of your connection with the BES. We also have a way to load containers from a file that can be configured in the initialization file. You could also create user specific container storage, storing container information in a MySQL database, for example.&lt;br /&gt;
&lt;br /&gt;
[[BES Containers|Containers, and how to store them]]&lt;br /&gt;
&lt;br /&gt;
== Definitions and how to store them ==&lt;br /&gt;
New ways of storing definitions, called definition storage. Currently we have built in volatile storage, which means storing new definitions only during the duration of your connection with the BES. You could also create user specific definition storage, saving off those oft used definitions for later use.&lt;br /&gt;
&lt;br /&gt;
[[BES Definitions|Definitions, and how to store them]]&lt;br /&gt;
&lt;br /&gt;
== Reporting ==&lt;br /&gt;
A report mechanism. Once a request has been completed, the information is passed to any reporters that are registered with the server. This way you can save user information, usage information, data access information, and more.&lt;br /&gt;
&lt;br /&gt;
[[BES Reporters|Keeping Track of Requests]]&lt;br /&gt;
&lt;br /&gt;
== Transmitting responses ==&lt;br /&gt;
Different ways of transmitting the data. The default is to return the data through standard output, which gets redirected back to the client. But, with the &#039;get&#039; command you can specify a &#039;return as&#039; command ( see above ) that could save the response to a file, transmit it via email, save it in a new data file like netcdf.&lt;br /&gt;
&lt;br /&gt;
[[New Transmitters]]&lt;br /&gt;
&lt;br /&gt;
== Initialization and Terminiation Callbacks ==&lt;br /&gt;
Add in your own initialization and termination routines. If you have routines that need to be run when the BES starts up, you can add callback functions for initialization and termination.&lt;br /&gt;
&lt;br /&gt;
[[BES Initialization Termination|Creating Initialization and Termination callbacks]]&lt;br /&gt;
&lt;br /&gt;
== Handling Exceptions ==&lt;br /&gt;
Add in your own exception handling methods. When an exception is thrown within the BES, the exception is handled by the BES Exception Manager. It is possible to register a routine to be called before the default handling is done. This way, if you have a specific way that you want to handle specific exceptions, you can do that here.&lt;br /&gt;
&lt;br /&gt;
[[BES Exception Handling|Handling Exceptions within the BES]]&lt;br /&gt;
&lt;br /&gt;
== Aggregating your data ==&lt;br /&gt;
&lt;br /&gt;
By default there are no aggregation routines in the BES. But, the BES provides a mechanism for data to be aggregated.&lt;br /&gt;
&lt;br /&gt;
[[BES Aggregation|Providing Aggregation Routines]]&lt;br /&gt;
&lt;br /&gt;
== New commands ==&lt;br /&gt;
&lt;br /&gt;
You&#039;ve seen all the default commands available in the BES. Now what if you want to create a new command, or even modify an already existing command.&lt;br /&gt;
&lt;br /&gt;
[[New BES Commands|Creating your own commands]]&lt;br /&gt;
&lt;br /&gt;
== Adding Debugging to your code ==&lt;br /&gt;
&lt;br /&gt;
The BES has a simple to use debugging tool. When the BES is started up you can specify -d &amp;quot;&amp;lt;output&amp;gt;,&amp;lt;context&amp;gt;&amp;quot; on the command line of the besctl script to enable debugging. The output option is either cerr, which will dump all debug statements to standard error, or a file name, which will dump all debug information to the specified file. The context option is a comma separated list of components.&lt;br /&gt;
&lt;br /&gt;
[[New Debugging]]&lt;br /&gt;
&lt;br /&gt;
== Submitting your modules ==&lt;br /&gt;
So you&#039;ve come up with a killer module that does some pretty cool stuff. Well ... share it with the rest of us.&lt;br /&gt;
&lt;br /&gt;
[[Sharing BES Modules|Sharing your BES Modules]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Extending BES|Extending BES]]&lt;br /&gt;
[[Category:BES Modules|Extending BES Module]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_-_Extending_BES_Module&amp;diff=6250</id>
		<title>Hyrax - Extending BES Module</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_-_Extending_BES_Module&amp;diff=6250"/>
		<updated>2011-02-02T18:41:45Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Writing modules and handlers =&lt;br /&gt;
&lt;br /&gt;
== Putting it all together into a Module ==&lt;br /&gt;
Once you have created your extensions to the BES you need to be a able to add them to the BES. This is done in the Module class. For example, in the netcdf_handler directory you will see a NCModule class. Within this Module class there is a static function that gets called when the Module is loaded.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
extern &amp;quot;C&amp;quot;&lt;br /&gt;
{&lt;br /&gt;
    BESAbstractModule *maker()&lt;br /&gt;
    {&lt;br /&gt;
        return new NCModule ;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function must exist in your shared library in order for your module to be loaded into the BES. In the above example, the netcdf_handler module NCModule is created in the maker function.&lt;br /&gt;
&lt;br /&gt;
The Module classes have two methods:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void&lt;br /&gt;
NCModule::initialize( const string &amp;amp;modname )&lt;br /&gt;
{&lt;br /&gt;
    BESDEBUG( &amp;quot;Initializing NC Handlers:&amp;quot; &amp;lt;&amp;lt; endl )&lt;br /&gt;
&lt;br /&gt;
    // Your code here&lt;br /&gt;
&lt;br /&gt;
    BESDEBUG( &amp;quot;Done Initializing NC Handlers:&amp;quot; &amp;lt;&amp;lt; endl )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void&lt;br /&gt;
NCModule::terminate( const string &amp;amp;modname )&lt;br /&gt;
{&lt;br /&gt;
    BESDEBUG( &amp;quot;Removing NC Handlers:&amp;quot; &amp;lt;&amp;lt; endl )&lt;br /&gt;
&lt;br /&gt;
    // Your code here&lt;br /&gt;
&lt;br /&gt;
    BESDEBUG( &amp;quot;Done Removing NC Handlers:&amp;quot; &amp;lt;&amp;lt; endl )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you could probably already tell, the initialize method is where you would add all of your extensions and the terminate method is where you would remove them and do any cleanup of your module. This is not to be confused with the initialization and termination callbacks described later. The callbacks are called whenever a request is made to the BES where as the methods in the Module class are called when the module is loaded and when it is unloaded from the BES respectively.&lt;br /&gt;
&lt;br /&gt;
Once you have your new Module class you will need to build the new module. In order to be dynamically loaded by the BES the module needs to be built as a shared object module. The following is a snippet from a Makefile.am from an existing module for netcdf.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lib_besdir=$(libdir)/bes&lt;br /&gt;
lib_bes_LTLIBRARIES = libnc_module.la&lt;br /&gt;
&lt;br /&gt;
libnc_module_la_SOURCES = $(MODULE_SOURCES)&lt;br /&gt;
libnc_module_la_CPPFLAGS = $(BES_CPPFLAGS)&lt;br /&gt;
libnc_module_la_LDFLAGS = -avoid-version -module &lt;br /&gt;
libnc_module_la_LIBADD = $(BES_DAP_LIBS)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important line to take note of is for the LDFLAGS, where we spcify &amp;lt;code&amp;gt;-avoid-version -module&amp;lt;/code&amp;gt;. This will build a .so file for your library that can be loaded into the BES.&lt;br /&gt;
&lt;br /&gt;
==Configuring your Module==&lt;br /&gt;
Now that you have the shared object module built you need to have it loaded into the BES. To do this you need to create/edit your configuration file. If you used the script we&#039;ve provided to create a template module, find the *.conf.in file. And find this line.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BES.modules+=your_module_name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, using the netcdf_handler as an example again, we would have the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BES.modules+=nc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you need to tell it where to find that &amp;lt;code&amp;gt;nc&amp;lt;/code&amp;gt; module. So you&#039;ll need to add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BES.module.nc=/full/path/to/installation/lib/bes/libnc_module.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the next time the BES is started it will know to load your module (in this example) nc. It will know to find the nc module using the full path to the shared object module libnc_module.so.&lt;br /&gt;
&lt;br /&gt;
If you&#039;d like to add new key/value pairs (parameters) to your configuration file, you can do so at the end of the file. For example, in the nc module we have:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NC.ShowSharedDimensions=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In your code, you&#039;ll look for this parameter using the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bool found = false ;&lt;br /&gt;
string key = &amp;quot;NC.ShowSharedDimensions&amp;quot; ;&lt;br /&gt;
string value ;&lt;br /&gt;
TheBESKeys::TheKeys()-&amp;gt;get_value( key, value, found ) ;&lt;br /&gt;
if( found )&lt;br /&gt;
{&lt;br /&gt;
  // Do something here with the value&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* key - the parameter name that you are looking for&lt;br /&gt;
* value - the value of the parameter if found&lt;br /&gt;
* found - whether the parameter was found in any of the configuration files&lt;br /&gt;
&lt;br /&gt;
Throughout this document we will tell you how to add the particular extensions to the Module class&#039; initialization method and how to remove your extensions in the Module class&#039; termination method.&lt;br /&gt;
&lt;br /&gt;
== New services ==&lt;br /&gt;
A service is a grouping of commands that are provided by a module and can be handled by other modules, like data handlers. For example, OPeNDAP provides the &amp;lt;code&amp;gt;dap&amp;lt;/code&amp;gt; service with the commands &amp;lt;code&amp;gt;das, dds, ddx, and dods&amp;lt;/code&amp;gt;. These commands can be handled by the different data handlers that can serve up OPeNDAP responses for these commands. The format for each of these commands is &amp;lt;code&amp;gt;dap2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[New Services]]&lt;br /&gt;
&lt;br /&gt;
== New response types. ==&lt;br /&gt;
A response to a BES request is considered here to be a response type. Whether this response type is a simple informational response, such as a response to &#039;show help;&#039; or the response type is a data response such as a DAS response in the &#039;get das for definition;&#039; command. New response types can be added to the BES.&lt;br /&gt;
&lt;br /&gt;
[[New Response Types]]&lt;br /&gt;
&lt;br /&gt;
== New request/data handlers ==&lt;br /&gt;
A request handler is a handler that knows how to fill in a particular response, such as DAS, DDS, DataDDS, help, and version responses, for example.&lt;br /&gt;
&lt;br /&gt;
[[New Request Handlers]]&lt;br /&gt;
&lt;br /&gt;
== Containers and how to store them ==&lt;br /&gt;
New ways of storing containers, called container storage. Currently we have built in volatile storage, which means storing new containers only during the duration of your connection with the BES. We also have a way to load containers from a file that can be configured in the initialization file. You could also create user specific container storage, storing container information in a MySQL database, for example.&lt;br /&gt;
&lt;br /&gt;
[[BES Containers|Containers, and how to store them]]&lt;br /&gt;
&lt;br /&gt;
== Definitions and how to store them ==&lt;br /&gt;
New ways of storing definitions, called definition storage. Currently we have built in volatile storage, which means storing new definitions only during the duration of your connection with the BES. You could also create user specific definition storage, saving off those oft used definitions for later use.&lt;br /&gt;
&lt;br /&gt;
[[BES Definitions|Definitions, and how to store them]]&lt;br /&gt;
&lt;br /&gt;
== Reporting ==&lt;br /&gt;
A report mechanism. Once a request has been completed, the information is passed to any reporters that are registered with the server. This way you can save user information, usage information, data access information, and more.&lt;br /&gt;
&lt;br /&gt;
[[BES Reporters|Keeping Track of Requests]]&lt;br /&gt;
&lt;br /&gt;
== Transmitting responses ==&lt;br /&gt;
Different ways of transmitting the data. The default is to return the data through standard output, which gets redirected back to the client. But, with the &#039;get&#039; command you can specify a &#039;return as&#039; command ( see above ) that could save the response to a file, transmit it via email, save it in a new data file like netcdf.&lt;br /&gt;
&lt;br /&gt;
[[New Transmitters]]&lt;br /&gt;
&lt;br /&gt;
== Initialization and Terminiation Callbacks ==&lt;br /&gt;
Add in your own initialization and termination routines. If you have routines that need to be run when the BES starts up, you can add callback functions for initialization and termination.&lt;br /&gt;
&lt;br /&gt;
[[BES Initialization Termination|Creating Initialization and Termination callbacks]]&lt;br /&gt;
&lt;br /&gt;
== Handling Exceptions ==&lt;br /&gt;
Add in your own exception handling methods. When an exception is thrown within the BES, the exception is handled by the BES Exception Manager. It is possible to register a routine to be called before the default handling is done. This way, if you have a specific way that you want to handle specific exceptions, you can do that here.&lt;br /&gt;
&lt;br /&gt;
[[BES Exception Handling|Handling Exceptions within the BES]]&lt;br /&gt;
&lt;br /&gt;
== Aggregating your data ==&lt;br /&gt;
&lt;br /&gt;
By default there are no aggregation routines in the BES. But, the BES provides a mechanism for data to be aggregated.&lt;br /&gt;
&lt;br /&gt;
[[BES Aggregation|Providing Aggregation Routines]]&lt;br /&gt;
&lt;br /&gt;
== New commands ==&lt;br /&gt;
&lt;br /&gt;
You&#039;ve seen all the default commands available in the BES. Now what if you want to create a new command, or even modify an already existing command.&lt;br /&gt;
&lt;br /&gt;
[[New BES Commands|Creating your own commands]]&lt;br /&gt;
&lt;br /&gt;
== Adding Debugging to your code ==&lt;br /&gt;
&lt;br /&gt;
The BES has a simple to use debugging tool. When the BES is started up you can specify -d &amp;quot;&amp;lt;output&amp;gt;,&amp;lt;context&amp;gt;&amp;quot; on the command line of the besctl script to enable debugging. The output option is either cerr, which will dump all debug statements to standard error, or a file name, which will dump all debug information to the specified file. The context option is a comma separated list of components.&lt;br /&gt;
&lt;br /&gt;
[[New Debugging]]&lt;br /&gt;
&lt;br /&gt;
== Submitting your modules ==&lt;br /&gt;
So you&#039;ve come up with a killer module that does some pretty cool stuff. Well ... share it with the rest of us.&lt;br /&gt;
&lt;br /&gt;
[[Sharing BES Modules|Sharing your BES Modules]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Extending BES|Extending BES]]&lt;br /&gt;
[[Category:BES Modules|Extending BES Module]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_-_Extending_BES_Module&amp;diff=6249</id>
		<title>Hyrax - Extending BES Module</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_-_Extending_BES_Module&amp;diff=6249"/>
		<updated>2011-02-02T18:39:02Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Writing modules and handlers =&lt;br /&gt;
&lt;br /&gt;
== Putting it all together into a Module ==&lt;br /&gt;
Once you have created your extensions to the BES you need to be a able to add them to the BES. This is done in the Module class. For example, in the netcdf_handler directory you will see a NCModule class. Within this Module class there is a static function that gets called when the Module is loaded.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
extern &amp;quot;C&amp;quot;&lt;br /&gt;
{&lt;br /&gt;
    BESAbstractModule *maker()&lt;br /&gt;
    {&lt;br /&gt;
        return new NCModule ;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function must exist in your shared library in order for your module to be loaded into the BES. In the above example, the netcdf_handler module NCModule is created in the maker function.&lt;br /&gt;
&lt;br /&gt;
The Module classes have two methods:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void&lt;br /&gt;
NCModule::initialize( const string &amp;amp;modname )&lt;br /&gt;
{&lt;br /&gt;
    BESDEBUG( &amp;quot;Initializing NC Handlers:&amp;quot; &amp;lt;&amp;lt; endl )&lt;br /&gt;
&lt;br /&gt;
    // Your code here&lt;br /&gt;
&lt;br /&gt;
    BESDEBUG( &amp;quot;Done Initializing NC Handlers:&amp;quot; &amp;lt;&amp;lt; endl )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void&lt;br /&gt;
NCModule::terminate( const string &amp;amp;modname )&lt;br /&gt;
{&lt;br /&gt;
    BESDEBUG( &amp;quot;Removing NC Handlers:&amp;quot; &amp;lt;&amp;lt; endl )&lt;br /&gt;
&lt;br /&gt;
    // Your code here&lt;br /&gt;
&lt;br /&gt;
    BESDEBUG( &amp;quot;Done Removing NC Handlers:&amp;quot; &amp;lt;&amp;lt; endl )&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you could probably already tell, the initialize method is where you would add all of your extensions and the terminate method is where you would remove them and do any cleanup of your module. This is not to be confused with the initialization and termination callbacks described later. The callbacks are called whenever a request is made to the BES where as the methods in the Module class are called when the module is loaded and when it is unloaded from the BES respectively.&lt;br /&gt;
&lt;br /&gt;
Once you have your new Module class you will need to build the new module. In order to be dynamically loaded by the BES the module needs to be built as a shared object module. The following is a snippet from a Makefile.am from an existing module for netcdf.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lib_besdir=$(libdir)/bes&lt;br /&gt;
lib_bes_LTLIBRARIES = libnc_module.la&lt;br /&gt;
&lt;br /&gt;
libnc_module_la_SOURCES = $(MODULE_SOURCES)&lt;br /&gt;
libnc_module_la_CPPFLAGS = $(BES_CPPFLAGS)&lt;br /&gt;
libnc_module_la_LDFLAGS = -avoid-version -module &lt;br /&gt;
libnc_module_la_LIBADD = $(BES_DAP_LIBS)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The important line to take note of is for the LDFLAGS, where we spcify &amp;lt;code&amp;gt;-avoid-version -module&amp;lt;/code&amp;gt;. This will build a .so file for your library that can be loaded into the BES.&lt;br /&gt;
&lt;br /&gt;
===Configuring your Module===&lt;br /&gt;
Now that you have the shared object module built you need to have it loaded into the BES. To do this you need to create/edit your configuration file. If you used the script we&#039;ve provided to create a template module, find the *.conf.in file. And find this line.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BES.modules+=your_module_name&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, using the netcdf_handler as an example again, we would have the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BES.modules+=nc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then you need to tell it where to find that &amp;lt;code&amp;gt;nc&amp;lt;/code&amp;gt; module. So you&#039;ll need to add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BES.module.nc=/full/path/to/installation/lib/bes/libnc_module.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the next time the BES is started it will know to load your module (in this example) nc. It will know to find the nc module using the full path to the shared object module libnc_module.so.&lt;br /&gt;
&lt;br /&gt;
If you&#039;d like to add new key/value pairs (parameters) to your configuration file, you can do so at the end of the file. For example, in the nc module we have:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NC.ShowSharedDimensions=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In your code, you&#039;ll look for this parameter using the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bool found = false ;&lt;br /&gt;
string key = &amp;quot;NC.ShowSharedDimensions&amp;quot; ;&lt;br /&gt;
string value ;&lt;br /&gt;
TheBESKeys::TheKeys()-&amp;gt;get_value( key, value, found ) ;&lt;br /&gt;
if( found )&lt;br /&gt;
{&lt;br /&gt;
  // Do something here with the value&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* key - the parameter name that you are looking for&lt;br /&gt;
* value - the value of the parameter if found&lt;br /&gt;
* found - whether the parameter was found in any of the configuration files&lt;br /&gt;
&lt;br /&gt;
Throughout this document we will tell you how to add the particular extensions to the Module class&#039; initialization method and how to remove your extensions in the Module class&#039; termination method.&lt;br /&gt;
&lt;br /&gt;
== New services ==&lt;br /&gt;
A service is a grouping of commands that are provided by a module and can be handled by other modules, like data handlers. For example, OPeNDAP provides the &amp;lt;code&amp;gt;dap&amp;lt;/code&amp;gt; service with the commands &amp;lt;code&amp;gt;das, dds, ddx, and dods&amp;lt;/code&amp;gt;. These commands can be handled by the different data handlers that can serve up OPeNDAP responses for these commands. The format for each of these commands is &amp;lt;code&amp;gt;dap2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[New Services]]&lt;br /&gt;
&lt;br /&gt;
== New response types. ==&lt;br /&gt;
A response to a BES request is considered here to be a response type. Whether this response type is a simple informational response, such as a response to &#039;show help;&#039; or the response type is a data response such as a DAS response in the &#039;get das for definition;&#039; command. New response types can be added to the BES.&lt;br /&gt;
&lt;br /&gt;
[[New Response Types]]&lt;br /&gt;
&lt;br /&gt;
== New request/data handlers ==&lt;br /&gt;
A request handler is a handler that knows how to fill in a particular response, such as DAS, DDS, DataDDS, help, and version responses, for example.&lt;br /&gt;
&lt;br /&gt;
[[New Request Handlers]]&lt;br /&gt;
&lt;br /&gt;
== Containers and how to store them ==&lt;br /&gt;
New ways of storing containers, called container storage. Currently we have built in volatile storage, which means storing new containers only during the duration of your connection with the BES. We also have a way to load containers from a file that can be configured in the initialization file. You could also create user specific container storage, storing container information in a MySQL database, for example.&lt;br /&gt;
&lt;br /&gt;
[[BES Containers|Containers, and how to store them]]&lt;br /&gt;
&lt;br /&gt;
== Definitions and how to store them ==&lt;br /&gt;
New ways of storing definitions, called definition storage. Currently we have built in volatile storage, which means storing new definitions only during the duration of your connection with the BES. You could also create user specific definition storage, saving off those oft used definitions for later use.&lt;br /&gt;
&lt;br /&gt;
[[BES Definitions|Definitions, and how to store them]]&lt;br /&gt;
&lt;br /&gt;
== Reporting ==&lt;br /&gt;
A report mechanism. Once a request has been completed, the information is passed to any reporters that are registered with the server. This way you can save user information, usage information, data access information, and more.&lt;br /&gt;
&lt;br /&gt;
[[BES Reporters|Keeping Track of Requests]]&lt;br /&gt;
&lt;br /&gt;
== Transmitting responses ==&lt;br /&gt;
Different ways of transmitting the data. The default is to return the data through standard output, which gets redirected back to the client. But, with the &#039;get&#039; command you can specify a &#039;return as&#039; command ( see above ) that could save the response to a file, transmit it via email, save it in a new data file like netcdf.&lt;br /&gt;
&lt;br /&gt;
[[New Transmitters]]&lt;br /&gt;
&lt;br /&gt;
== Initialization and Terminiation Callbacks ==&lt;br /&gt;
Add in your own initialization and termination routines. If you have routines that need to be run when the BES starts up, you can add callback functions for initialization and termination.&lt;br /&gt;
&lt;br /&gt;
[[BES Initialization Termination|Creating Initialization and Termination callbacks]]&lt;br /&gt;
&lt;br /&gt;
== Handling Exceptions ==&lt;br /&gt;
Add in your own exception handling methods. When an exception is thrown within the BES, the exception is handled by the BES Exception Manager. It is possible to register a routine to be called before the default handling is done. This way, if you have a specific way that you want to handle specific exceptions, you can do that here.&lt;br /&gt;
&lt;br /&gt;
[[BES Exception Handling|Handling Exceptions within the BES]]&lt;br /&gt;
&lt;br /&gt;
== Aggregating your data ==&lt;br /&gt;
&lt;br /&gt;
By default there are no aggregation routines in the BES. But, the BES provides a mechanism for data to be aggregated.&lt;br /&gt;
&lt;br /&gt;
[[BES Aggregation|Providing Aggregation Routines]]&lt;br /&gt;
&lt;br /&gt;
== New commands ==&lt;br /&gt;
&lt;br /&gt;
You&#039;ve seen all the default commands available in the BES. Now what if you want to create a new command, or even modify an already existing command.&lt;br /&gt;
&lt;br /&gt;
[[New BES Commands|Creating your own commands]]&lt;br /&gt;
&lt;br /&gt;
== Adding Debugging to your code ==&lt;br /&gt;
&lt;br /&gt;
The BES has a simple to use debugging tool. When the BES is started up you can specify -d &amp;quot;&amp;lt;output&amp;gt;,&amp;lt;context&amp;gt;&amp;quot; on the command line of the besctl script to enable debugging. The output option is either cerr, which will dump all debug statements to standard error, or a file name, which will dump all debug information to the specified file. The context option is a comma separated list of components.&lt;br /&gt;
&lt;br /&gt;
[[New Debugging]]&lt;br /&gt;
&lt;br /&gt;
== Submitting your modules ==&lt;br /&gt;
So you&#039;ve come up with a killer module that does some pretty cool stuff. Well ... share it with the rest of us.&lt;br /&gt;
&lt;br /&gt;
[[Sharing BES Modules|Sharing your BES Modules]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Extending BES|Extending BES]]&lt;br /&gt;
[[Category:BES Modules|Extending BES Module]]&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_-_Installation_Instructions&amp;diff=5801</id>
		<title>Hyrax - Installation Instructions</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_-_Installation_Instructions&amp;diff=5801"/>
		<updated>2010-09-25T18:51:53Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* Short list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hyrax is really fairly easy to configure, but because there are several different components involved, it can seem complicated. Essentially you need to configure the BES to load and use one or more data handlers and to look in the right place for your data. The OLFS will work out of the box, but will need configuration to enable THREDDS functionality and Access Logging. Similarly, Tomcat needs no configuration, although you might want to change the port from 8080 to 80 if it&#039;s going to be the only web server on your host. You don&#039;t need to do that, it&#039;s just that you can if you want. Lastly, you can configure an Apache server to hand off requests to the server and, at the same time, have it emulate all your old Server3 URLs. That way catalogs, hot lists and other places where URLs to your data are stored will still work.&lt;br /&gt;
This is not a complete manual for the BES. Instead of explaining all of the parameters and how their different settings can be used to control the BES, the discussion here is limited to what is used when the BES is run as part of Hyrax. In addition, there are number of parameters that should always be left to their default values for a Hyrax configuration and those will also be skipped. This makes it much easier to focus on those parameters that an installer really must understand.&lt;br /&gt;
&lt;br /&gt;
What you will need:&lt;br /&gt;
&lt;br /&gt;
* 30 minutes&lt;br /&gt;
* Java 1.5 Runtime or Development Environment&lt;br /&gt;
* Tomcat 5.5.x or newer&lt;br /&gt;
* A web browser&lt;br /&gt;
&lt;br /&gt;
==System Requirements==&lt;br /&gt;
&lt;br /&gt;
Hyrax is supported on Linux (our standard build platform is Fedora Core, we build our RPMs on CentOS 5.3 and we do also test on Ubuntu) and OS/X. It&#039;s certainly likely that you can get it to run on virtually any Unix-like operating system. We do not support Hyrax on Windows or Vista, although see the [[Using Virtual Machines to Serve Data]] project for a solution for Win32 platforms. Also a group at Microsoft Research has ported Hyrax 1.5.x to their Azure cloud platform.&lt;br /&gt;
&lt;br /&gt;
You can use either &#039;&#039;yum&#039;&#039;, &#039;&#039;rpm&#039;&#039; or &#039;&#039;apt-get&#039;&#039; to get binary packages for all of the required software listed below. On many operating systems the only packages you&#039;ll need to get are those specific to data you intend to serve (e.g., hdf5). If you&#039;re building our source distributions, be sure to get the &#039;&#039;-devel&#039; packages; if you&#039;re using our binary builds then the plain packages will be fine.&lt;br /&gt;
&lt;br /&gt;
In general, in addition to the software needed to build/run the basic framework, to serve data stored in a particular format, you need a handler that can read that format and often you need a that format&#039;s software library.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;For the impatient&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
On Linux system that uses RPM packages (Red Hat, CentOS, Fedora Core, ...), use &#039;&#039;yum&#039;&#039; to install libicu, netcdf, hdf4 and hdf5. Then install our packages. &lt;br /&gt;
&lt;br /&gt;
To build from source, install libxml2-devel, libcurl-devel, uuid-devel, readline-devel, libicu-devel, netcdf-devel, hdf4-devel and hdf5-devel. Build. Your machine might have some of those packages, but RPM/yum will sort that out.&lt;br /&gt;
&lt;br /&gt;
On systems that use the Debian package system, use &#039;&#039;apt-get&#039;&#039; to install the same packages, except that the development packages (the ones you need to compile code) are called &#039;&#039;-dev&#039;&#039; instead of &#039;&#039;-devel&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Short list ===&lt;br /&gt;
# libdap&lt;br /&gt;
## libxml2 2.6.16&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## libcurl 7.10.6&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## pthreads (part of glibc on linux)&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## uuid&lt;br /&gt;
# bes&lt;br /&gt;
## to build ssl authenticated connections, install openssl&lt;br /&gt;
## to use the bes command line utility, install readline-dev(el)&lt;br /&gt;
# dap-server (referred to as General purpose handlers on download page)&lt;br /&gt;
# OLFS&lt;br /&gt;
## Tomcat 6.0.x&lt;br /&gt;
## Java 1.5&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; run-time (or newer, depending on the requirements of the Tomcat software).&lt;br /&gt;
&lt;br /&gt;
=== Additional stuff ===&lt;br /&gt;
When building from source, to run tests:&lt;br /&gt;
# dejagnu&lt;br /&gt;
# cppunit&lt;br /&gt;
&lt;br /&gt;
To serve NetCDF files:&lt;br /&gt;
# The netCDF handler&lt;br /&gt;
## libnetcdf 3.x&lt;br /&gt;
&lt;br /&gt;
To serve HDF4 files:&lt;br /&gt;
# The HDF4 handler&lt;br /&gt;
## The HDF4 library (4.x) and it&#039;s required software (often libjpeg, zlib&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; and szip)&lt;br /&gt;
&lt;br /&gt;
To serve formatted ASCII using FreeForm:&lt;br /&gt;
# The FreeForm handler&lt;br /&gt;
&lt;br /&gt;
To serve HDF5 files:&lt;br /&gt;
# The HDF5 handler&lt;br /&gt;
## The HDF5 library (1.6.0 or 1.8.x) (and often zlib&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
To provide data responses as NetCDF files:&lt;br /&gt;
# The Fileout NetCDF handler&lt;br /&gt;
## libnetcdf 3.x &lt;br /&gt;
&lt;br /&gt;
To use NCML:&lt;br /&gt;
# The NCML Handler&lt;br /&gt;
## libicu 3.6&lt;br /&gt;
## At least one data handler&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&#039;&#039;Stock on any recent linux or OS/X distribution&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Secure Installation Guidelines==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - Secure Installation Guidelines|Making Hyrax Secure]]&lt;br /&gt;
&lt;br /&gt;
==Install the BES==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - BES Installation|Install and configure the BES.]]&lt;br /&gt;
&lt;br /&gt;
==Install the OLFS==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - OLFS Installation|Next You need to install and configure the OLFS inside of a Tomcat server]]&lt;br /&gt;
&lt;br /&gt;
==Starting and Stopping Hyrax==&lt;br /&gt;
&lt;br /&gt;
To correctly start and stop Hyrax, follow these simple recipes. &lt;br /&gt;
&lt;br /&gt;
===Starting===&lt;br /&gt;
# Start the BES first using the &#039;&#039;besctl&#039;&#039; program with the &#039;&#039;start&#039;&#039; argument. See [[Hyrax_-_Starting_and_stopping_the_BES|Starting and stopping the BES]] for more information.&lt;br /&gt;
# Start the OLFS using the Tomcat startup script. See [[Hyrax_-_OLFS_Installation#Start_Tomcat| Starting Tomcat]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Stopping===&lt;br /&gt;
&lt;br /&gt;
# Stop the OLFS first using the tomcat shutdown script.&lt;br /&gt;
# Stop the BES using the &#039;&#039;besctl&#039;&#039; program with the &#039;&#039;stop&#039;&#039; argument.&lt;br /&gt;
&lt;br /&gt;
See above for stopping information.&lt;br /&gt;
&lt;br /&gt;
==Test the server==&lt;br /&gt;
&lt;br /&gt;
To test/use the server, open a web browser and open the URL:  http://localhost:8080/ and you should see the Tomcat default page. &lt;br /&gt;
&lt;br /&gt;
Open the URL:  http://localhost:8080/opendap/ to see an HTML directory of the top of your data archive.&lt;br /&gt;
&lt;br /&gt;
You can get the HTML view THREDDS catalog by appending &amp;quot;catalog.html&amp;quot; to the end of any URL that returns an HTML directory, like so:  http://localhost:8080/opendap/catalog.html But you may need to do some additional configuration that to work.&lt;br /&gt;
&lt;br /&gt;
==Configure Your Hyrax Installation==&lt;br /&gt;
&lt;br /&gt;
At this point, Hyrax should be working.  When you install Hyrax for the first time it is pre-configured to serve test data sets that come with each of the installed data handlers. This will allow you to test the server and make sure it is functioning correctly. After that you will want to configure so that it works with your data.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
Once opendap.war is expanded, manually copy the file favicon.ico file:&lt;br /&gt;
 $CATALINA_HOME/webapps/opendap/docs/images/favicon.ico&lt;br /&gt;
to &lt;br /&gt;
 $CATALINA_HOME/webapps/ROOT/&lt;br /&gt;
&lt;br /&gt;
The favicon.ico file is mostly a convenience to keep browsers from constantly asking for it (substitute your own icon if you like!).&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_-_Installation_Instructions&amp;diff=5800</id>
		<title>Hyrax - Installation Instructions</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_-_Installation_Instructions&amp;diff=5800"/>
		<updated>2010-09-25T18:50:54Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* &amp;#039;&amp;#039;For the impatient&amp;#039;&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hyrax is really fairly easy to configure, but because there are several different components involved, it can seem complicated. Essentially you need to configure the BES to load and use one or more data handlers and to look in the right place for your data. The OLFS will work out of the box, but will need configuration to enable THREDDS functionality and Access Logging. Similarly, Tomcat needs no configuration, although you might want to change the port from 8080 to 80 if it&#039;s going to be the only web server on your host. You don&#039;t need to do that, it&#039;s just that you can if you want. Lastly, you can configure an Apache server to hand off requests to the server and, at the same time, have it emulate all your old Server3 URLs. That way catalogs, hot lists and other places where URLs to your data are stored will still work.&lt;br /&gt;
This is not a complete manual for the BES. Instead of explaining all of the parameters and how their different settings can be used to control the BES, the discussion here is limited to what is used when the BES is run as part of Hyrax. In addition, there are number of parameters that should always be left to their default values for a Hyrax configuration and those will also be skipped. This makes it much easier to focus on those parameters that an installer really must understand.&lt;br /&gt;
&lt;br /&gt;
What you will need:&lt;br /&gt;
&lt;br /&gt;
* 30 minutes&lt;br /&gt;
* Java 1.5 Runtime or Development Environment&lt;br /&gt;
* Tomcat 5.5.x or newer&lt;br /&gt;
* A web browser&lt;br /&gt;
&lt;br /&gt;
==System Requirements==&lt;br /&gt;
&lt;br /&gt;
Hyrax is supported on Linux (our standard build platform is Fedora Core, we build our RPMs on CentOS 5.3 and we do also test on Ubuntu) and OS/X. It&#039;s certainly likely that you can get it to run on virtually any Unix-like operating system. We do not support Hyrax on Windows or Vista, although see the [[Using Virtual Machines to Serve Data]] project for a solution for Win32 platforms. Also a group at Microsoft Research has ported Hyrax 1.5.x to their Azure cloud platform.&lt;br /&gt;
&lt;br /&gt;
You can use either &#039;&#039;yum&#039;&#039;, &#039;&#039;rpm&#039;&#039; or &#039;&#039;apt-get&#039;&#039; to get binary packages for all of the required software listed below. On many operating systems the only packages you&#039;ll need to get are those specific to data you intend to serve (e.g., hdf5). If you&#039;re building our source distributions, be sure to get the &#039;&#039;-devel&#039; packages; if you&#039;re using our binary builds then the plain packages will be fine.&lt;br /&gt;
&lt;br /&gt;
In general, in addition to the software needed to build/run the basic framework, to serve data stored in a particular format, you need a handler that can read that format and often you need a that format&#039;s software library.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;For the impatient&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
On Linux system that uses RPM packages (Red Hat, CentOS, Fedora Core, ...), use &#039;&#039;yum&#039;&#039; to install libicu, netcdf, hdf4 and hdf5. Then install our packages. &lt;br /&gt;
&lt;br /&gt;
To build from source, install libxml2-devel, libcurl-devel, uuid-devel, readline-devel, libicu-devel, netcdf-devel, hdf4-devel and hdf5-devel. Build. Your machine might have some of those packages, but RPM/yum will sort that out.&lt;br /&gt;
&lt;br /&gt;
On systems that use the Debian package system, use &#039;&#039;apt-get&#039;&#039; to install the same packages, except that the development packages (the ones you need to compile code) are called &#039;&#039;-dev&#039;&#039; instead of &#039;&#039;-devel&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Short list ===&lt;br /&gt;
# libdap&lt;br /&gt;
## libxml2 2.6.16&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## libcurl 7.10.6&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## pthreads (part of glibc on linux)&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## uuid&lt;br /&gt;
# bes&lt;br /&gt;
# dap-server (referred to as General purpose handlers on download page)&lt;br /&gt;
# OLFS&lt;br /&gt;
## Tomcat 6.0.x&lt;br /&gt;
## Java 1.5&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; run-time (or newer, depending on the requirements of the Tomcat software).&lt;br /&gt;
&lt;br /&gt;
=== Additional stuff ===&lt;br /&gt;
When building from source, to run tests:&lt;br /&gt;
# dejagnu&lt;br /&gt;
# cppunit&lt;br /&gt;
&lt;br /&gt;
To serve NetCDF files:&lt;br /&gt;
# The netCDF handler&lt;br /&gt;
## libnetcdf 3.x&lt;br /&gt;
&lt;br /&gt;
To serve HDF4 files:&lt;br /&gt;
# The HDF4 handler&lt;br /&gt;
## The HDF4 library (4.x) and it&#039;s required software (often libjpeg, zlib&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; and szip)&lt;br /&gt;
&lt;br /&gt;
To serve formatted ASCII using FreeForm:&lt;br /&gt;
# The FreeForm handler&lt;br /&gt;
&lt;br /&gt;
To serve HDF5 files:&lt;br /&gt;
# The HDF5 handler&lt;br /&gt;
## The HDF5 library (1.6.0 or 1.8.x) (and often zlib&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
To provide data responses as NetCDF files:&lt;br /&gt;
# The Fileout NetCDF handler&lt;br /&gt;
## libnetcdf 3.x &lt;br /&gt;
&lt;br /&gt;
To use NCML:&lt;br /&gt;
# The NCML Handler&lt;br /&gt;
## libicu 3.6&lt;br /&gt;
## At least one data handler&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&#039;&#039;Stock on any recent linux or OS/X distribution&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Secure Installation Guidelines==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - Secure Installation Guidelines|Making Hyrax Secure]]&lt;br /&gt;
&lt;br /&gt;
==Install the BES==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - BES Installation|Install and configure the BES.]]&lt;br /&gt;
&lt;br /&gt;
==Install the OLFS==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - OLFS Installation|Next You need to install and configure the OLFS inside of a Tomcat server]]&lt;br /&gt;
&lt;br /&gt;
==Starting and Stopping Hyrax==&lt;br /&gt;
&lt;br /&gt;
To correctly start and stop Hyrax, follow these simple recipes. &lt;br /&gt;
&lt;br /&gt;
===Starting===&lt;br /&gt;
# Start the BES first using the &#039;&#039;besctl&#039;&#039; program with the &#039;&#039;start&#039;&#039; argument. See [[Hyrax_-_Starting_and_stopping_the_BES|Starting and stopping the BES]] for more information.&lt;br /&gt;
# Start the OLFS using the Tomcat startup script. See [[Hyrax_-_OLFS_Installation#Start_Tomcat| Starting Tomcat]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Stopping===&lt;br /&gt;
&lt;br /&gt;
# Stop the OLFS first using the tomcat shutdown script.&lt;br /&gt;
# Stop the BES using the &#039;&#039;besctl&#039;&#039; program with the &#039;&#039;stop&#039;&#039; argument.&lt;br /&gt;
&lt;br /&gt;
See above for stopping information.&lt;br /&gt;
&lt;br /&gt;
==Test the server==&lt;br /&gt;
&lt;br /&gt;
To test/use the server, open a web browser and open the URL:  http://localhost:8080/ and you should see the Tomcat default page. &lt;br /&gt;
&lt;br /&gt;
Open the URL:  http://localhost:8080/opendap/ to see an HTML directory of the top of your data archive.&lt;br /&gt;
&lt;br /&gt;
You can get the HTML view THREDDS catalog by appending &amp;quot;catalog.html&amp;quot; to the end of any URL that returns an HTML directory, like so:  http://localhost:8080/opendap/catalog.html But you may need to do some additional configuration that to work.&lt;br /&gt;
&lt;br /&gt;
==Configure Your Hyrax Installation==&lt;br /&gt;
&lt;br /&gt;
At this point, Hyrax should be working.  When you install Hyrax for the first time it is pre-configured to serve test data sets that come with each of the installed data handlers. This will allow you to test the server and make sure it is functioning correctly. After that you will want to configure so that it works with your data.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
Once opendap.war is expanded, manually copy the file favicon.ico file:&lt;br /&gt;
 $CATALINA_HOME/webapps/opendap/docs/images/favicon.ico&lt;br /&gt;
to &lt;br /&gt;
 $CATALINA_HOME/webapps/ROOT/&lt;br /&gt;
&lt;br /&gt;
The favicon.ico file is mostly a convenience to keep browsers from constantly asking for it (substitute your own icon if you like!).&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_-_Installation_Instructions&amp;diff=5799</id>
		<title>Hyrax - Installation Instructions</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_-_Installation_Instructions&amp;diff=5799"/>
		<updated>2010-09-25T18:49:52Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* Additional stuff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hyrax is really fairly easy to configure, but because there are several different components involved, it can seem complicated. Essentially you need to configure the BES to load and use one or more data handlers and to look in the right place for your data. The OLFS will work out of the box, but will need configuration to enable THREDDS functionality and Access Logging. Similarly, Tomcat needs no configuration, although you might want to change the port from 8080 to 80 if it&#039;s going to be the only web server on your host. You don&#039;t need to do that, it&#039;s just that you can if you want. Lastly, you can configure an Apache server to hand off requests to the server and, at the same time, have it emulate all your old Server3 URLs. That way catalogs, hot lists and other places where URLs to your data are stored will still work.&lt;br /&gt;
This is not a complete manual for the BES. Instead of explaining all of the parameters and how their different settings can be used to control the BES, the discussion here is limited to what is used when the BES is run as part of Hyrax. In addition, there are number of parameters that should always be left to their default values for a Hyrax configuration and those will also be skipped. This makes it much easier to focus on those parameters that an installer really must understand.&lt;br /&gt;
&lt;br /&gt;
What you will need:&lt;br /&gt;
&lt;br /&gt;
* 30 minutes&lt;br /&gt;
* Java 1.5 Runtime or Development Environment&lt;br /&gt;
* Tomcat 5.5.x or newer&lt;br /&gt;
* A web browser&lt;br /&gt;
&lt;br /&gt;
==System Requirements==&lt;br /&gt;
&lt;br /&gt;
Hyrax is supported on Linux (our standard build platform is Fedora Core, we build our RPMs on CentOS 5.3 and we do also test on Ubuntu) and OS/X. It&#039;s certainly likely that you can get it to run on virtually any Unix-like operating system. We do not support Hyrax on Windows or Vista, although see the [[Using Virtual Machines to Serve Data]] project for a solution for Win32 platforms. Also a group at Microsoft Research has ported Hyrax 1.5.x to their Azure cloud platform.&lt;br /&gt;
&lt;br /&gt;
You can use either &#039;&#039;yum&#039;&#039;, &#039;&#039;rpm&#039;&#039; or &#039;&#039;apt-get&#039;&#039; to get binary packages for all of the required software listed below. On many operating systems the only packages you&#039;ll need to get are those specific to data you intend to serve (e.g., hdf5). If you&#039;re building our source distributions, be sure to get the &#039;&#039;-devel&#039; packages; if you&#039;re using our binary builds then the plain packages will be fine.&lt;br /&gt;
&lt;br /&gt;
In general, in addition to the software needed to build/run the basic framework, to serve data stored in a particular format, you need a handler that can read that format and often you need a that format&#039;s software library.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;For the impatient&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
On Linux system that uses RPM packages (Red Hat, CentOS, Fedora Core, ...), use &#039;&#039;yum&#039;&#039; to install libicu, netcdf, hdf4 and hdf5. Then install our packages. &lt;br /&gt;
&lt;br /&gt;
To build from source, install libxml2-devel, libcurl-devel, uuid-devel, libicu-devel, netcdf-devel, hdf4-devel and hdf5-devel. Build. Your machine might have some of those packages, but RPM/yum will sort that out.&lt;br /&gt;
&lt;br /&gt;
On systems that use the Debian package system, use &#039;&#039;apt-get&#039;&#039; to install the same packages, except that the development packages (the ones you need to compile code) are called &#039;&#039;-dev&#039;&#039; instead of &#039;&#039;-devel&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Short list ===&lt;br /&gt;
# libdap&lt;br /&gt;
## libxml2 2.6.16&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## libcurl 7.10.6&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## pthreads (part of glibc on linux)&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## uuid&lt;br /&gt;
# bes&lt;br /&gt;
# dap-server (referred to as General purpose handlers on download page)&lt;br /&gt;
# OLFS&lt;br /&gt;
## Tomcat 6.0.x&lt;br /&gt;
## Java 1.5&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; run-time (or newer, depending on the requirements of the Tomcat software).&lt;br /&gt;
&lt;br /&gt;
=== Additional stuff ===&lt;br /&gt;
When building from source, to run tests:&lt;br /&gt;
# dejagnu&lt;br /&gt;
# cppunit&lt;br /&gt;
&lt;br /&gt;
To serve NetCDF files:&lt;br /&gt;
# The netCDF handler&lt;br /&gt;
## libnetcdf 3.x&lt;br /&gt;
&lt;br /&gt;
To serve HDF4 files:&lt;br /&gt;
# The HDF4 handler&lt;br /&gt;
## The HDF4 library (4.x) and it&#039;s required software (often libjpeg, zlib&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; and szip)&lt;br /&gt;
&lt;br /&gt;
To serve formatted ASCII using FreeForm:&lt;br /&gt;
# The FreeForm handler&lt;br /&gt;
&lt;br /&gt;
To serve HDF5 files:&lt;br /&gt;
# The HDF5 handler&lt;br /&gt;
## The HDF5 library (1.6.0 or 1.8.x) (and often zlib&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
To provide data responses as NetCDF files:&lt;br /&gt;
# The Fileout NetCDF handler&lt;br /&gt;
## libnetcdf 3.x &lt;br /&gt;
&lt;br /&gt;
To use NCML:&lt;br /&gt;
# The NCML Handler&lt;br /&gt;
## libicu 3.6&lt;br /&gt;
## At least one data handler&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&#039;&#039;Stock on any recent linux or OS/X distribution&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Secure Installation Guidelines==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - Secure Installation Guidelines|Making Hyrax Secure]]&lt;br /&gt;
&lt;br /&gt;
==Install the BES==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - BES Installation|Install and configure the BES.]]&lt;br /&gt;
&lt;br /&gt;
==Install the OLFS==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - OLFS Installation|Next You need to install and configure the OLFS inside of a Tomcat server]]&lt;br /&gt;
&lt;br /&gt;
==Starting and Stopping Hyrax==&lt;br /&gt;
&lt;br /&gt;
To correctly start and stop Hyrax, follow these simple recipes. &lt;br /&gt;
&lt;br /&gt;
===Starting===&lt;br /&gt;
# Start the BES first using the &#039;&#039;besctl&#039;&#039; program with the &#039;&#039;start&#039;&#039; argument. See [[Hyrax_-_Starting_and_stopping_the_BES|Starting and stopping the BES]] for more information.&lt;br /&gt;
# Start the OLFS using the Tomcat startup script. See [[Hyrax_-_OLFS_Installation#Start_Tomcat| Starting Tomcat]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Stopping===&lt;br /&gt;
&lt;br /&gt;
# Stop the OLFS first using the tomcat shutdown script.&lt;br /&gt;
# Stop the BES using the &#039;&#039;besctl&#039;&#039; program with the &#039;&#039;stop&#039;&#039; argument.&lt;br /&gt;
&lt;br /&gt;
See above for stopping information.&lt;br /&gt;
&lt;br /&gt;
==Test the server==&lt;br /&gt;
&lt;br /&gt;
To test/use the server, open a web browser and open the URL:  http://localhost:8080/ and you should see the Tomcat default page. &lt;br /&gt;
&lt;br /&gt;
Open the URL:  http://localhost:8080/opendap/ to see an HTML directory of the top of your data archive.&lt;br /&gt;
&lt;br /&gt;
You can get the HTML view THREDDS catalog by appending &amp;quot;catalog.html&amp;quot; to the end of any URL that returns an HTML directory, like so:  http://localhost:8080/opendap/catalog.html But you may need to do some additional configuration that to work.&lt;br /&gt;
&lt;br /&gt;
==Configure Your Hyrax Installation==&lt;br /&gt;
&lt;br /&gt;
At this point, Hyrax should be working.  When you install Hyrax for the first time it is pre-configured to serve test data sets that come with each of the installed data handlers. This will allow you to test the server and make sure it is functioning correctly. After that you will want to configure so that it works with your data.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
Once opendap.war is expanded, manually copy the file favicon.ico file:&lt;br /&gt;
 $CATALINA_HOME/webapps/opendap/docs/images/favicon.ico&lt;br /&gt;
to &lt;br /&gt;
 $CATALINA_HOME/webapps/ROOT/&lt;br /&gt;
&lt;br /&gt;
The favicon.ico file is mostly a convenience to keep browsers from constantly asking for it (substitute your own icon if you like!).&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_-_Installation_Instructions&amp;diff=5798</id>
		<title>Hyrax - Installation Instructions</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_-_Installation_Instructions&amp;diff=5798"/>
		<updated>2010-09-25T18:49:06Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* Short list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hyrax is really fairly easy to configure, but because there are several different components involved, it can seem complicated. Essentially you need to configure the BES to load and use one or more data handlers and to look in the right place for your data. The OLFS will work out of the box, but will need configuration to enable THREDDS functionality and Access Logging. Similarly, Tomcat needs no configuration, although you might want to change the port from 8080 to 80 if it&#039;s going to be the only web server on your host. You don&#039;t need to do that, it&#039;s just that you can if you want. Lastly, you can configure an Apache server to hand off requests to the server and, at the same time, have it emulate all your old Server3 URLs. That way catalogs, hot lists and other places where URLs to your data are stored will still work.&lt;br /&gt;
This is not a complete manual for the BES. Instead of explaining all of the parameters and how their different settings can be used to control the BES, the discussion here is limited to what is used when the BES is run as part of Hyrax. In addition, there are number of parameters that should always be left to their default values for a Hyrax configuration and those will also be skipped. This makes it much easier to focus on those parameters that an installer really must understand.&lt;br /&gt;
&lt;br /&gt;
What you will need:&lt;br /&gt;
&lt;br /&gt;
* 30 minutes&lt;br /&gt;
* Java 1.5 Runtime or Development Environment&lt;br /&gt;
* Tomcat 5.5.x or newer&lt;br /&gt;
* A web browser&lt;br /&gt;
&lt;br /&gt;
==System Requirements==&lt;br /&gt;
&lt;br /&gt;
Hyrax is supported on Linux (our standard build platform is Fedora Core, we build our RPMs on CentOS 5.3 and we do also test on Ubuntu) and OS/X. It&#039;s certainly likely that you can get it to run on virtually any Unix-like operating system. We do not support Hyrax on Windows or Vista, although see the [[Using Virtual Machines to Serve Data]] project for a solution for Win32 platforms. Also a group at Microsoft Research has ported Hyrax 1.5.x to their Azure cloud platform.&lt;br /&gt;
&lt;br /&gt;
You can use either &#039;&#039;yum&#039;&#039;, &#039;&#039;rpm&#039;&#039; or &#039;&#039;apt-get&#039;&#039; to get binary packages for all of the required software listed below. On many operating systems the only packages you&#039;ll need to get are those specific to data you intend to serve (e.g., hdf5). If you&#039;re building our source distributions, be sure to get the &#039;&#039;-devel&#039; packages; if you&#039;re using our binary builds then the plain packages will be fine.&lt;br /&gt;
&lt;br /&gt;
In general, in addition to the software needed to build/run the basic framework, to serve data stored in a particular format, you need a handler that can read that format and often you need a that format&#039;s software library.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;For the impatient&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
On Linux system that uses RPM packages (Red Hat, CentOS, Fedora Core, ...), use &#039;&#039;yum&#039;&#039; to install libicu, netcdf, hdf4 and hdf5. Then install our packages. &lt;br /&gt;
&lt;br /&gt;
To build from source, install libxml2-devel, libcurl-devel, uuid-devel, libicu-devel, netcdf-devel, hdf4-devel and hdf5-devel. Build. Your machine might have some of those packages, but RPM/yum will sort that out.&lt;br /&gt;
&lt;br /&gt;
On systems that use the Debian package system, use &#039;&#039;apt-get&#039;&#039; to install the same packages, except that the development packages (the ones you need to compile code) are called &#039;&#039;-dev&#039;&#039; instead of &#039;&#039;-devel&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Short list ===&lt;br /&gt;
# libdap&lt;br /&gt;
## libxml2 2.6.16&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## libcurl 7.10.6&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## pthreads (part of glibc on linux)&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## uuid&lt;br /&gt;
# bes&lt;br /&gt;
# dap-server (referred to as General purpose handlers on download page)&lt;br /&gt;
# OLFS&lt;br /&gt;
## Tomcat 6.0.x&lt;br /&gt;
## Java 1.5&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; run-time (or newer, depending on the requirements of the Tomcat software).&lt;br /&gt;
&lt;br /&gt;
=== Additional stuff ===&lt;br /&gt;
To serve NetCDF files:&lt;br /&gt;
# The netCDF handler&lt;br /&gt;
## libnetcdf 3.x&lt;br /&gt;
&lt;br /&gt;
To serve HDF4 files:&lt;br /&gt;
# The HDF4 handler&lt;br /&gt;
## The HDF4 library (4.x) and it&#039;s required software (often libjpeg, zlib&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; and szip)&lt;br /&gt;
&lt;br /&gt;
To serve formatted ASCII using FreeForm:&lt;br /&gt;
# The FreeForm handler&lt;br /&gt;
&lt;br /&gt;
To serve HDF5 files:&lt;br /&gt;
# The HDF5 handler&lt;br /&gt;
## The HDF5 library (1.6.0 or 1.8.x) (and often zlib&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
To provide data responses as NetCDF files:&lt;br /&gt;
# The Fileout NetCDF handler&lt;br /&gt;
## libnetcdf 3.x &lt;br /&gt;
&lt;br /&gt;
To use NCML:&lt;br /&gt;
# The NCML Handler&lt;br /&gt;
## libicu 3.6&lt;br /&gt;
## At least one data handler&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&#039;&#039;Stock on any recent linux or OS/X distribution&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Secure Installation Guidelines==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - Secure Installation Guidelines|Making Hyrax Secure]]&lt;br /&gt;
&lt;br /&gt;
==Install the BES==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - BES Installation|Install and configure the BES.]]&lt;br /&gt;
&lt;br /&gt;
==Install the OLFS==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - OLFS Installation|Next You need to install and configure the OLFS inside of a Tomcat server]]&lt;br /&gt;
&lt;br /&gt;
==Starting and Stopping Hyrax==&lt;br /&gt;
&lt;br /&gt;
To correctly start and stop Hyrax, follow these simple recipes. &lt;br /&gt;
&lt;br /&gt;
===Starting===&lt;br /&gt;
# Start the BES first using the &#039;&#039;besctl&#039;&#039; program with the &#039;&#039;start&#039;&#039; argument. See [[Hyrax_-_Starting_and_stopping_the_BES|Starting and stopping the BES]] for more information.&lt;br /&gt;
# Start the OLFS using the Tomcat startup script. See [[Hyrax_-_OLFS_Installation#Start_Tomcat| Starting Tomcat]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Stopping===&lt;br /&gt;
&lt;br /&gt;
# Stop the OLFS first using the tomcat shutdown script.&lt;br /&gt;
# Stop the BES using the &#039;&#039;besctl&#039;&#039; program with the &#039;&#039;stop&#039;&#039; argument.&lt;br /&gt;
&lt;br /&gt;
See above for stopping information.&lt;br /&gt;
&lt;br /&gt;
==Test the server==&lt;br /&gt;
&lt;br /&gt;
To test/use the server, open a web browser and open the URL:  http://localhost:8080/ and you should see the Tomcat default page. &lt;br /&gt;
&lt;br /&gt;
Open the URL:  http://localhost:8080/opendap/ to see an HTML directory of the top of your data archive.&lt;br /&gt;
&lt;br /&gt;
You can get the HTML view THREDDS catalog by appending &amp;quot;catalog.html&amp;quot; to the end of any URL that returns an HTML directory, like so:  http://localhost:8080/opendap/catalog.html But you may need to do some additional configuration that to work.&lt;br /&gt;
&lt;br /&gt;
==Configure Your Hyrax Installation==&lt;br /&gt;
&lt;br /&gt;
At this point, Hyrax should be working.  When you install Hyrax for the first time it is pre-configured to serve test data sets that come with each of the installed data handlers. This will allow you to test the server and make sure it is functioning correctly. After that you will want to configure so that it works with your data.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
Once opendap.war is expanded, manually copy the file favicon.ico file:&lt;br /&gt;
 $CATALINA_HOME/webapps/opendap/docs/images/favicon.ico&lt;br /&gt;
to &lt;br /&gt;
 $CATALINA_HOME/webapps/ROOT/&lt;br /&gt;
&lt;br /&gt;
The favicon.ico file is mostly a convenience to keep browsers from constantly asking for it (substitute your own icon if you like!).&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_-_Installation_Instructions&amp;diff=5797</id>
		<title>Hyrax - Installation Instructions</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_-_Installation_Instructions&amp;diff=5797"/>
		<updated>2010-09-25T18:48:41Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* &amp;#039;&amp;#039;For the impatient&amp;#039;&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hyrax is really fairly easy to configure, but because there are several different components involved, it can seem complicated. Essentially you need to configure the BES to load and use one or more data handlers and to look in the right place for your data. The OLFS will work out of the box, but will need configuration to enable THREDDS functionality and Access Logging. Similarly, Tomcat needs no configuration, although you might want to change the port from 8080 to 80 if it&#039;s going to be the only web server on your host. You don&#039;t need to do that, it&#039;s just that you can if you want. Lastly, you can configure an Apache server to hand off requests to the server and, at the same time, have it emulate all your old Server3 URLs. That way catalogs, hot lists and other places where URLs to your data are stored will still work.&lt;br /&gt;
This is not a complete manual for the BES. Instead of explaining all of the parameters and how their different settings can be used to control the BES, the discussion here is limited to what is used when the BES is run as part of Hyrax. In addition, there are number of parameters that should always be left to their default values for a Hyrax configuration and those will also be skipped. This makes it much easier to focus on those parameters that an installer really must understand.&lt;br /&gt;
&lt;br /&gt;
What you will need:&lt;br /&gt;
&lt;br /&gt;
* 30 minutes&lt;br /&gt;
* Java 1.5 Runtime or Development Environment&lt;br /&gt;
* Tomcat 5.5.x or newer&lt;br /&gt;
* A web browser&lt;br /&gt;
&lt;br /&gt;
==System Requirements==&lt;br /&gt;
&lt;br /&gt;
Hyrax is supported on Linux (our standard build platform is Fedora Core, we build our RPMs on CentOS 5.3 and we do also test on Ubuntu) and OS/X. It&#039;s certainly likely that you can get it to run on virtually any Unix-like operating system. We do not support Hyrax on Windows or Vista, although see the [[Using Virtual Machines to Serve Data]] project for a solution for Win32 platforms. Also a group at Microsoft Research has ported Hyrax 1.5.x to their Azure cloud platform.&lt;br /&gt;
&lt;br /&gt;
You can use either &#039;&#039;yum&#039;&#039;, &#039;&#039;rpm&#039;&#039; or &#039;&#039;apt-get&#039;&#039; to get binary packages for all of the required software listed below. On many operating systems the only packages you&#039;ll need to get are those specific to data you intend to serve (e.g., hdf5). If you&#039;re building our source distributions, be sure to get the &#039;&#039;-devel&#039; packages; if you&#039;re using our binary builds then the plain packages will be fine.&lt;br /&gt;
&lt;br /&gt;
In general, in addition to the software needed to build/run the basic framework, to serve data stored in a particular format, you need a handler that can read that format and often you need a that format&#039;s software library.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;For the impatient&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
On Linux system that uses RPM packages (Red Hat, CentOS, Fedora Core, ...), use &#039;&#039;yum&#039;&#039; to install libicu, netcdf, hdf4 and hdf5. Then install our packages. &lt;br /&gt;
&lt;br /&gt;
To build from source, install libxml2-devel, libcurl-devel, uuid-devel, libicu-devel, netcdf-devel, hdf4-devel and hdf5-devel. Build. Your machine might have some of those packages, but RPM/yum will sort that out.&lt;br /&gt;
&lt;br /&gt;
On systems that use the Debian package system, use &#039;&#039;apt-get&#039;&#039; to install the same packages, except that the development packages (the ones you need to compile code) are called &#039;&#039;-dev&#039;&#039; instead of &#039;&#039;-devel&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Short list ===&lt;br /&gt;
# libdap&lt;br /&gt;
## libxml2 2.6.16&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## libcurl 7.10.6&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## pthreads (part of glibc on linux)&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
# bes&lt;br /&gt;
# dap-server (referred to as General purpose handlers on download page)&lt;br /&gt;
# OLFS&lt;br /&gt;
## Tomcat 6.0.x&lt;br /&gt;
## Java 1.5&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; run-time (or newer, depending on the requirements of the Tomcat software).&lt;br /&gt;
&lt;br /&gt;
=== Additional stuff ===&lt;br /&gt;
To serve NetCDF files:&lt;br /&gt;
# The netCDF handler&lt;br /&gt;
## libnetcdf 3.x&lt;br /&gt;
&lt;br /&gt;
To serve HDF4 files:&lt;br /&gt;
# The HDF4 handler&lt;br /&gt;
## The HDF4 library (4.x) and it&#039;s required software (often libjpeg, zlib&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; and szip)&lt;br /&gt;
&lt;br /&gt;
To serve formatted ASCII using FreeForm:&lt;br /&gt;
# The FreeForm handler&lt;br /&gt;
&lt;br /&gt;
To serve HDF5 files:&lt;br /&gt;
# The HDF5 handler&lt;br /&gt;
## The HDF5 library (1.6.0 or 1.8.x) (and often zlib&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
To provide data responses as NetCDF files:&lt;br /&gt;
# The Fileout NetCDF handler&lt;br /&gt;
## libnetcdf 3.x &lt;br /&gt;
&lt;br /&gt;
To use NCML:&lt;br /&gt;
# The NCML Handler&lt;br /&gt;
## libicu 3.6&lt;br /&gt;
## At least one data handler&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&#039;&#039;Stock on any recent linux or OS/X distribution&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Secure Installation Guidelines==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - Secure Installation Guidelines|Making Hyrax Secure]]&lt;br /&gt;
&lt;br /&gt;
==Install the BES==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - BES Installation|Install and configure the BES.]]&lt;br /&gt;
&lt;br /&gt;
==Install the OLFS==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - OLFS Installation|Next You need to install and configure the OLFS inside of a Tomcat server]]&lt;br /&gt;
&lt;br /&gt;
==Starting and Stopping Hyrax==&lt;br /&gt;
&lt;br /&gt;
To correctly start and stop Hyrax, follow these simple recipes. &lt;br /&gt;
&lt;br /&gt;
===Starting===&lt;br /&gt;
# Start the BES first using the &#039;&#039;besctl&#039;&#039; program with the &#039;&#039;start&#039;&#039; argument. See [[Hyrax_-_Starting_and_stopping_the_BES|Starting and stopping the BES]] for more information.&lt;br /&gt;
# Start the OLFS using the Tomcat startup script. See [[Hyrax_-_OLFS_Installation#Start_Tomcat| Starting Tomcat]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Stopping===&lt;br /&gt;
&lt;br /&gt;
# Stop the OLFS first using the tomcat shutdown script.&lt;br /&gt;
# Stop the BES using the &#039;&#039;besctl&#039;&#039; program with the &#039;&#039;stop&#039;&#039; argument.&lt;br /&gt;
&lt;br /&gt;
See above for stopping information.&lt;br /&gt;
&lt;br /&gt;
==Test the server==&lt;br /&gt;
&lt;br /&gt;
To test/use the server, open a web browser and open the URL:  http://localhost:8080/ and you should see the Tomcat default page. &lt;br /&gt;
&lt;br /&gt;
Open the URL:  http://localhost:8080/opendap/ to see an HTML directory of the top of your data archive.&lt;br /&gt;
&lt;br /&gt;
You can get the HTML view THREDDS catalog by appending &amp;quot;catalog.html&amp;quot; to the end of any URL that returns an HTML directory, like so:  http://localhost:8080/opendap/catalog.html But you may need to do some additional configuration that to work.&lt;br /&gt;
&lt;br /&gt;
==Configure Your Hyrax Installation==&lt;br /&gt;
&lt;br /&gt;
At this point, Hyrax should be working.  When you install Hyrax for the first time it is pre-configured to serve test data sets that come with each of the installed data handlers. This will allow you to test the server and make sure it is functioning correctly. After that you will want to configure so that it works with your data.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
Once opendap.war is expanded, manually copy the file favicon.ico file:&lt;br /&gt;
 $CATALINA_HOME/webapps/opendap/docs/images/favicon.ico&lt;br /&gt;
to &lt;br /&gt;
 $CATALINA_HOME/webapps/ROOT/&lt;br /&gt;
&lt;br /&gt;
The favicon.ico file is mostly a convenience to keep browsers from constantly asking for it (substitute your own icon if you like!).&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Hyrax_-_Installation_Instructions&amp;diff=5796</id>
		<title>Hyrax - Installation Instructions</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Hyrax_-_Installation_Instructions&amp;diff=5796"/>
		<updated>2010-09-25T18:46:38Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* Short list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hyrax is really fairly easy to configure, but because there are several different components involved, it can seem complicated. Essentially you need to configure the BES to load and use one or more data handlers and to look in the right place for your data. The OLFS will work out of the box, but will need configuration to enable THREDDS functionality and Access Logging. Similarly, Tomcat needs no configuration, although you might want to change the port from 8080 to 80 if it&#039;s going to be the only web server on your host. You don&#039;t need to do that, it&#039;s just that you can if you want. Lastly, you can configure an Apache server to hand off requests to the server and, at the same time, have it emulate all your old Server3 URLs. That way catalogs, hot lists and other places where URLs to your data are stored will still work.&lt;br /&gt;
This is not a complete manual for the BES. Instead of explaining all of the parameters and how their different settings can be used to control the BES, the discussion here is limited to what is used when the BES is run as part of Hyrax. In addition, there are number of parameters that should always be left to their default values for a Hyrax configuration and those will also be skipped. This makes it much easier to focus on those parameters that an installer really must understand.&lt;br /&gt;
&lt;br /&gt;
What you will need:&lt;br /&gt;
&lt;br /&gt;
* 30 minutes&lt;br /&gt;
* Java 1.5 Runtime or Development Environment&lt;br /&gt;
* Tomcat 5.5.x or newer&lt;br /&gt;
* A web browser&lt;br /&gt;
&lt;br /&gt;
==System Requirements==&lt;br /&gt;
&lt;br /&gt;
Hyrax is supported on Linux (our standard build platform is Fedora Core, we build our RPMs on CentOS 5.3 and we do also test on Ubuntu) and OS/X. It&#039;s certainly likely that you can get it to run on virtually any Unix-like operating system. We do not support Hyrax on Windows or Vista, although see the [[Using Virtual Machines to Serve Data]] project for a solution for Win32 platforms. Also a group at Microsoft Research has ported Hyrax 1.5.x to their Azure cloud platform.&lt;br /&gt;
&lt;br /&gt;
You can use either &#039;&#039;yum&#039;&#039;, &#039;&#039;rpm&#039;&#039; or &#039;&#039;apt-get&#039;&#039; to get binary packages for all of the required software listed below. On many operating systems the only packages you&#039;ll need to get are those specific to data you intend to serve (e.g., hdf5). If you&#039;re building our source distributions, be sure to get the &#039;&#039;-devel&#039; packages; if you&#039;re using our binary builds then the plain packages will be fine.&lt;br /&gt;
&lt;br /&gt;
In general, in addition to the software needed to build/run the basic framework, to serve data stored in a particular format, you need a handler that can read that format and often you need a that format&#039;s software library.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;For the impatient&#039;&#039; ===&lt;br /&gt;
&lt;br /&gt;
On Linux system that uses RPM packages (Red Hat, CentOS, Fedora Core, ...), use &#039;&#039;yum&#039;&#039; to install libicu, netcdf, hdf4 and hdf5. Then install our packages. &lt;br /&gt;
&lt;br /&gt;
To build from source, install libxml2-devel, libcurl-devel, libicu-devel, netcdf-devel, hdf4-devel and hdf5-devel. Build. Your machine might have some of those packages, but RPM/yum will sort that out.&lt;br /&gt;
&lt;br /&gt;
On systems that use the Debian package system, use &#039;&#039;apt-get&#039;&#039; to install the same packages, except that the development packages (the ones you need to compile code) are called &#039;&#039;-dev&#039;&#039; instead of &#039;&#039;-devel&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Short list ===&lt;br /&gt;
# libdap&lt;br /&gt;
## libxml2 2.6.16&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## libcurl 7.10.6&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
## pthreads (part of glibc on linux)&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&lt;br /&gt;
# bes&lt;br /&gt;
# dap-server (referred to as General purpose handlers on download page)&lt;br /&gt;
# OLFS&lt;br /&gt;
## Tomcat 6.0.x&lt;br /&gt;
## Java 1.5&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; run-time (or newer, depending on the requirements of the Tomcat software).&lt;br /&gt;
&lt;br /&gt;
=== Additional stuff ===&lt;br /&gt;
To serve NetCDF files:&lt;br /&gt;
# The netCDF handler&lt;br /&gt;
## libnetcdf 3.x&lt;br /&gt;
&lt;br /&gt;
To serve HDF4 files:&lt;br /&gt;
# The HDF4 handler&lt;br /&gt;
## The HDF4 library (4.x) and it&#039;s required software (often libjpeg, zlib&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; and szip)&lt;br /&gt;
&lt;br /&gt;
To serve formatted ASCII using FreeForm:&lt;br /&gt;
# The FreeForm handler&lt;br /&gt;
&lt;br /&gt;
To serve HDF5 files:&lt;br /&gt;
# The HDF5 handler&lt;br /&gt;
## The HDF5 library (1.6.0 or 1.8.x) (and often zlib&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
To provide data responses as NetCDF files:&lt;br /&gt;
# The Fileout NetCDF handler&lt;br /&gt;
## libnetcdf 3.x &lt;br /&gt;
&lt;br /&gt;
To use NCML:&lt;br /&gt;
# The NCML Handler&lt;br /&gt;
## libicu 3.6&lt;br /&gt;
## At least one data handler&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt;&#039;&#039;Stock on any recent linux or OS/X distribution&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Secure Installation Guidelines==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - Secure Installation Guidelines|Making Hyrax Secure]]&lt;br /&gt;
&lt;br /&gt;
==Install the BES==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - BES Installation|Install and configure the BES.]]&lt;br /&gt;
&lt;br /&gt;
==Install the OLFS==&lt;br /&gt;
&lt;br /&gt;
[[Hyrax - OLFS Installation|Next You need to install and configure the OLFS inside of a Tomcat server]]&lt;br /&gt;
&lt;br /&gt;
==Starting and Stopping Hyrax==&lt;br /&gt;
&lt;br /&gt;
To correctly start and stop Hyrax, follow these simple recipes. &lt;br /&gt;
&lt;br /&gt;
===Starting===&lt;br /&gt;
# Start the BES first using the &#039;&#039;besctl&#039;&#039; program with the &#039;&#039;start&#039;&#039; argument. See [[Hyrax_-_Starting_and_stopping_the_BES|Starting and stopping the BES]] for more information.&lt;br /&gt;
# Start the OLFS using the Tomcat startup script. See [[Hyrax_-_OLFS_Installation#Start_Tomcat| Starting Tomcat]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Stopping===&lt;br /&gt;
&lt;br /&gt;
# Stop the OLFS first using the tomcat shutdown script.&lt;br /&gt;
# Stop the BES using the &#039;&#039;besctl&#039;&#039; program with the &#039;&#039;stop&#039;&#039; argument.&lt;br /&gt;
&lt;br /&gt;
See above for stopping information.&lt;br /&gt;
&lt;br /&gt;
==Test the server==&lt;br /&gt;
&lt;br /&gt;
To test/use the server, open a web browser and open the URL:  http://localhost:8080/ and you should see the Tomcat default page. &lt;br /&gt;
&lt;br /&gt;
Open the URL:  http://localhost:8080/opendap/ to see an HTML directory of the top of your data archive.&lt;br /&gt;
&lt;br /&gt;
You can get the HTML view THREDDS catalog by appending &amp;quot;catalog.html&amp;quot; to the end of any URL that returns an HTML directory, like so:  http://localhost:8080/opendap/catalog.html But you may need to do some additional configuration that to work.&lt;br /&gt;
&lt;br /&gt;
==Configure Your Hyrax Installation==&lt;br /&gt;
&lt;br /&gt;
At this point, Hyrax should be working.  When you install Hyrax for the first time it is pre-configured to serve test data sets that come with each of the installed data handlers. This will allow you to test the server and make sure it is functioning correctly. After that you will want to configure so that it works with your data.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous==&lt;br /&gt;
&lt;br /&gt;
Once opendap.war is expanded, manually copy the file favicon.ico file:&lt;br /&gt;
 $CATALINA_HOME/webapps/opendap/docs/images/favicon.ico&lt;br /&gt;
to &lt;br /&gt;
 $CATALINA_HOME/webapps/ROOT/&lt;br /&gt;
&lt;br /&gt;
The favicon.ico file is mostly a convenience to keep browsers from constantly asking for it (substitute your own icon if you like!).&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
	<entry>
		<id>https://docs.opendap.org/index.php?title=Documentation&amp;diff=5767</id>
		<title>Documentation</title>
		<link rel="alternate" type="text/html" href="https://docs.opendap.org/index.php?title=Documentation&amp;diff=5767"/>
		<updated>2010-07-15T18:46:38Z</updated>

		<summary type="html">&lt;p&gt;PatrickWest: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
This site contains the (new) repository for OPeNDAP software documentation.&lt;br /&gt;
&lt;br /&gt;
=User Guides=&lt;br /&gt;
&lt;br /&gt;
===[[QuickStart|Getting Started with OPeNDAP Software]]===&lt;br /&gt;
&lt;br /&gt;
An overview of our software&lt;br /&gt;
&lt;br /&gt;
===[[UserGuide|The User&#039;s Guide]]===&lt;br /&gt;
&lt;br /&gt;
A comprehensive guide to sharing data with our software&lt;br /&gt;
&lt;br /&gt;
===[[Server Side Processing Functions]]===&lt;br /&gt;
&lt;br /&gt;
A listing of functions that Hyrax provides along with their documentation.&lt;br /&gt;
&lt;br /&gt;
=Software=&lt;br /&gt;
&lt;br /&gt;
===[[Hyrax|Hyrax - Installation and Customization (BES, OLFS, format &amp;amp; response handlers)]]===&lt;br /&gt;
&lt;br /&gt;
The OPeNDAP Data Server, Hyrax, is the latest data server from OPeNDAP. These pages contain documentation that covers server installation and customization.&lt;br /&gt;
&lt;br /&gt;
===[[libdap|libdap++: C++ DAP Implementation Documentation]]===&lt;br /&gt;
&lt;br /&gt;
Libdap is the C++ implementation of the OPeNDAP Data Access Protocol. This pages contains links to the libdap++ reference guide and a usage guide that explains some of the ins and outs of this class library.&lt;br /&gt;
&lt;br /&gt;
===[http://www.opendap.org/api/bes/html/index.html BES Implementation Documentation]===&lt;br /&gt;
&lt;br /&gt;
The BES (OPeNDAP Back-End Server) is a part of the OPeNDAP 4 Server, known as Hyrax. These pages contain the BES reference guide.&lt;br /&gt;
&lt;br /&gt;
=White Papers=&lt;br /&gt;
&lt;br /&gt;
===[[Using Virtual Machines to Serve Data]]===&lt;br /&gt;
&lt;br /&gt;
This short guide discusses using a virtual machine and a [http://en.wikipedia.org/wiki/Hypervisor hypervisor] ([http://www.vmware.com/ VMware] Server) to serve data. In the guide we cover both serving data with Hyrax running within a VM and also using Hyrax in a workshop where the hypervisor is VMware Workstation. You cannot actually serve data to remote users with Workstation, but it&#039;s a great environment in which to learn about the server&#039;s different capabilities. In both cases the advantages of using a VM are that the server runs in Linux on the virtual machine while you run the hypervisor under any of its supported operating systems. An additional advantage is that the hypervisor can be used very effectively in the context of an overall security plan.&lt;br /&gt;
&lt;br /&gt;
===[[ServerDispatchOperations|Server Dispatch Operations]]===&lt;br /&gt;
&lt;br /&gt;
===[[Libdap On Leopard|Building libdap on Lepoard]] (OS/X)===&lt;br /&gt;
&lt;br /&gt;
=Housekeeping=&lt;br /&gt;
&lt;br /&gt;
====[[Wiki Testing]]====&lt;br /&gt;
&lt;br /&gt;
====[[Retired|Retired Pages]]====&lt;/div&gt;</summary>
		<author><name>PatrickWest</name></author>
	</entry>
</feed>