...
1.
...
Introduction
...
Document
...
Store
...
is
...
a
...
Document
...
storage
...
repository
...
system
...
with
...
features
...
like
...
checkin,
...
checkout,
...
Ingest
...
,
...
Delete
...
etc
...
for
...
library
...
records
...
such
...
as
...
Bibliographic,
...
Instance
...
(Holdings
...
and
...
Items)
...
etc.
...
Most
...
of
...
the
...
records
...
are
...
in
...
XML
...
format
...
but
...
the
...
Document
...
Store
...
is
...
format
...
agnostic
...
in
...
that
...
it
...
stores
...
the
...
content
...
as
...
is
...
without
...
any
...
type
...
conversion.
...
Furthermore
...
indexing
...
of
...
the
...
stored
...
data
...
is
...
also
...
supported
...
for
...
efficient
...
search
...
and
...
retrieval.
...
Although
...
the
...
Document
...
Store
...
is
...
an
...
independent
...
system
...
that
...
comes
...
with
...
basic
...
UI
...
to
...
enable
...
supported
...
operations,
...
majority
...
of
...
interaction
...
happens
...
from
...
within
...
the
...
code
...
of
...
OLE
...
such
...
as
...
ingest
...
of
...
new
...
records,
...
editing
...
of
...
existing
...
records,
...
search
...
and
...
retrievals.
...
The functionality of Docstore is mostly used by other processes like OLE.
However, for demonstration and testing docstore, a screen is provided with different tabs for different functions of docstore and information about docstore.
Please refer to the docstore application deployed on Dev server:
http://docstore.dev.ole.kuali.org/oledocstore/
...
2.
...
Operations
2.1
...
Summary
...
Shows
...
the
...
summary
...
of
...
node
...
count
...
for
...
each
...
category,
...
type
...
and
...
formath
...
2.
...
2
...
Node
...
Count
...
Shows
...
node
...
count
...
at
...
each
...
level
...
of
...
the
...
docstore
...
for each category,
...
type
...
and
...
format
...
2.3
...
Ingest
...
Allows
...
storing
...
of
...
documents
...
in
...
the
...
document
...
store.
...
The
...
input
...
should
...
be
...
a
...
Request
...
XML
...
with
...
a
...
standard
...
schema
...
and
...
returns
...
the
...
Response
...
XML
...
with
...
a
...
list
...
of
...
ingested
...
UUIDs.
...
2.3.1
...
Sending
...
the
...
request
...
URL:
...
http://localhost:9080/oledocstore/document
...
Method:
...
POST
...
Parameters:
docAction=ingestContent
stringContent=<request.xml as described in the next section>
2.3.2 Request XML
Information about the ingest operation to be performed.
No Format |
---|
<request> <user>ole-khuntley</user> <operation>batchIngest</operation> <requestDocuments> <ingestDocument id="1" category="work" type="bibliographic" format="marc"> <content> See section "Sample Input XML for Ingest". </content> </ingestDocument> </requestDocuments> </request> {noformat} h3. |
2.3.3
...
Receiving
...
the
...
response
...
HttpResponse
...
should
...
be
...
read
...
and
...
interpreted
...
as
...
given
...
in
...
the
...
next
...
section
...
below.
...
2.3.4
...
Response
...
XML
...
Information
...
about
...
the
...
response
...
from
...
the
...
service
...
for
...
the
...
given
...
request
...
No Format |
---|
<response>
<documents>
<document id="1" category="work" type="bibliographic" format="marc">
<uuid>8675a422-b6ad-440e-bc0d-9f0dc1526ed2</uuid>
</document>
</documents>
<user>ole-khuntley</user>
<operation>batchIngest</operation>
<status>Success</status>
<message>Documents ingested</message>
</response>
{noformat}
|
Each
...
document
...
that
...
is
...
ingested
...
will
...
be
...
given
...
a
...
UUID
...
as
...
specified
...
in
...
the
...
response.
...
2.4
...
Get
...
UUIDs
...
User
...
can
...
get
...
a
...
sample
...
of
...
UUIDs
...
of
...
documents
...
of
...
any
...
category,
...
type,
...
format
...
.
already
...
ingested.
...
It
...
is
...
useful
...
mainly
...
for
...
demo
...
purposes.
...
2.5
...
Check-in
...
Check-in
...
functionality
...
allows
...
to
...
modify
...
the
...
content
...
and
...
metadata
...
(additional
...
attributes)
...
of
...
a
...
document
...
identified
...
by
...
its
...
UUID
...
(Universally
...
Unique
...
Identifier).
...
2.5.1
...
Sending
...
the
...
request
...
URL:
...
http://localhost:9080/oledocstore/document
...
Method:
...
POST
...
Parameters:
docAction=checkIn
stringContent=<request.xml as described in the next section>
2.5.2 Request XML
Information about the check in operation to be performed
No Format |
---|
<request> <user>ole-khuntley</user> <operation>checkIn</operation> <requestDocuments> <ingestDocument id="5325d77a-8221-4fda-a78f-6d2f96e0b059" category="work" type="bibliographic" format="marc"> <content> See section "Sample Input XML for Check in". </content> </ingestDocument> </requestDocuments> </request> {noformat} h3. |
2.5.3
...
Receiving
...
the
...
response
...
HttpResponse
...
should
...
be
...
read
...
and
...
interpreted
...
as
...
given
...
in
...
the
...
next
...
section
...
below.
...
2.5.4
...
Response
...
XML
Information about the response from the service for the given request
No Format |
---|
<?xml version="1.0" encoding="UTF-8"?>
<OLEDocstore-call>
<request>
<command>Check-in</command>
<params/>
</request>
<response>
<status>Success</status>
<message>Successfully checked in </message>
</response>
</OLEDocstore-call>
{noformat}
h2. |
2.6
...
Check-out
...
This
...
operation
...
retrieves
...
the
...
content
...
of
...
a
...
document
...
given
...
its
...
UUID.
...
2.6.1
...
Sending
...
the
...
request
...
URL:
...
http://localhost:9080/oledocstore/document
...
Method:
...
POST
...
Parameters:
docAction=checkOut
uuid=<uuid of the document to be retrieved>
2.6.2 Receiving the response
HttpResponse should be read and interpreted as given in the next section below.
2.6.3 Response XML
Content of the document with the given UUID.
2.7 Delete
Deletes a record from DocumentStore based on the given UUID.
2.7.1 Sending the request
URL: http://localhost:9080/oledocstore/document
Method: POST
Parameters:
docAction=delete or deleteWithLinkedDocs
requestContent=<request.xml as described in the next section>
2.7.2 Request XML
Information about the delete operation to be performed. The "Id" attribute of <ingestDocument> should be a valid UUID of a previously ingested document.
No Format |
---|
<request>
<user>ole-khuntley</user>
<operation>delete</operation>
<requestDocuments>
<ingestDocument id="715e92f0-b3ab-4263-96d9-58183a23e6d5"><linkedIngestDocuments></linkedIngestDocuments></ingestDocument>
</requestDocuments>
</request>
|
2.7.3 Receiving the response
HttpResponse should be read and interpreted as given in the next section below.
2.7.4 Response XML
Information about the response from the service for the given request.
No Format |
---|
<response>
<documents>
<document id="715e92f0-b3ab-4263-96d9-58183a23e6d5"></document>
</documents>
<user>ole-khuntley</user>
<operation>delete</operation>
<status>Success</status>
</response>
|
2.8 BagIt Requests
When the document content is of (non-text or binary) format PDF, DOC etc, (as in the case of License Agreement documents) it is difficult to send it to docstore through a web page.
And when the request has to deal with more than one of such documents, it is even more difficult.
So, BagIt packaging standard is used to bundle such requests along with the files of these formats.
The request can be for ingest, checkin, checkout or delete.
This functionality can be demonstrated using the "BagIt Requests" tab in thehttp://docstore.dev.ole.kuali.org/oledocstore/ screen.
To submit a request of this type follow these steps:
1. Create a folder (e.g. /opt/docstore/upload/bagItRequests/ingest) (link to an attachment of zipped bagItRequests folder with ingest, checkin, checkout, delete folders)
(Make sure this folder has write permission for all users.)
2. Create and copy the request.xml and the corresponding binary files into it.
3. Enter the full path of this folder in the text box for "BagIt Requests Directory".
4. Click the Submit button.
How a bagIt request is processed?
The utility code for handling BagIt request creates a 'Bag' (as per BagIt standard) out of the "BagIt Requests Directory".
The content of the bag is sent to Docstore via an HTTP connection.
Docstore unbags the received content into a temp folder, uses the request.xml to process the files in the temp folder if any.
Docstore creates a respose.xml file to record the outcome of the processed request
and copies it along with any files that are part of response (in case of checkout) to a temp folder.
Then a 'Bag' is created out of the temp folder and sent back to the client.
The utility code receives the content from Docstore, unbags the content to a temp folder (e.g. /opt/docstore/upload/bagItRequests/ingest/response).
The response.xml along with the temp folder name is to the browser.
2.9 Appendix
2.9.1 Sample Input XML for Ingest
No Format |
---|
<request> <user>ole-khuntley</user> <operation>batchIngest</operation> <requestDocuments> <ingestDocument id="1" category="work" type="bibliographic" format="marc"> <content><![CDATA[ <subfield<collection codexmlns="c">DLC</subfield>http://www.loc.gov/MARC21/slim"> <record> <subfield code="d">DLC</subfield> </datafield> <leader>01142cam 2200301 a 4500</leader> <datafield<controlfield tag="042" ind1=" " ind2=" "> 001">92005291</controlfield> <subfield<controlfield codetag="a003">lcac<>DLC</subfield>controlfield> </datafield><controlfield tag="005">19930521155141.9</controlfield> <datafield<controlfield tag="050008" ind1="0" ind2="0"> >920219s1993 caua j 000 0 eng</controlfield> <datafield tag="010" ind1=" <subfield" codeind2="a">PS3537.A618</subfield> "> <subfield code="ba">A88 1993<>92005291</subfield> </datafield> <datafield tag="082020" ind1="0 " ind2="0 "> <subfield code="a">811/.52<>0152038655 :</subfield> <subfield code="2c">20<>$15.95</subfield> </datafield> <datafield tag="100040" ind1="1 " ind2=" "> <subfield code="a">Sandburg, Carl,<>DLC</subfield> <subfield code="c">DLC</subfield> <subfield code="d">1878-1967.<>DLC</subfield> </datafield> <datafield tag="245042" ind1="1 " ind2="0 "> <subfield code="a">Arithmetic >lcac</</subfield> </datafield> <subfield code="c"> <datafield tag="050" ind1="0" ind2="0"> Carl Sandburg ; illustrated as an anamorphic adventure by Ted Rand.<subfield code="a">PS3537.A618</subfield> <subfield <code="b">A88 1993</subfield> </datafield> <datafield tag="250082" ind1=" 0" ind2=" 0"> <subfield code="a">1st ed.<>811/.52</subfield> </datafield> <subfield code="2">20</subfield> <datafield tag="260" ind1=" " ind2=" "> </datafield> <datafield <subfield codetag="100" ind1="a1">San Diego :</subfield>ind2=" "> <subfield code="ba">Harcourt Brace Jovanovich>Sandburg, Carl,</subfield> <subfield code="cd">c1993>1878-1967.</subfield> </datafield> <datafield tag="300245" ind1=" 1" ind2=" 0"> <subfield code="a">1 v. (unpaged) :>Arithmetic /</subfield> <subfield code="c"> Carl Sandburg ; illustrated as an anamorphic <subfield code="b">ill. (some col.) ;</subfield> adventure by Ted Rand. <subfield code="c">26 cm.</subfield> </datafield> <datafield tag="500250" ind1=" " ind2=" "> <subfield code="a">One Mylar sheet included in pocket>1st ed.</subfield> </datafield> <datafield tag="520260" ind1=" " ind2=" "> <subfield code="a"> =" "> A poem about numbers and their characteristics. Features anamorphic, or distorted,<subfield code="a">San Diego :</subfield> <subfield code="b">Harcourt Brace Jovanovich,</subfield> drawings which can be <subfield code="c">c1993.</subfield> restored to normal by viewing from a particular angle or by viewing the image's </datafield> <datafield tag="300" ind1=" " ind2=" "> <subfield reflection in thecode="a">1 v. (unpaged) :</subfield> <subfield code="b">ill. (some provided Mylar cone.col.) ;</subfield> <subfield code="c">26 cm.</subfield> </datafield> <datafield tag="650500" ind1=" " ind2="0 "> <subfield code="a">Arithmetic</subfield>>One Mylar sheet <subfield code="x">Juvenile poetryincluded in pocket.</subfield> </datafield> <datafield tag="650520" ind1=" " ind2="0 "> <subfield code="a">Children's> poetry, American.</subfield> </datafield> A poem about numbers and <datafield tag="650" ind1=" " ind2="1"> their characteristics. Features anamorphic, or distorted, <subfield code="a">Arithmetic</subfield> drawings which can be <subfield code="x">Poetry.</subfield> </datafield> restored to normal by viewing from a particular <datafield tag="650" ind1=" " ind2="1"> angle or by viewing the image's <subfield code="a">American poetry.</subfield> reflection in the </datafield> <datafield tag="650" ind1=" " ind2="1"> provided Mylar cone. <subfield code="a">Visual perception.</subfield> </datafield> <datafield tag="700650" ind1="1 " ind2=" 0"> <subfield code="a">Rand, Ted,<>Arithmetic</subfield> <subfield code="ex">ill>Juvenile poetry.</subfield> </datafield> </record> </collection> <datafield tag="650" ind1=" " ind2="0"> ]]> <subfield code="a">Children's poetry, American.</content>subfield> </ingestDocument> datafield> </requestDocuments> </request> {noformat} h3. 2.9.2 Sample Input file for Check In The "Id" attribute of <ingestDocument> should be a valid UUID of a previously ingested document. {noformat} <request> <user>ole-khuntley</user> <operation>checkIn</operation> <requestDocuments> <datafield tag="650" ind1=" " ind2="1"> <subfield code="a">Arithmetic</subfield> <subfield code="x">Poetry.</subfield> </datafield> <datafield <ingestDocument idtag="1650" categoryind1="work" type="bibliographic" formatind2="marc1"> <content><![CDATA[ <collection xmlns="http://www.loc.gov/MARC21/slim"><subfield code="a">American poetry.</subfield> <record> <leader>01142cam 2200301 a 4500</leader></datafield> <controlfield<datafield tag="001650">92005291</controlfield> ind1=" " ind2="1"> <controlfield tag="003">DLC</controlfield> <subfield <controlfield tagcode="005a">19930521155141>Visual perception.9<</controlfield>subfield> <controlfield tag="008">920219s1993 caua j 000 0 eng</controlfield></datafield> <datafield tag="010700" ind1=" 1" ind2=" "> <subfield code="a">92005291<>Rand, Ted,</subfield> <subfield code="e">ill.</subfield> </datafield> </record> </collection> <datafield tag="020" ind1=" " ind2=" "> ]]> <subfield code="a">0152038655 :</subfield>content> </ingestDocument> <subfield code="c">$15.95</subfield></requestDocuments> </request> |
2.9.2 Sample Input file for Check In
The "Id" attribute of <ingestDocument> should be a valid UUID of a previously ingested document.
No Format |
---|
<request> <user>ole-khuntley</user> <operation>checkIn</operation> </datafield><requestDocuments> <datafield<ingestDocument tagid="0401" ind1category="work" type="bibliographic" ind2format=" marc"> <subfield code="a">DLC</subfield><content><![CDATA[ <collection xmlns="http://www.loc.gov/MARC21/slim"> <record> <subfield code="c">DLC</subfield> <leader>01142cam 2200301 a 4500</leader> <controlfield <subfield codetag="d">DLC</subfield> </datafield>001">92005291</controlfield> <datafield<controlfield tag="042003">DLC</controlfield> ind1=" " ind2=" "> <controlfield tag="005">19930521155141.9</controlfield> <subfield <controlfield codetag="a008">lcac</subfield>>920219s1993 caua j 000 0 </datafield>eng</controlfield> <datafield tag="050010" ind1="0 " ind2="0 "> <subfield code="a">PS3537.A618</subfield> <subfield code="b">A88 1993<">92005291</subfield> </datafield> <datafield tag="082020" ind1="0 " ind2="0 "> <subfield code="a">811/.52</>0152038655 :</subfield> <subfield code="2c">20<>$15.95</subfield> </datafield> <datafield tag="100040" ind1="1 " ind2=" "> <subfield code="a">Sandburg, Carl,<>DLC</subfield> <subfield code="c">DLC</subfield> <subfield code="d">1878-1967.<>DLC</subfield> </datafield> <datafield tag="245042" ind1="1 " ind2="0 "> <subfield code="a">Arithmetic >lcac</</subfield> <subfield code="c"> </datafield> <datafield tag="050" ind1="0" ind2="0"> Carl Sandburg ; illustrated as an anamorphic adventure by Ted Rand.<subfield code="a">PS3537.A618</subfield> <<subfield code="b">A88 1993</subfield> </datafield> <datafield tag="250082" ind1=" 0" ind2=" "> <subfield code="a">1st ed.</subfield>0"> </datafield> </record> </collection><subfield code="a">811/.52</subfield> <subfield code="2">20</subfield> ]]> </content>datafield> </ingestDocument> </requestDocuments> </request> {noformat} h3. 3. Search This functionality allows documents to be searched for by giving keywords or phases. Searching can be based on category, type, format, search fields. h4. *3.1 Quick Search* Select Doc Category : Work Doc Type : Bibliographic Doc Format : ALL Searching on default condition(click search button without specifying any conditions) will give all the records in search result page. Select Doc Category : Work Doc Type : Bibliographic Doc Format : MARC Type one or more keywords in a text box. System shows records with any field matching one or more keywords. h4. *3.2 Advanced Search* Select Doc Category : Work Doc Type : Bibliographic Doc Format : MARC The drop down for search fields will be populated based on the category selected above. User specifies a search condition: Selects a field. Enters one or more keywords. Specifies whether the keywords should be searched for as "All of these", "Any of these" or "As a phrase". "All of these" - Any record with the selected field having all the entered keywords is included in the search results. "Any of these" - Any record with the selected field having at least one of the entered keywords is included in the search results. "As a phrase" - Any record with the selected field having all the entered keywords in same order is included in the search results. User adds another condition: Chooses whether to apply this condition in addition to the previous one ("AND") or to apply this condition as an alternative to the previous one ("OR") ("NOT"???), "AND" - the conditions before and after this operator should be satisfied. "OR" - one of the conditions before and after this operator should be satisfied. "NOT" - the condition after this operator should not be satisfied. User repeats previous step as many times as needed using the ADD and DELETE links. \[+\]ADD : click on this link to add fields for a new search condition. \[-\]Delete : click on this link to delete the last search condition. Search is performed based on the conditions entered by the user. For more information refer to the "Search" section in the document :[<datafield tag="100" ind1="1" ind2=" "> <subfield code="a">Sandburg, Carl,</subfield> <subfield code="d">1878-1967.</subfield> </datafield> <datafield tag="245" ind1="1" ind2="0"> <subfield code="a">Arithmetic /</subfield> <subfield code="c"> Carl Sandburg ; illustrated as an anamorphic adventure by Ted Rand. </subfield> </datafield> <datafield tag="250" ind1=" " ind2=" "> <subfield code="a">1st ed.</subfield> </datafield> </record> </collection> ]]> </content> </ingestDocument> </requestDocuments> </request> |
3. Search
This functionality allows documents to be searched for by giving keywords or phases. Searching can be based on category, type, format, search fields.
3.1 Quick Search
Select Doc Category : Work
Doc Type : Bibliographic
Doc Format : ALL
Searching on default condition(click search button without specifying any conditions) will give all the records in search result page.
Select Doc Category : Work
Doc Type : Bibliographic
Doc Format : MARC
Type one or more keywords in a text box.
System shows records with any field matching one or more keywords.
3.2 Advanced Search
Select Doc Category : Work
Doc Type : Bibliographic
Doc Format : MARC
The drop down for search fields will be populated based on the category selected above.
User specifies a search condition:
Selects a field.
Enters one or more keywords.
Specifies whether the keywords should be searched for as "All of these", "Any of these" or "As a phrase".
"All of these" - Any record with the selected field having all the entered keywords is included in the search results.
"Any of these" - Any record with the selected field having at least one of the entered keywords is included in the search results.
"As a phrase" - Any record with the selected field having all the entered keywords in same order is included in the search results.
User adds another condition:
Chooses whether to apply this condition in addition to the previous one ("AND") or to apply this condition as an alternative to the previous one ("OR") ("NOT"???),
"AND" - the conditions before and after this operator should be satisfied.
"OR" - one of the conditions before and after this operator should be satisfied.
"NOT" - the condition after this operator should not be satisfied.
User repeats previous step as many times as needed using the ADD and DELETE links.
[+]ADD : click on this link to add fields for a new search condition.
[-]Delete : click on this link to delete the last search condition.
Search is performed based on the conditions entered by the user.
For more information refer to the "Search" section in the document :https://wiki.kuali.org/display/OLE/OLE+Search+Technical+Documentation
...