LIBCAS / ARCLib

ARCLib – komplexní řešení pro dlouhodobou archivaci digitálních (knihovních) sbírek
GNU General Public License v3.0
4 stars 1 forks source link

Přidání mapování do SIP profilu pro balíčky s více agenty v jedné události #90

Closed godnat closed 3 years ago

godnat commented 4 years ago

Některé balíčky používají zápis, kdy se v události (premis:event) odkazují na dva agenty (premis:linkingAgentIdentifier). Tento zápis je validní, ale méně běžný. Je možné to přidat do SIP profilu?

Výše uvedený zápis podle mě způsobuje tuto chybu:

_couldn't execute activity <serviceTask id="ServiceTask0fxsc9x" ...>: A sequence of more than one item is not allowed as the second argument of fn:concat() (, , )

Problém podle mě nastává při tvorbě části ARCLIB_003, když jsme jí zakomentovali, balíček prošel. Tak, jak je to ted v SIP profilu zapsáno, je to dobře pro většinu balíčků, tj. neměnit, jen někam asi přidat i mapování pro tento zápis(?).

V datech to vypadá takto:

<mets:digiprovMD ID="EVT_003">
      <mets:mdWrap MDTYPE="PREMIS" MIMETYPE="text/xml">
        <mets:xmlData>
          <premis:event xmlns:premis="info:lc/xmlns/premis-v2">
            <premis:eventIdentifier>
              <premis:eventIdentifierType>udalost_id</premis:eventIdentifierType>
              <premis:eventIdentifierValue>321208873</premis:eventIdentifierValue>
            </premis:eventIdentifier>
            <premis:eventType>edit</premis:eventType>
            <premis:eventDateTime>2017-09-21T13:35:02</premis:eventDateTime>
            <premis:eventDetail>edit</premis:eventDetail>
            <premis:eventOutcomeInformation>
              <premis:eventOutcome>successful</premis:eventOutcome>
            </premis:eventOutcomeInformation>
<!--:linkingAgent-->
            <premis:linkingAgentIdentifier>
              <premis:linkingAgentIdentifierType>UserID</premis:linkingAgentIdentifierType>
              <premis:linkingAgentIdentifierValue>23</premis:linkingAgentIdentifierValue>
              <premis:linkingAgentRole>person</premis:linkingAgentRole>
            </premis:linkingAgentIdentifier>
            <premis:linkingAgentIdentifier>
              <premis:linkingAgentIdentifierType>agent_id</premis:linkingAgentIdentifierType>
              <premis:linkingAgentIdentifierValue>ndk_123</premis:linkingAgentIdentifierValue>
              <premis:linkingAgentRole>software</premis:linkingAgentRole>
            </premis:linkingAgentIdentifier>
            <premis:linkingAgentIdentifier>
              <premis:linkingAgentIdentifierType>agent_id</premis:linkingAgentIdentifierType>
              <premis:linkingAgentIdentifierValue>ndk_1234</premis:linkingAgentIdentifierValue>
              <premis:linkingAgentRole>machine</premis:linkingAgentRole>
            </premis:linkingAgentIdentifier>
<!--/linkingAgent-->

Možná ta chyba výše ale znamená ještě něco jiného.

yantom commented 4 years ago

Toto má přímý dopad na to jak bude vypadat agregovaná sekce ARCLib:eventAgents v ARCLib XML, linkingAgentIdentifierValue (mapován do linkingDeviceID) totiž společně s premis:eventType a premis:eventDateTime tvoří klíč dle kterého se vytváří skupiny elementů ARCLib:eventAgents. Očekáváme diskuzi / nasměrování, obdobná problematika z obecného pohledu je otevřena v #97 .

Jak by v tomto konkrétním případě měla vypadat agregovaná sekce? Na první pohled, nehledě na realizovatelnost a pracnost, mne napadají následující možnosti (v příkladu vypouštím některé elementy jako např. scannerModelSerialNo):

1) Výběr jednoho reprezentanta (vzhledem k tomu že v ARCLibu je cílový element do kterého se kopíruje hodnota linkingAgentIdentifierValue nazván linkingDeviceID bych očekával že by se přebíral agent typu machine). (agent je stále klíčovým atributem seskupení)

<ARCLib:eventAgent>
    <ARCLib:eventType>edit</ARCLib:eventType>
    <ARCLib:agentName>machineAgentName</ARCLib:agentName>
    <ARCLib:linkingDeviceID>ndk_1234</ARCLib:linkingDeviceID>
    <ARCLib:eventDate>2017-09-21</ARCLib:eventDate>
    <ARCLib:eventCount>1</ARCLib:eventCount>
</ARCLib:eventAgent>

2) Duplikace celého záznamu dle linkingAgentIdentifierValue (agent je stále klíčovým atributem seskupení)

