<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet href="/wikid/docs/xsl/mwCollections/CollectionOpenUrlObjectModel/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:CollectionOpenUrlObjectModel:OomBackground</srwIdentifier>
<collectionURI>info:sid/localhost:CollectionOpenUrlObjectModel</collectionURI>
<repository-identifier>CollectionOpenUrlObjectModel</repository-identifier>
<srwURL>http://alcme.oclc.org:80/wikid/search/WikiDb.localhost</srwURL>
<local-identifier>OomBackground</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>OpenURL Object Model (OOM)</repositoryName>
<description>Documentation for the OpenURL Object Model (OOM)</description>
<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>s7f68m</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:CollectionOpenUrlObjectModel:OomBackground</wr:refID>
<wr:refIDPrefix/>
<wr:userName>anonymous</wr:userName>
<wr:collection>CollectionOpenUrlObjectModel</wr:collection>
<wr:relativePath>2007/07/09/12</wr:relativePath>
<wr:fullRefID>inf_3asid_2flocalhost_3aCollectionOpenUrlObjectModel_3aOomBackground_5f20070709124123308</wr:fullRefID>
<wr:mimeType>text/xml</wr:mimeType>
<wr:sort>CollectionOpenUrlObjectModel:OomBackground</wr:sort>
<wr:dateCreated>2007-07-09</wr:dateCreated>
<wr:datestamp>2007-07-09</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:CollectionOpenUrlObjectModel:OomBackground"</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>2007-07-09</datestamp>
<!--
This is the URL for the content
-->
<contentURL>http://alcme.oclc.org:80/wikid/docs/WikiRepository/2007/07/09/12/inf_3asid_2flocalhost_3aCollectionOpenUrlObjectModel_3aOomBackground_5f20070709124123308</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>= OpenURL Object Model (OOM) Background =
Before we look closely at the OpenURL Object Model, there are two different ways to view OpenURL that have caused confusion and need to be clarified.

