Rekordy informacji o dostępności
Informacje
Portal wymaga tylko sumarycznego podzbioru informacji na temat bieżącego statusu dostępności egzemplarzy wybranych rekordów.
Niżej opisany schemat metadanych i ich sposób ich udostępniania w serwerze protokołu OAI-PMH jest podzbiorem standardu ISO 20775 (Schema for Holdings Information).
Zbiór danych stanu dostępności egzemplarzy jest co prawda podzbiorem zbioru danych bibliograficznych, jednak z uwagi na inną częstotliwość zmian - powinny być reprezentowane przez osobne repozytorium OAI-PMH. W szczególności repozytorium zawierające stan dostępności nie będzie zawierało rekordów, które nie są w żaden sposób dostępne dla czytelników (ale posiadają opis bibliograficzny w MARC21).
Struktura
Element holding jest obowiązkowy i powtarzalny. Każdy z nich składa się z dwóch elementów - institutionIdentifier i holdingSimple.
Pole danych | Element ISO 20775 | Wartość | Opt. | Uwagi |
---|---|---|---|---|
Identyfikator placówki | holdings.holding.institutionIdentifier.value | tekst | ||
Ogólna liczba egzemplarzy | holdings.holding.holdingSimple.copiesSummary.copiesCount | dodatnia liczba całkowita | Ogólna liczba egzemplarzy powinna pomijać egzemplarze trwale wycofane z obrotu (np. ubytkowane). | |
Liczba egzemplarzy dostępnych | holdings.holding.holdingSimple.copiesSummary.status.availableCount | nieujemna liczba całkowita | ||
Kod dostępu do zasobu | holdings.holding.holdingSimple.copiesSummary.status.availableFor | cyfra od 0 - 6 | Kod specyfikujący sposób dostępu do zasobu: | |
Data najwcześniejszej dostępności zasobu | holdings.holding.holdingSimple.copiesSummary.status.earliestDispatchDate | (opcjonalne) data i czas najwcześniejszej możliwej dostępności zasobu | ||
Długość kolejki oczekujących | holdings.holding.holdingSimple.copiesSummary.reservationQueueLength | liczba całkowita | (opcjonalnie) - można pominąć, jeśli system biblioteczny nie zezwala na rezerwowanie materiałów w danej placówce | |
Liczba egzemplarzy niedostępnych (jeszcze) w obrocie | holdings.holding.holdingSimple.onOrderCount | liczba całkowita | (opcjonalnie) - można pominąć, jeśli nie ma takich egzemplarzy |
Przykład rekordu
<?xml version="1.0" encoding="UTF-8"?> <holdings xsi:noNamespaceSchemaLocation="http://www.loc.gov/standards/iso20775/ISOholdings_V1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <holding> <institutionIdentifier> <value>20</value> </institutionIdentifier> <holdingSimple> <copiesSummary> <copiesCount>10</copiesCount> <status> <availableCount>0</availableCount> <availableFor>1</availableFor> <earliestDispatchDate>2014-12-17T09:30:47Z</earliestDispatchDate> </status> </copiesSummary> <reservationQueueLength>123</reservationQueueLength> <onOrderCount>1</onOrderCount> </holdingSimple> </holding> </holdings>
Obsługa informacji o dostępności w protokole OAI-PMH
Identify
Jak wcześniej wspomniano, rekordy bibliograficzne i informacja o dostępności egzemplarzy udostępniane są przez oddzielne repozytoria. Każde z nich może w ramach komendy Identify zwracać adres powiązanego repozytorium (tzw. friend). Np. repozytorium główne, będzie informować o "zaprzyjaźnionym" repozytorium informacji o dostępności.
http://an.oa.org/OAI-marc?verb=Identify
<?xml version="1.0" encoding="UTF-8"?> <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2014-05-21T11:30:30Z</responseDate> <request verb="Identify">http://an.oa.org/OAI-marc</request> <Identify> <repositoryName>Biblioteka X: rekordy bibliograficzne</repositoryName> <baseURL>http://an.oa.org/OAI-marc</baseURL> <protocolVersion>2.0</protocolVersion> <adminEmail>somebody@loc.gov</adminEmail> <earliestDatestamp>2010-01-01T12:00:00Z</earliestDatestamp> <deletedRecord>persistent</deletedRecord> <granularity>YYYY-MM-DDThh:mm:ssZ</granularity> <compression>deflate</compression> <description> <friends xmlns="http://www.openarchives.org/OAI/2.0/friends/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/friends/ http://www.openarchives.org/OAI/2.0/friends.xsd"> <baseURL>http://an.oa.org/OAI-holdings</baseURL> </friends> </description> </Identify> </OAI-PMH>
ListMetadataFormats
Komenda ListMetadataFormats serwera OAI-PMH powinna zwracać dostępny format metadanych o identyfikatorze iso20775
<metadataFormat> <metadataPrefix>iso20775</metadataPrefix> <schema>http://www.loc.gov/standards/iso20775/ISOholdings_V1.0.xsd</schema> <metadataNamespace>http://www.loc.gov/standards/iso20775/</metadataNamespace> </metadataFormat>
ListRecords
Komenda ListRecords serwera OAI-PMH, w przypadku selektywnego pobierania danych o dostępności będzie miała np. taką postać:
Zapytanie
http://an.oa.org/OAI-holdings? verb=ListRecords&from=2014-05-15T10:15:00Z&metadataPrefix=iso20775
Odpowiedź
<?xml version="1.0" encoding="UTF-8"?> <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2014-05-21T11:30:30Z</responseDate> <request verb="ListRecords" from="2014-05-15T10:15:00Z" metadataPrefix="iso20775">http://an.oa.org/OAI-holdings</request> <ListRecords> <record> <header> <identifier>oai:xyz.org:9901001</identifier> <datestamp>2014-05-15T11:12:32Z</datestamp> </header> <metadata> <holdings xmlns="http://www.loc.gov/standards/iso20775/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/standards/iso20775/ http://www.loc.gov/standards/iso20775/ISOholdings_V1.0.xsd"> <holding> <institutionIdentifier> <value>20</value> </institutionIdentifier> <holdingSimple> <copiesSummary> <copiesCount>10</copiesCount> <status> <availableCount>3</availableCount> <availableFor>1</availableFor> </status> <status> <availableCount>1</availableCount> <availableFor>5</availableFor> </status> </copiesSummary> <reservationQueueLength>0</reservationQueueLength> <onOrderCount>1</onOrderCount> </holdingSimple> </holding> <holding> <institutionIdentifier> <value>30</value> </institutionIdentifier> <holdingSimple> <copiesSummary> <copiesCount>1</copiesCount> </copiesSummary> <reservationQueueLength>5</reservationQueueLength> </holdingSimple> </holding> </holdings> </metadata> </record> </ListRecords> </OAI-PMH>
Usuwanie dostępności
W przypadku usuwania z obrotu egzemplarzy (ubytkowanie, itp.), jeśli usuwany jest jedyny dostępny egzemplarz przypisany do danego rekordu - należy zwracać informację o usunięciu całego rekordu z repozytorium. Informacja o usunięciu musi być trwała (dla rekordów, które kiedykolwiek zostały udostępnione w tym repozytorium). Nie ma natomiast potrzeby (i sensu) zwracać jako usunięte rekordów, które nigdy nie miały żadnych egzemplarzy wprowadzonych do obrotu lub usunięto z obrotu wszystkie egzemplarze przed pierwszym uruchomieniem serwera.
<?xml version="1.0" encoding="UTF-8"?> <OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> <responseDate>2014-05-21T11:30:30Z</responseDate> <request verb="ListRecords" from="2014-05-15T12:15:00Z" metadataPrefix="iso20775">http://an.oa.org/OAI-holdings</request> <ListRecords> <record> <header status="deleted"> <identifier>oai:xyz.org:9901002</identifier> <datestamp>2014-05-15T12:11:55Z</datestamp> </header> </record> </ListRecords> </OAI-PMH>
Long polling
Klient protokołu OAI-PMH wykorzystywany do pobierania informacji o zmianach wprowadza niestandardowe rozszerzenie składni dla ListRecords - opcjonalny parametr x-wait
- który powoduje, że serwer OAI-PMH - w przypadku braku rekordów dla zadanego zakresu czasu - zawiesza odpowiedź do momentu pojawienia się jakiegoś rekordu (lub - o ile podany jest parametr until
- do podanego momentu). Taki mechanizm pozwala ograniczyć częstotliwość zapytań do serwera OAI-PMH. Wykorzystywany jest on tylko dla komendy ListRecords i tylko w przypadku pobierania najświeższych (bieżących) informacji o zmianach w stanie dostępności.
Mechanizm ten polega na żądaniu od serwera listy zmian dla podanego zakresu czasu - od chwili ostatniej pobranej zmiany do chwili "z przyszłości". Przykład:
Czas ostatniej pobranej zmiany: 2014-05-01T17:00:00Z
Bieżący czas: 2014-05-01T17:20:14Z
http://an.oa.org/OAI-holdings? verb=ListRecords&from=2014-05-01T17:00:00Z&until=2014-05-01T17:30:00&x-wait=True&metadataPrefix=iso20775
Przypadek standardowego serwera:
- serwer nie zna parametru
x-wait
, dlatego zwraca błądbadArgument
- klient OAI wywołuje ListRecords bez parametru
x-wait
co ustalony przedział czasu (np. co minutę)
Przypadek serwera obsługującego long polling:
- jeśli od podanego czasu (from) zaszły zmiany, wysyła je natychmiast.
- jeśli nie - oczekuje na pojawienie się zmian, aż do osiągnięcia podanego czasu (
until
) - jeśli pojawi się jakaś zmiana: serwer wysyła listę zmienionych rekordów (uprzednio upewniwszy się, że z danym znacznikiem czasu nie będzie już kolejnych zmian innych rekordów: np. może poczekać z odpowiedzią do końca sekundy)
- jeśli nie pojawi się żadna zmiana, a osiągnie moment podany parametrem
until
- wyśle błądnoRecordsMatch
- klient wykonuje ponowne zapytanie przesuwając znacznik czasu
until
dalej w przyszłość.