<ARCLib:eventAgent>
    <ARCLib:eventType>edit</ARCLib:eventType>
    <ARCLib:agentName>personAgentName</ARCLib:agentName>
    <ARCLib:linkingDeviceID>23</ARCLib:linkingDeviceID>
    <ARCLib:eventDate>2017-09-21</ARCLib:eventDate>
    <ARCLib:eventCount>1</ARCLib:eventCount>
</ARCLib:eventAgent>
<ARCLib:eventAgent>
    <ARCLib:eventType>edit</ARCLib:eventType>
    <ARCLib:agentName>softwareAgentName</ARCLib:agentName>
    <ARCLib:linkingDeviceID>ndk_123</ARCLib:linkingDeviceID>
    <ARCLib:eventDate>2017-09-21</ARCLib:eventDate>
    <ARCLib:eventCount>1</ARCLib:eventCount>
</ARCLib:eventAgent>
<ARCLib:eventAgent>
    <ARCLib:eventType>edit</ARCLib:eventType>
    <ARCLib:agentName>machineAgentName</ARCLib:agentName>
    <ARCLib:linkingDeviceID>ndk_1234</ARCLib:linkingDeviceID>
    <ARCLib:eventDate>2017-09-21</ARCLib:eventDate>
    <ARCLib:eventCount>1</ARCLib:eventCount>
</ARCLib:eventAgent>

3) Seskupení v seskupení (agent je klíčem nadřazeného seskupení)

<ARCLib:eventAgent>
    <ARCLib:agentName>personAgentName</ARCLib:agentName>
    <ARCLib:linkingDeviceID>23</ARCLib:linkingDeviceID>
    <ARCLib:events>
        <ARCLib:event>
            <ARCLib:eventType>edit</ARCLib:eventType>
            <ARCLib:eventDate>2017-09-21</ARCLib:eventDate>
            <ARCLib:eventCount>1</ARCLib:eventCount>
        </ARCLib:event>
        <ARCLib:event>
            ...other event...
        </ARCLib:event>
    </ARCLib:events>
</ARCLib:eventAgent>
<ARCLib:eventAgent>
    <ARCLib:agentName>personAgentName</ARCLib:agentName>
    <ARCLib:linkingDeviceID>23</ARCLib:linkingDeviceID>
    <ARCLib:events>
        <ARCLib:event>
            <ARCLib:eventType>edit</ARCLib:eventType>
            <ARCLib:eventDate>2017-09-21</ARCLib:eventDate>
            <ARCLib:eventCount>1</ARCLib:eventCount>
        </ARCLib:event>
        <ARCLib:event>
            ...other event...
        </ARCLib:event>
    </ARCLib:events>
</ARCLib:eventAgent>
<ARCLib:eventAgent>
    <ARCLib:agentName>personAgentName</ARCLib:agentName>
    <ARCLib:linkingDeviceID>23</ARCLib:linkingDeviceID>
    <ARCLib:events>
        <ARCLib:event>
            <ARCLib:eventType>edit</ARCLib:eventType>
            <ARCLib:eventDate>2017-09-21</ARCLib:eventDate>
            <ARCLib:eventCount>1</ARCLib:eventCount>
        </ARCLib:event>
        <ARCLib:event>
            ...other event...
        </ARCLib:event>
    </ARCLib:events>
</ARCLib:eventAgent>

4) Zanoření a opakování elementu agenta (agent již není klíčovým atributem seskupení, vlastně obdoba předchozího z druhé strany, tedy event -> agents)

<ARCLib:eventAgent>
    <ARCLib:eventType>edit</ARCLib:eventType>
    <ARCLib:eventDate>2017-09-21</ARCLib:eventDate>
    <ARCLib:eventCount>1</ARCLib:eventCount>
    <ARCLib:agents>
        <ARCLib:agent>
            <ARCLib:agentName>personAgentName</ARCLib:agentName>
            <ARCLib:linkingDeviceID>23</ARCLib:linkingDeviceID>
        </ARCLib:agent>
        <ARCLib:agent>
            <ARCLib:agentName>softwareAgentName</ARCLib:agentName>
            <ARCLib:linkingDeviceID>ndk_123</ARCLib:linkingDeviceID>
        </ARCLib:agent>
        <ARCLib:agent>
            <ARCLib:agentName>machineAgentName</ARCLib:agentName>
            <ARCLib:linkingDeviceID>ndk_1234</ARCLib:linkingDeviceID>
        </ARCLib:agent>
        <ARCLib:agent>
            ...other agent...
        </ARCLib:agent>
    </ARCLib:agents>
</ARCLib:eventAgent>
godnat commented 4 years ago

Vyřešilo by se něco, kdyby se jak je v https://github.com/LIBCAS/ARCLib/issues/97 uvedeno, oddělili do vlastních sekcí agenti a události? Tj. pak by se brali všichni agenti v SIP balíčku (deduplikovaní) nezávisle na událostech.

yantom commented 3 years ago

Považuji za vyřešené v #97

godnat commented 3 years ago

Taky považuji za vyřešené, může se zavřít. Děkuji.