<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet href="/wikid/docs/xsl/mwCollections/CollectionOaiCat/display.xsl" type="text/xsl"?>

<!--
This resource container holds the product of the resolution request
-->
<resource xmlns:config="info:sid/localhost:CollectionSimpleSchemas:config" xmlns:explain="http://explain.z3950.org/dtd/2.0/" xmlns:srw="http://www.loc.gov/zing/srw/" xmlns:wiki="info:sid/localhost:CollectionSimpleSchemas:wiki" xmlns:wr="http://errol.oclc.org/oai:xmlregistry.oclc.org:errol/WikiRepository" xmlns:xlink="http://www.w3.org/TR/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!--
This is an echo of the request information this stylesheet used to produce the resolution product
-->
<uri-context>
<srwIdentifier>info:sid/localhost:CollectionOaiCat:FrequentlyAskedQuestions</srwIdentifier>
<collectionURI>info:sid/localhost:CollectionOaiCat</collectionURI>
<repository-identifier>CollectionOaiCat</repository-identifier>
<srwURL>http://alcme.oclc.org:80/wikid/search/WikiDb.localhost</srwURL>
<local-identifier>FrequentlyAskedQuestions</local-identifier>
<action>display</action>
</uri-context>
<!--
This is the collection configuration record
-->
<record xmlns="info:sid/localhost:CollectionSimpleSchemas:config" xsi:schemaLocation="info:sid/localhost:CollectionSimpleSchemas:config http://alcme.oclc.org:80/wikid/raw/info:sid/localhost:CollectionSimpleSchemas:config.xsd">
<repositoryName>OAICat Documentation</repositoryName>
<localIdentifierType>userAssigned</localIdentifierType>
<adminEmail>mailto:jyoung@oclc.org</adminEmail>
<defaultXSL>no</defaultXSL>
<schemaURI recordPrefix="wiki">info:sid/localhost:CollectionSimpleSchemas:wiki</schemaURI>
<crosswalkSchemaURI recordPrefix="xhtml">info:sid/localhost:CollectionExternalSchemas:xhtml</crosswalkSchemaURI>
<defaultSchemaURI>info:sid/localhost:CollectionExternalSchemas:xhtml</defaultSchemaURI>
</record>
<!--
There is a local-identifier, so this URI must identify an item in a collection
-->
<!--
This is the searchRetrieveResponse for the item's Deposit record
-->
<content>
<searchRetrieveResponse xmlns="http://www.loc.gov/zing/srw/">
<version>1.1</version>
<numberOfRecords>1</numberOfRecords>
<resultSetId>nkf7ee</resultSetId>
<resultSetIdleTime>300</resultSetIdleTime>
<records xmlns:ns1="http://www.loc.gov/zing/srw/">
<record>
<recordSchema>http://www.oclc.org/schemas/WikiRepository</recordSchema>
<recordPacking>xml</recordPacking>
<recordData>
<wr:Deposit xmlns="http://www.w3.org/TR/xhtml1/strict">
<wr:browserPath>http://alcme.oclc.org:80/wikid/docs/WikiRepository</wr:browserPath>
<wr:refID>info:sid/localhost:CollectionOaiCat:FrequentlyAskedQuestions</wr:refID>
<wr:refIDPrefix/>
<wr:userName>anonymous</wr:userName>
<wr:collection>CollectionOaiCat</wr:collection>
<wr:relativePath>2006/03/29/09</wr:relativePath>
<wr:fullRefID>inf_3asid_2flocalhost_3aCollectionOaiCat_3aFrequentlyAskedQuestions_5f20060329094005318</wr:fullRefID>
<wr:mimeType>text/xml</wr:mimeType>
<wr:sort>CollectionOaiCat:FrequentlyAskedQuestions</wr:sort>
<wr:dateCreated>2005-08-15</wr:dateCreated>
<wr:datestamp>2006-03-29</wr:datestamp>
<wr:oldDate/>
</wr:Deposit>
</recordData>
<recordPosition>1</recordPosition>
</record>
</records>
<echoedSearchRetrieveRequest xmlns:ns2="http://www.loc.gov/zing/srw/">
<version>1.1</version>
<query>repos.hasDate = "hasdate" and oai.identifier exact "info:sid/localhost:CollectionOaiCat:FrequentlyAskedQuestions"</query>
<xQuery>
<ns3:searchClause xmlns:ns3="http://www.loc.gov/zing/cql/xcql/">
<ns3:index>cql.any</ns3:index>
<ns3:relation>
<ns3:value>=</ns3:value>
</ns3:relation>
<ns3:term>huh?</ns3:term>
</ns3:searchClause>
</xQuery>
<startRecord>1</startRecord>
<maximumRecords>1</maximumRecords>
<recordPacking>xml</recordPacking>
<recordSchema>default</recordSchema>
</echoedSearchRetrieveRequest>
</searchRetrieveResponse>
<!--
This is the datestamp for the Deposit
-->
<datestamp>2006-03-29</datestamp>
<!--
This is the URL for the content
-->
<contentURL>http://alcme.oclc.org:80/wikid/docs/WikiRepository/2006/03/29/09/inf_3asid_2flocalhost_3aCollectionOaiCat_3aFrequentlyAskedQuestions_5f20060329094005318</contentURL>
<!--
Here is the record content
-->
<record>
<record xmlns="info:sid/localhost:CollectionSimpleSchemas:wiki" xsi:schemaLocation="info:sid/localhost:CollectionSimpleSchemas:wiki http://alcme.oclc.org:80/wikid/raw/info:sid/localhost:CollectionSimpleSchemas:wiki.xsd">
<raw>= OAICat FAQ =
== I installed the demo, but I get a ServletException (HTTP status 500) when I perform a request and there is a NullPointerException in the logs ==
The demo is configured to use relative paths to files that it needs in order to run. One solution is to invoke the startup script with $TOMCAT_HOME as the default directory (i.e. 'cd $TOMCAT_HOME; bin/startup.sh). If this isn't practical for some reason, change the webapps/oaicat/WEB-INF/web.xml and oaicat.properties files to use absolute paths in place of relative paths.
== Generally speaking, how can I make my data available via OAI? ==
Many OAI tools are available. The list at http://www.openarchives.org/tools/tools.html would be a good place to start looking. Also consider the OAI Static Repository solution: http://www.openarchives.org/OAI/2.0/guidelines-static-repository.htm''''''.
== I'm here to learn more about OAICat. What makes it special? ==
OAICat can be used as a stand-alone service, but its primary distinction, when compared to most other tools on the list, is that it can be integrated into existing systems. It achieves this by abstracting three key facets that can differ across systems:
* the API used to access the data (e.g. JDBC or SRU)
* the native record format (e.g. MARC, Dublin Core, METS)
* the metadataFormats that should be made available for harvesting
Example implementations of each facet are included in the distribution. If they prove to be unsuitable for a particular situation, users can substitute their own implementations for any or all of these facets.
== Can you be more specific? ==
No. :-) Well..., maybe. Take a look at this: CustomizationNotes. The abstractions listed above are key to what makes OAICat useful for so many different scenarios. OTOH, abstraction can make it hard to wrap our minds around a problem. Until this wiki gets populated, your best bet is to contact me with details about your situation (http://www.oclc.org/research/staff/young.htm''''''). If an answer exists, I can point you to it. If not, I'll either write the general stuff up in the wiki, or else respond directly for peculiar situations.
== I have 9000 records. Should I use the XmlFileOaiCatalog or FileSystemOaiCatalog implementation? ==
I'm guessing that either implementation can handle 9000 records. The bigger question, in my mind, is how do you plan to maintain this collection? In particular, you don't want the identifiers and datestamps changing willy-nilly when updates happen. The FileSystemOaiCatalog and XmlFileOaiCatalog are essentially toy implementations included for use with relatively static collections. XmlFileOaiCatalog in particular, might even be considered obsolete in favor of the OAI Static Repository specification: http://www.openarchives.org/OAI/2.0/guidelines-static-repository.htm''''''. 

Keep in mind that the real strength of OAICat is that it was designed to work with data in its natural state. If possible, we should consider where your data comes from and how we can work with it there. This might be simpler than creating procedures to duplicate the data and keep it in sync with its source. Stop and think, why are you looking at this page in the first place if not to support duplication and synchronization of data?
== How do I edit records in my OAI repository? ==
OAICat is an output-only web service. As mentioned several times now, its primary design is directed towards integration with another system, which  should take care of this for you. If you are determined to use OAICat as a standalone service (e.g. FileSystemOaiCatalog or XmlFileOaiCatalog), then do like I do and use your favorite text or XML editor to update the files on disk.
== You expect me to edit my records with a text editor? That's insane! ==
It sounds like you need a full-fledged digital repository, not a mere OAI-PMH implementation like OAICat. Although the official list of OAI tools linked above makes little distinction, many of them are much ''much'' more than mere OAI data provider implementations. Look again to find one with the right mix of features.
== What if I don't want to support the oai_dc metadataFormat? ==
For the sake of interoperability, the OAI-PMH specification requires that compliant repositories support oai_dc. If you don't care about interoperability, though, don't worry about being 100% compliant. Non-compliant repositories abound and last time I checked their creators were still allowed to roam free.
== How do you think we might best deal with multiple kinds of data harvested and served?  Separate repository instances? ==
* "Items" in an OAI repository can often be harvested in a variety of metadata formats ("records"). When you harvest, do you grab just one format, or multiple formats?
* If you harvest from multiple sites in a common metadata format, there is no harm in throwing them together into a pile and then crosswalking them to other formats on the way out. This is the simplest solution.
* If you grab multiple formats (whether from a single repository or from multiple), one solution would be to merge the various records for each item into a super record and store ''that'' in your database. When someone harvests this item, the AbstractCatalog implementation class could grab the master record and hand it off to the Crosswalks implementation class to strip out the desired record. You might even enhance your Crosswalks implementation class to fill in some gaps by transforming one of the records that ''is'' present to produce a format that is lacking. In this solution, there is no harm it throwing together records from various harvested sources. This solution is uncomfortably fancy, though, at which point separate repositories might be easier to do.</raw>
</record>
</record>
</content>
<displayContent>
<html xmlns="http://www.w3.org/1999/xhtml">
<body><h1> OAICat FAQ </h1>
<h2> I installed the demo, but I get a ServletException (HTTP status 500) when I perform a request and there is a NullPointerException in the logs </h2>
The demo is configured to use relative paths to files that it needs in order to run. One solution is to invoke the startup script with $TOMCAT_HOME as the default directory (i.e. 'cd $TOMCAT_HOME; bin/startup.sh). If this isn't practical for some reason, change the webapps/oaicat/WEB-INF/web.xml and oaicat.properties files to use absolute paths in place of relative paths.
<h2> Generally speaking, how can I make my data available via OAI? </h2>
Many OAI tools are available. The list at <a href="http://www.openarchives.org/tools/tools.html">http://www.openarchives.org/tools/tools.html</a> would be a good place to start looking. Also consider the OAI Static Repository solution: <a href="http://www.openarchives.org/OAI/2.0/guidelines-static-repository.htm">http://www.openarchives.org/OAI/2.0/guidelines-static-repository.htm</a>.
<h2> I'm here to learn more about OAICat. What makes it special? </h2>
OAICat can be used as a stand-alone service, but its primary distinction, when compared to most other tools on the list, is that it can be integrated into existing systems. It achieves this by abstracting three key facets that can differ across systems:
<ul>
<li> the API used to access the data (e.g. JDBC or SRU)</li>
<li> the native record format (e.g. MARC, Dublin Core, METS)</li>
<li> the metadataFormats that should be made available for harvesting</li>
</ul>

Example implementations of each facet are included in the distribution. If they prove to be unsuitable for a particular situation, users can substitute their own implementations for any or all of these facets.
<h2> Can you be more specific? </h2>
No. :-) Well..., maybe. Take a look at this: <a href="/wikid/CollectionOaiCat:CustomizationNotes">CustomizationNotes</a>. The abstractions listed above are key to what makes OAICat useful for so many different scenarios. OTOH, abstraction can make it hard to wrap our minds around a problem. Until this wiki gets populated, your best bet is to contact me with details about your situation (<a href="http://www.oclc.org/research/staff/young.htm">http://www.oclc.org/research/staff/young.htm</a>). If an answer exists, I can point you to it. If not, I'll either write the general stuff up in the wiki, or else respond directly for peculiar situations.
<h2> I have 9000 records. Should I use the XmlFileOaiCatalog or FileSystemOaiCatalog implementation? </h2>
I'm guessing that either implementation can handle 9000 records. The bigger question, in my mind, is how do you plan to maintain this collection? In particular, you don't want the identifiers and datestamps changing willy-nilly when updates happen. The <a href="/wikid/CollectionOaiCat:FileSystemOaiCatalog">FileSystemOaiCatalog</a> and <a href="/wikid/CollectionOaiCat:XmlFileOaiCatalog">XmlFileOaiCatalog</a> are essentially toy implementations included for use with relatively static collections. <a href="/wikid/CollectionOaiCat:XmlFileOaiCatalog">XmlFileOaiCatalog</a> in particular, might even be considered obsolete in favor of the OAI Static Repository specification: <a href="http://www.openarchives.org/OAI/2.0/guidelines-static-repository.htm">http://www.openarchives.org/OAI/2.0/guidelines-static-repository.htm</a>. <p></p>
Keep in mind that the real strength of OAICat is that it was designed to work with data in its natural state. If possible, we should consider where your data comes from and how we can work with it there. This might be simpler than creating procedures to duplicate the data and keep it in sync with its source. Stop and think, why are you looking at this page in the first place if not to support duplication and synchronization of data?
<h2> How do I edit records in my OAI repository? </h2>
OAICat is an output-only web service. As mentioned several times now, its primary design is directed towards integration with another system, which  should take care of this for you. If you are determined to use OAICat as a standalone service (e.g. <a href="/wikid/CollectionOaiCat:FileSystemOaiCatalog">FileSystemOaiCatalog</a> or <a href="/wikid/CollectionOaiCat:XmlFileOaiCatalog">XmlFileOaiCatalog</a>), then do like I do and use your favorite text or XML editor to update the files on disk.
<h2> You expect me to edit my records with a text editor? That's insane! </h2>
It sounds like you need a full-fledged digital repository, not a mere OAI-PMH implementation like OAICat. Although the official list of OAI tools linked above makes little distinction, many of them are much <em>much</em> more than mere OAI data provider implementations. Look again to find one with the right mix of features.
<h2> What if I don't want to support the oai_dc metadataFormat? </h2>
For the sake of interoperability, the OAI-PMH specification requires that compliant repositories support oai_dc. If you don't care about interoperability, though, don't worry about being 100% compliant. Non-compliant repositories abound and last time I checked their creators were still allowed to roam free.
<h2> How do you think we might best deal with multiple kinds of data harvested and served?  Separate repository instances? </h2>
<ul>
<li> &quot;Items&quot; in an OAI repository can often be harvested in a variety of metadata formats (&quot;records&quot;). When you harvest, do you grab just one format, or multiple formats?</li>
<li> If you harvest from multiple sites in a common metadata format, there is no harm in throwing them together into a pile and then crosswalking them to other formats on the way out. This is the simplest solution.</li>
<li> If you grab multiple formats (whether from a single repository or from multiple), one solution would be to merge the various records for each item into a super record and store <em>that</em> in your database. When someone harvests this item, the <a href="/wikid/CollectionOaiCat:AbstractCatalog">AbstractCatalog</a> implementation class could grab the master record and hand it off to the Crosswalks implementation class to strip out the desired record. You might even enhance your Crosswalks implementation class to fill in some gaps by transforming one of the records that <em>is</em> present to produce a format that is lacking. In this solution, there is no harm it throwing together records from various harvested sources. This solution is uncomfortably fancy, though, at which point separate repositories might be easier to do.</li>
</ul>
</body>
</html>
</displayContent>
</resource>
