<!-- 
RSS generated by JIRA (1001.0.0-SNAPSHOT#100246-sha1:7a5c50119eb0633d306e14180817ddef5e80c75d) at Fri Feb 09 00:13:40 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>FOLIO Jira</title>
    <link>https://folio-org.atlassian.net</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>1001.0.0-SNAPSHOT</version>
        <build-number>100246</build-number>
        <build-date>07-02-2024</build-date>
    </build-info>

<item>
            <title>[MODOAIPMH-12] OAI-PMH: Implement verb &quot;ListRecords&quot;</title>
                <link>https://folio-org.atlassian.net/browse/MODOAIPMH-12</link>
                <project id="10151" key="MODOAIPMH">mod-oai-pmh</project>
                    <description>&lt;p&gt;Official specification: &lt;a href=&quot;https://www.openarchives.org/OAI/openarchivesprotocol.html#ListRecords&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://www.openarchives.org/OAI/openarchivesprotocol.html#ListRecords&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1. Implementation&lt;br/&gt;
2. Error conditions&lt;br/&gt;
3. Date ranges (from/until)&lt;br/&gt;
4. Sets (&quot;all&quot;)&lt;/p&gt;

&lt;p&gt;This story &lt;ins&gt;does not&lt;/ins&gt; include resumptionTokens.  That will be handled in a separate story.&lt;/p&gt;

&lt;p&gt;Can probably reuse some of the ListIdentifiers code&lt;/p&gt;

&lt;p&gt;For now multiple calls to inventory may be required.&lt;/p&gt;

&lt;p&gt;Use a default limit of 100 records for now&lt;/p&gt;</description>
                <environment></environment>
        <key id="64588">MODOAIPMH-12</key>
            <summary>OAI-PMH: Implement verb &quot;ListRecords&quot;</summary>
                <type id="10005" iconUrl="https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10309?size=medium">Story</type>
                            <parent id="10625">UXPROD-993</parent>
                                    <priority id="10002" iconUrl="https://dev.folio.org/assets/jira-priority/jira-p3.svg">P3</priority>
                        <status id="6" iconUrl="https://folio-org.atlassian.net/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10003">Done</resolution>
                                                        <assignee accountid="5af5ecdb772036612ff61cf1">Hkaplanian</assignee>
                                                                <reporter accountid="5af5ecdb772036612ff61cf1">Hkaplanian</reporter>
                                    <labels>
                            <label>epam-thunderjet</label>
                    </labels>
                <created>Fri, 28 Sep 2018 17:32:14 +0000</created>
                <updated>Wed, 14 Nov 2018 11:20:00 +0000</updated>
                            <resolved>Fri, 9 Nov 2018 13:27:19 +0000</resolved>
                                                    <fixVersion>1.0.0</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                <comments>
                                                            <comment id="157163" author="712020:aa2bd653-1e36-4dcb-a90c-03a5108288c4" created="Thu, 1 Nov 2018 14:34:52 +0000"  >&lt;p&gt;The default implementation uses &lt;a href=&quot;https://s3.amazonaws.com/foliodocs/api/mod-inventory-storage/instance-storage.html&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;Instance Storage API&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;First logic calls &lt;a href=&quot;https://s3.amazonaws.com/foliodocs/api/mod-inventory-storage/instance-storage.html#instance_storage_instances_get&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;/instance-storage/instances&lt;/a&gt; endpoint to get instance UUID&apos;s.
	&lt;ul&gt;
		&lt;li&gt;In case the instances are returned successfully, the step #2 is triggered&lt;/li&gt;
		&lt;li&gt;In case no instances returned, the OAI-PMH response is build with &lt;tt&gt;noRecordsMatch&lt;/tt&gt; error and sent to client&lt;/li&gt;
		&lt;li&gt;In case instance-storage returns failure status code, the further processing is stopped and mod-oai-pmh returns response with &lt;ins&gt;500&lt;/ins&gt; status code&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Once success response comes, the logic builds OAI records with header and calls asynchronously &lt;a href=&quot;https://s3.amazonaws.com/foliodocs/api/mod-inventory-storage/instance-storage.html#instance_storage_instances__instanceid__source_record_marc_json_get&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;/instance-storage/instances/{instanceId}/source-record/marc-json&lt;/a&gt; endpoint to get marc data for each record. The resulting mod-oai-pmh response depends on the response from instance-storage service:
	&lt;ul&gt;
		&lt;li&gt;If marc-json returns success status code with marc data, the OAI record is updated with metadata&lt;/li&gt;
		&lt;li&gt;If marc-json returns &lt;ins&gt;404&lt;/ins&gt; status code, the Record &lt;ins&gt;is skipped&lt;/ins&gt; i.e. it is not being added to the ListRecords response&lt;/li&gt;
		&lt;li&gt;If marc-json returns other failure code, the processing is stopped and mod-oai-pmh returns response with &lt;ins&gt;500&lt;/ins&gt; status code&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Regards,&lt;br/&gt;
Piotr&lt;/p&gt;</comment>
                                                            <comment id="157164" author="712020:aa2bd653-1e36-4dcb-a90c-03a5108288c4" created="Thu, 1 Nov 2018 15:06:44 +0000"  >&lt;p&gt;Also we&apos;ve noticed that &lt;a href=&quot;https://s3.amazonaws.com/foliodocs/api/mod-inventory-storage/instance-storage.html#instance_storage_instances__instanceid__source_record_marc_json_get&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;/instance-storage/instances/{instanceId}/source-record/marc-json&lt;/a&gt; returns &lt;tt&gt;ind1&lt;/tt&gt; and &lt;tt&gt;ind2&lt;/tt&gt; with 2 backslash symbols as a value when space is intended to be there e.g.&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
...
  &lt;span class=&quot;code-quote&quot;&gt;&quot;035&quot;&lt;/span&gt;: {
    &lt;span class=&quot;code-quote&quot;&gt;&quot;ind1&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;\\&quot;&lt;/span&gt;,
    &lt;span class=&quot;code-quote&quot;&gt;&quot;ind2&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;\\&quot;&lt;/span&gt;,
    &lt;span class=&quot;code-quote&quot;&gt;&quot;subfields&quot;&lt;/span&gt;: [{
      &lt;span class=&quot;code-quote&quot;&gt;&quot;a&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;(DE-599)GBV727867881&quot;&lt;/span&gt;
    }]
  }
...
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;According to &lt;a href=&quot;https://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;MARC21slim.xsd&lt;/a&gt; schema the value is expected in following format (i.e. only one character which is a digit, letter or space)&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-xml&quot;&gt;
&lt;span class=&quot;code-tag&quot;&gt;&amp;lt;xsd:simpleType name=&lt;span class=&quot;code-quote&quot;&gt;&quot;indicatorDataType&quot;&lt;/span&gt; id=&lt;span class=&quot;code-quote&quot;&gt;&quot;ind.st&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;code-tag&quot;&gt;&amp;lt;xsd:restriction base=&lt;span class=&quot;code-quote&quot;&gt;&quot;xsd:string&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;code-tag&quot;&gt;&amp;lt;xsd:whiteSpace value=&lt;span class=&quot;code-quote&quot;&gt;&quot;preserve&quot;&lt;/span&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;code-tag&quot;&gt;&amp;lt;xsd:pattern value=&lt;span class=&quot;code-quote&quot;&gt;&quot;[\da-z ]{1}&quot;&lt;/span&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;code-tag&quot;&gt;&amp;lt;/xsd:restriction&amp;gt;&lt;/span&gt;
&lt;span class=&quot;code-tag&quot;&gt;&amp;lt;/xsd:simpleType&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;So once marc-json is converted by marc4j to marc xml format and then the logic adds metadata record to OAIPMH response, jaxb complains that the content is invalid according to schema. Even if the jaxb validation is disabled, the response is not valid and harvesters won&apos;t be able to handle it (we&apos;ve checked using &lt;a href=&quot;https://marcedit.reeset.net/&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;MarcEdit&lt;/a&gt; tool)&lt;br/&gt;
To resolve this issue we&apos;ve applied a &lt;a href=&quot;https://github.com/folio-org/mod-oai-pmh/commit/59c4a1a0756e462467993b51cb7aa8bd3bc0491e&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;change&lt;/a&gt; to replace backslash character by space.&lt;/p&gt;

&lt;p&gt;Regards,&lt;br/&gt;
Piotr&lt;/p&gt;</comment>
                                                            <comment id="157165" author="712020:aa2bd653-1e36-4dcb-a90c-03a5108288c4" created="Thu, 1 Nov 2018 15:32:56 +0000"  >&lt;p&gt;Sample of the harvested records via MarcEditor:&lt;/p&gt;
&lt;div class=&apos;table-wrap&apos;&gt;
&lt;table class=&apos;confluenceTable&apos;&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;Configs&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;&lt;span class=&quot;image-wrap&quot; style=&quot;&quot;&gt;&lt;a id=&quot;50937_thumb&quot; href=&quot;/rest/api/3/attachment/content/50937&quot; title=&quot;MarcEditor_Harvester_Settings.png&quot; file-preview-type=&quot;image&quot; file-preview-id=&quot;50937&quot; file-preview-title=&quot;MarcEditor_Harvester_Settings.png&quot;&gt;&lt;jira-attachment-thumbnail url=&quot;https://folio-org.atlassian.net/rest/api/3/attachment/thumbnail/50937?default=false&quot; jira-url=&quot;https://folio-org.atlassian.net/rest/api/3/attachment/thumbnail/50937&quot; filename=&quot;MarcEditor_Harvester_Settings.png&quot;&gt;&lt;img src=&quot;https://folio-org.atlassian.net/rest/api/3/attachment/thumbnail/50937&quot; data-attachment-name=&quot;MarcEditor_Harvester_Settings.png&quot; data-attachment-type=&quot;thumbnail&quot; data-media-services-id=&quot;bbb95e3e-9945-4b23-988c-911425f35877&quot; data-media-services-type=&quot;file&quot; style=&quot;border: 0px solid black&quot; /&gt;&lt;/jira-attachment-thumbnail&gt;&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;Results&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;&lt;span class=&quot;image-wrap&quot; style=&quot;&quot;&gt;&lt;a id=&quot;50936_thumb&quot; href=&quot;/rest/api/3/attachment/content/50936&quot; title=&quot;MarcEditor_Harvester_Results.png&quot; file-preview-type=&quot;image&quot; file-preview-id=&quot;50936&quot; file-preview-title=&quot;MarcEditor_Harvester_Results.png&quot;&gt;&lt;jira-attachment-thumbnail url=&quot;https://folio-org.atlassian.net/rest/api/3/attachment/thumbnail/50936?default=false&quot; jira-url=&quot;https://folio-org.atlassian.net/rest/api/3/attachment/thumbnail/50936&quot; filename=&quot;MarcEditor_Harvester_Results.png&quot;&gt;&lt;img src=&quot;https://folio-org.atlassian.net/rest/api/3/attachment/thumbnail/50936&quot; data-attachment-name=&quot;MarcEditor_Harvester_Results.png&quot; data-attachment-type=&quot;thumbnail&quot; data-media-services-id=&quot;6adaa4f3-8c9b-4557-836f-7d498f605827&quot; data-media-services-type=&quot;file&quot; style=&quot;border: 0px solid black&quot; /&gt;&lt;/jira-attachment-thumbnail&gt;&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&apos;confluenceTd&apos;&gt;Editor&lt;/td&gt;
&lt;td class=&apos;confluenceTd&apos;&gt; &lt;span class=&quot;image-wrap&quot; style=&quot;&quot;&gt;&lt;a id=&quot;50935_thumb&quot; href=&quot;/rest/api/3/attachment/content/50935&quot; title=&quot;MarcEditor_Harvester_Editor.png&quot; file-preview-type=&quot;image&quot; file-preview-id=&quot;50935&quot; file-preview-title=&quot;MarcEditor_Harvester_Editor.png&quot;&gt;&lt;jira-attachment-thumbnail url=&quot;https://folio-org.atlassian.net/rest/api/3/attachment/thumbnail/50935?default=false&quot; jira-url=&quot;https://folio-org.atlassian.net/rest/api/3/attachment/thumbnail/50935&quot; filename=&quot;MarcEditor_Harvester_Editor.png&quot;&gt;&lt;img src=&quot;https://folio-org.atlassian.net/rest/api/3/attachment/thumbnail/50935&quot; data-attachment-name=&quot;MarcEditor_Harvester_Editor.png&quot; data-attachment-type=&quot;thumbnail&quot; data-media-services-id=&quot;603a8b4a-3846-4162-885a-2cedb4733e07&quot; data-media-services-type=&quot;file&quot; style=&quot;border: 0px solid black&quot; /&gt;&lt;/jira-attachment-thumbnail&gt;&lt;/a&gt;&lt;/span&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;


&lt;p&gt;Note: edge API requires &lt;tt&gt;apikey&lt;/tt&gt; parameter. The only way to add it in MarcEditor is to specify this in Set Name field like &lt;tt&gt;all&amp;amp;apikey=Z2luMHVGdjNMZl10kWt1X2Rpa3U=&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;Regards,&lt;br/&gt;
Piotr&lt;/p&gt;</comment>
                                                            <comment id="157166" author="712020:aa2bd653-1e36-4dcb-a90c-03a5108288c4" created="Mon, 5 Nov 2018 06:14:36 +0000"  >&lt;p&gt;The changes have been merged to master.&lt;/p&gt;

&lt;p&gt;Regards,&lt;br/&gt;
Piotr&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                                                <inwardlinks description="is blocked by">
                                        <issuelink>
            <issuekey id="64659">MODOAIPMH-17</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="10253">UXPROD-350</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="50935" name="MarcEditor_Harvester_Editor.png" size="102747" author="712020:aa2bd653-1e36-4dcb-a90c-03a5108288c4" created="Thu, 1 Nov 2018 15:28:25 +0000"/>
                            <attachment id="50936" name="MarcEditor_Harvester_Results.png" size="7800" author="712020:aa2bd653-1e36-4dcb-a90c-03a5108288c4" created="Thu, 1 Nov 2018 15:27:30 +0000"/>
                            <attachment id="50937" name="MarcEditor_Harvester_Settings.png" size="14089" author="712020:aa2bd653-1e36-4dcb-a90c-03a5108288c4" created="Thu, 1 Nov 2018 15:26:13 +0000"/>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10000" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10057" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Development Team</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10185"><![CDATA[Thunderjet]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10014" key="com.pyxis.greenhopper.jira:gh-epic-link">
                        <customfieldname>Epic Link</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue key="$xmlutils.escape($text)">OAI-PMH Support</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10019" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|hzyyrb:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10020" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="1629">oai-pmh - sprint 50</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10044" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Story Points</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>5.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10024" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>[CHART] Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Thu, 1 Nov 2018 14:34:52 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10025" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>[CHART] Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                    </customfields>
    </item>
</channel>
</rss>