The original version, OpenURL 0.1 (http://alcme.oclc.org/openurl/docs/pdf/openurl-01.pdf''''''), was specified as a citation-linking protocol. This caught on well in the library community and is what most people think of when you mention “OpenURL”. The subsequent OpenURL 1.0 specification, however, took a different approach. Rather than defining an explicit protocol, OpenURL 1.0 (http://alcme.oclc.org/openurl/docs/pdf/z39_88_2004.pdf'''''') defines a framework for specifying protocols in general. The basic model in this framework is simple and intuitive, but suffers from several problems. First, the model is very abstract. For example, OpenURL 1.0 revolves around the intuitive but vague concepts of “what”, “who”, “where”, and “why”. The second problem is that the OpenURL 1.0 specification gave these simple concepts obfuscated names like “referent”, “requester”, “referring entity”, and “service type” respectively. The third problem is that the specification doesn't differentiate between core features and advanced features that many applications shouldn't have to worry about. I've tried to address the third problem by starting a blog (http://q6.oclc.org/openurl/simple_openurl/''''''). The second problem can be overcome by keeping a printout handy of the terminology mapping. The first problem takes some getting used to, but should quickly become second-nature.

Given this clarification, I would assert that OpenURL 1.0 represents a simple, intuitive, flexible, and lightweight model for specifying web services. This is achieved by normalizing the inputs of an operation into generic “what”, “who”, “where”, and “why” containers. Operations can be implemented against this normalized representation, with one or more bridges created between the normalized representation and the protocols that could be used to invoke it. Because these categories are so abstract, it should be possible to imagine that almost any web service could be represented in this way.

Another problem with OpenURL 1.0 needs to be pointed out. The conventional way to manifest an OpenURL 1.0 application is to create entries in the OpenURL Registry (http://www.openurl.info/registry/''''''). This isn’t the only way, however. The OpenURL Object Model (OOM) takes a different approach. OOM is to OpenURL as DOM is to XML. For example, the XML specification defines concepts like “element”, “attribute”, “node”, etc. just as the OpenURL specification defines concepts like “entity”, “descriptor”, “transport”, etc. OOM maps its concepts to the programming space in a language-independent way just like DOM does. The expectation is that these conceptual models would get mapped to specific languages in similar ways. For example, in the case of Java, the classes for DOM have been specified by a set of interfaces under the org.w3c.dom.* package. Something analogous has been done for OOM under the info.openurl.oom.* package (http://pubserv.oclc.org/oomRef-j/jars/dist/docs/dist.html'''''').  If you examine the classes in this package, they should all map quite literally to the OpenURL spec.

Likewise, there can be many implementations of these interface classes. In the case of DOM, we can look at Xerces and Crimson as alternative implementations of this interface set. In the case of OOM, I have written OOMRef-J as a reference implementation (http://pubserv.oclc.org/oomRef-j/jars/dist/docs/dist.html'''''').

The unexpected surprise that was revealed by this exercise was that OOMRef-J turned out to be a simple, lightweight, flexible, and intuitive application framework.
</raw>
</record>
</record>
</content>
<displayContent>
<html xmlns="http://www.w3.org/1999/xhtml">
<body><h1> OpenURL Object Model (OOM) Background </h1>
Before we look closely at the OpenURL Object Model, there are two different ways to view OpenURL that have caused confusion and need to be clarified.<p></p>
The original version, OpenURL 0.1 (<a href="http://alcme.oclc.org/openurl/docs/pdf/openurl-01.pdf">http://alcme.oclc.org/openurl/docs/pdf/openurl-01.pdf</a>), was specified as a citation-linking protocol. This caught on well in the library community and is what most people think of when you mention “OpenURL”. The subsequent OpenURL 1.0 specification, however, took a different approach. Rather than defining an explicit protocol, OpenURL 1.0 (<a href="http://alcme.oclc.org/openurl/docs/pdf/z39_88_2004.pdf">http://alcme.oclc.org/openurl/docs/pdf/z39_88_2004.pdf</a>) defines a framework for specifying protocols in general. The basic model in this framework is simple and intuitive, but suffers from several problems. First, the model is very abstract. For example, OpenURL 1.0 revolves around the intuitive but vague concepts of “what”, “who”, “where”, and “why”. The second problem is that the OpenURL 1.0 specification gave these simple concepts obfuscated names like “referent”, “requester”, “referring entity”, and “service type” respectively. The third problem is that the specification doesn't differentiate between core features and advanced features that many applications shouldn't have to worry about. I've tried to address the third problem by starting a blog (<a href="http://q6.oclc.org/openurl/simple_openurl/">http://q6.oclc.org/openurl/simple_openurl/</a>). The second problem can be overcome by keeping a printout handy of the terminology mapping. The first problem takes some getting used to, but should quickly become second-nature.<p></p>
Given this clarification, I would assert that OpenURL 1.0 represents a simple, intuitive, flexible, and lightweight model for specifying web services. This is achieved by normalizing the inputs of an operation into generic “what”, “who”, “where”, and “why” containers. Operations can be implemented against this normalized representation, with one or more bridges created between the normalized representation and the protocols that could be used to invoke it. Because these categories are so abstract, it should be possible to imagine that almost any web service could be represented in this way.<p></p>
Another problem with OpenURL 1.0 needs to be pointed out. The conventional way to manifest an OpenURL 1.0 application is to create entries in the OpenURL Registry (<a href="http://www.openurl.info/registry/">http://www.openurl.info/registry/</a>). This isn’t the only way, however. The OpenURL Object Model (OOM) takes a different approach. OOM is to OpenURL as DOM is to XML. For example, the XML specification defines concepts like “element”, “attribute”, “node”, etc. just as the OpenURL specification defines concepts like “entity”, “descriptor”, “transport”, etc. OOM maps its concepts to the programming space in a language-independent way just like DOM does. The expectation is that these conceptual models would get mapped to specific languages in similar ways. For example, in the case of Java, the classes for DOM have been specified by a set of interfaces under the org.w3c.dom.* package. Something analogous has been done for OOM under the info.openurl.oom.* package (<a href="http://pubserv.oclc.org/oomRef-j/jars/dist/docs/dist.html">http://pubserv.oclc.org/oomRef-j/jars/dist/docs/dist.html</a>).  If you examine the classes in this package, they should all map quite literally to the OpenURL spec.<p></p>
Likewise, there can be many implementations of these interface classes. In the case of DOM, we can look at Xerces and Crimson as alternative implementations of this interface set. In the case of OOM, I have written OOMRef-J as a reference implementation (<a href="http://pubserv.oclc.org/oomRef-j/jars/dist/docs/dist.html">http://pubserv.oclc.org/oomRef-j/jars/dist/docs/dist.html</a>).<p></p>
The unexpected surprise that was revealed by this exercise was that OOMRef-J turned out to be a simple, lightweight, flexible, and intuitive application framework.
</body>
</html>
</displayContent>
</resource>
