Logo_EZB

EZB-OAI-PMH-Schnittstelle

Link zur Schnittstelle: https://ezb-oai.ur.de/zdb/oai2.php

Wenn Sie die Schnittstelle verwenden möchten, kontaktieren Sie das EZB-Team unter info.ezb@ur.de. Wir helfen auch gern bei Fragestellungen weiter.

Updates, Wartungsfenster und weitere Informationen zur Schnittstelle werden über die Mailingliste https://www.listserv.dfn.de/sympa/info/ur-ub-ezb veröffentlicht. Abonnieren Sie diese Liste, um wichtige Informationen zu erhalten.

 

1. Was ist die EZB-OAI-PMH-Schnittstelle?

Die OAI-PMH Schnittstelle der Elektronischen Zeitschriftenbibliothek ermöglicht den Abruf von Bestandsdaten (Lizenzinformationen) von EZB-Teilnehmereinrichtungen, die der Weitergabe dieser Informationen zugestimmt haben. Die Daten werden im Format MARC21-xml und Dublin Core bereitgestellt und enthalten unter anderem folgende Informationen (falls vorhanden):

  • BIK & ISIL der EZB-Einrichtung
  • ZDB-ID des zugehörigen Titels
  • Link zum EZB-Eintrag
  • Link zum Volltext der Zeitschrift
  • Bestandsinformationen (Erste Volltextausgabe, letzte Volltextausgabe, etc.)
  • Fernleihinformationen

Der Dienstanbieter (Service Provider) kann diese Daten abrufen und in seine eigene Anwendung, Services oder Suchmaschine integrieren. Die Schnittstelle ist frei verfügbar und kostenfrei, die Daten dürfen unter der Lizenz CC0 1.0 nachgenutzt werden.

1.1 Methoden der OAI PMH:
  • GetRecord: Abrufen eines einzelnen Metadatensatzes.
  • Identify: Grundlegende Informationen über den Anbieter abrufen.
  • ListIdentifiers: Eine Liste von Identifiern (eindeutige Kennungen) für Metadatensätze abrufen.
  • ListMetadataFormats: Verfügbare Metadatenformate abrufen.
  • ListRecords: Eine Liste von Metadatensätzen abrufen.
  • ListSets: Eine Liste von Sets (Sammlungen) abrufen.

2. Konventionen

Alle Datumswerte werden als UTC-Zeit (ohne Zeitzone) verwendet. Das Format lautet: „yyyy-mmddTHH:mm:ssZ“. Z. B. 2023-06-06T00:00:00Z

Die OAI-Schnittstelle der EZB ist unter https://ezb-oai.ur.de/zdb/oai2.php erreichbar, http://ezboai.ur.de/zdb/oai2.php leitet auf die verschlüsselte Schnittstelle weiter. Es besteht die Möglichkeit eines partiellen Harvestings mittels ResumptionToken. Das ResumptionToken enthält eine Angabe zur Gesamtanzahl gelieferter Datensätze. Löschdatensätze werden nicht über den „Deleted“-Status auf OAI-Protokollebene gemeldet, sondern als Updates mit einem entsprechenden Löschkennzeichen im MARC-Leader.

 

3. Beschreibung der Methoden

3.1 GetRecord

URL https://ezb-oai.ur.de/zdb/oai2.php?verb=GetRecord

Identifier (benötigt) = EZBLicenseID

metadataPrefix (benötigt): MARC21-xml, oai_dc

https://ezboai.ur.de/zdb/oai2.php?verb=GetRecord&identifier=oai:ezb.de:5264777&metadataPrefix=MARC21-xml

<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 http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd“>

 <responseDate>2024-05-03T10:37:55Z</responseDate>

 <request verb=„GetRecord“ identifier=„oai:ezb.de:5264777“ metadataPrefix=„marc21“>https://ezb-oai.ur.de/zdb/oai2.php</request>

 <GetRecord>

  <record>

   <header>

    <identifier>oai:ezb.ur.de:5264777</identifier>

    <datestamp>2018-10-30T10:59:03Z</datestamp>

    <setSpec>action:insert</setSpec>

    <setSpec>ezb:holdings:DE-355</setSpec>

   </header>

   <metadata>

    <marc:record xmlns:marc=„http://www.loc.gov/MARC21/slim“ type=„Holdings“>

     <marc:leader>00000ny a2200000zn 4500</marc:leader>

     <marc:controlfield tag=„001“>5264777</marc:controlfield>

     <marc:controlfield tag=„003“>DE-606</marc:controlfield>

     <marc:controlfield tag=„007“>cr||||||||||||</marc:controlfield>

     <marc:controlfield tag=„008“>181030||||||||||||||||||||||||||</marc:controlfield>

     <marc:datafield tag=„016“ ind1=„7“ ind2=“ „>

      <marc:subfield code=„a“>2788310-3</marc:subfield>

      <marc:subfield code=„2“>DE-600</marc:subfield>

     </marc:datafield>

     <marc:datafield tag=„035“ ind1=“ „ ind2=“ „>

      <marc:subfield code=„a“>(DE-606)5264777</marc:subfield>

     </marc:datafield>

     <marc:datafield tag=„092“ ind1=“ „ ind2=“ „>

      <marc:subfield code=„a“>841000-8</marc:subfield>

      <marc:subfield code=„d“>355</marc:subfield>

      <marc:subfield code=„l“>c</marc:subfield>

     </marc:datafield>

     <marc:datafield tag=„093“ ind1=“ „ ind2=“ „>

      <marc:subfield code=„a“>a</marc:subfield>

      <marc:subfield code=„e“>b</marc:subfield>

      <marc:subfield code=„f“>c</marc:subfield>

      <marc:subfield code=„g“>a</marc:subfield>

     </marc:datafield>

     <marc:datafield tag=„852“ ind1=“ „ ind2=“ „>

      <marc:subfield code=„a“>DE-355</marc:subfield>

     </marc:datafield>

     <marc:datafield tag=„856“ ind1=„4“ ind2=„0“>

      <marc:subfield code=„u“>https://www.ash-berlin.eu/hochschule/presse-und-newsroom/gendermagazin-quer/#c1881</marc:subfield>

      <marc:subfield code=„x“>Volltext</marc:subfield>

     </marc:datafield>

     <marc:datafield tag=„856“ ind1=„4“ ind2=„0“>

      <marc:subfield code=„u“>https://ezb.ur.de/detail.phtml?bibid=UBR&jour_id=170368</marc:subfield>

      <marc:subfield code=„x“>EZB Link</marc:subfield>

     </marc:datafield>

     <marc:datafield tag=„859“ ind1=„0“ ind2=„1“>

      <marc:subfield code=„8“>1.1\x</marc:subfield>

      <marc:subfield code=„a“>20</marc:subfield>

      <marc:subfield code=„i“>2014</marc:subfield>

     </marc:datafield>

     <marc:datafield tag=„866“ ind1=„3“ ind2=„0“>

      <marc:subfield code=„a“>20.2014 – </marc:subfield>

     </marc:datafield>

    </marc:record>

   </metadata>

  </record>

 </GetRecord>

</OAI-PMH>

<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 http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd">
<responseDate>2024-05-03T08:44:22Z</responseDate>
<request verb="Identify">https://ezb-oai.ur.de/zdb/oai2.php</request>
<Identify>
<repositoryName>EZB-ZDB-OAI-PMH</repositoryName>
<baseURL>https://ezb-oai.ur.de/zdb/oai2.php</baseURL>
<protocolVersion>2.0</protocolVersion>
<adminEmail>technik.ezb@ur.de</adminEmail>
<earliestDatestamp>2017-01-01</earliestDatestamp>
<deletedRecord>no</deletedRecord>
<granularity>YYYY-MM-DD</granularity>
</Identify>
</OAI-PMH>

  • metadataPrefix (benötigt): MARC21-xml, oai_dc

<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 http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd">
 <responseDate>2024-05-03T10:41:03Z</responseDate>
 <request verb="ListIdentifiers" metadataPrefix="MARC21-xml">https://ezb-oai.ur.de/zdb/oai2.php</request>
 <ListIdentifiers>
  <header>
   <identifier>oai:ezb.ur.de:24514124</identifier>
   <datestamp>2024-01-26T05:34:18Z</datestamp>
   <setSpec>action:update</setSpec>
   <setSpec>ezb:holdings:DE-Frei119</setSpec>
  </header>
  <header>
   <identifier>oai:ezb.ur.de:14402763</identifier>
   <datestamp>2024-01-26T05:34:18Z</datestamp>
   <setSpec>action:update</setSpec>
   <setSpec>ezb:holdings:DE-Frei119</setSpec>
  </header>
  <header>
   <identifier>oai:ezb.ur.de:14401253</identifier>
   <datestamp>2024-01-26T05:34:18Z</datestamp>
   <setSpec>action:update</setSpec>
   <setSpec>ezb:holdings:DE-Frei119</setSpec>
  </header>
  <header>
   <identifier>oai:ezb.ur.de:14413493</identifier>
   <datestamp>2022-09-24T03:56:47Z</datestamp>
   <setSpec>action:update</setSpec>
   <setSpec>ezb:holdings:DE-Frei119</setSpec>
  </header>
  <header>
   <identifier>oai:ezb.ur.de:14401949</identifier>
   <datestamp>2024-02-07T05:44:48Z</datestamp>
   <setSpec>action:delete</setSpec>
   <setSpec>ezb:holdings:DE-Frei119</setSpec>
  </header>
  <header>
   <identifier>oai:ezb.ur.de:14390612</identifier>
   <datestamp>2024-01-26T05:34:18Z</datestamp>
   <setSpec>action:update</setSpec>
   <setSpec>ezb:holdings:DE-Frei119</setSpec>
  </header>
<!-- Hier würden ALLE weiteren Identifier aufgelistet -->
  <resumptionToken expirationDate="2024-05-04T10:41:04Z" completeListSize="21258609" cursor="0">1714732864263_MARC21-xml</resumptionToken>
 </ListIdentifiers>
</OAI-PMH>

<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 http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd">
 <responseDate>2024-05-03T08:58:47Z</responseDate>
 <request verb="ListMetadataFormats">https://ezb-oai.ur.de/zdb/oai2.php</request>
 <ListMetadataFormats>
  <metadataFormat>
   <metadataPrefix>marc21</metadataPrefix>
   <schema>http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd</schema>
   <metadataNamespace>http://www.loc.gov/MARC21/slim/</metadataNamespace>
  </metadataFormat>
  <metadataFormat>
   <metadataPrefix>MARC21-xml</metadataPrefix>
   <schema>http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd</schema>
   <metadataNamespace>http://www.loc.gov/MARC21/slim/</metadataNamespace>
  </metadataFormat>
  <metadataFormat>
   <metadataPrefix>oai_dc</metadataPrefix>
   <schema>http://www.openarchives.org/OAI/2.0/oai_dc.xsd</schema>
   <metadataNamespace>http://www.openarchives.org/OAI/2.0/oai_dc/</metadataNamespace>
  </metadataFormat>
 </ListMetadataFormats>
</OAI-PMH>

  • metadataPrefix (benötigt): MARC21-xml, oai_dc
  • from (optional): UTC-Zeit im Format „yyyy-mm-dd“
  • until (optional): UTC-Zeit im Format „yyyy-mm-dd“
  • set (optional): Set-Identifier: ezb:holdings:<ISIL der Einrichtung>
  • resumptionToken (optional): Token zur Wiederaufnahme bei größeren Datensets

<OAI-PMH xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd">
 <responseDate>2024-05-03T09:24:11Z</responseDate>
 <request verb="ListRecords" metadataPrefix="marc21" set="ezb:holdings:DE-355">https://ezb-oai.ur.de/zdb/oai2.php</request>
 <ListRecords>
  <!-- Auflistung des ersten Records für das ausgewählte Set -->
  <record>
   <header>
    <identifier>oai:ezb.ur.de:24091063</identifier>
    <datestamp>2024-02-07T05:37:27Z</datestamp>
    <!-- Art des Datensatzes -->
    <setSpec>action:update</setSpec>
    <!-- Gültiges Set -->
    <setSpec>ezb:holdings:DE-355</setSpec>
   </header>
   <metadata>
    <marc:record type="Holdings">
    <marc:leader>00000cy a2200000zn 4500</marc:leader>
    <marc:controlfield tag="001">24091063</marc:controlfield>
    <marc:controlfield tag="003">DE-606</marc:controlfield>
    <marc:controlfield tag="007">cr||||||||||||</marc:controlfield>
    <marc:controlfield tag="008">190918||||||||||||||||||||||||||</marc:controlfield>
     <marc:datafield tag="016" ind1="7" ind2=" ">
      <marc:subfield code="a">2406833-0</marc:subfield>
      <marc:subfield code="2">DE-600</marc:subfield>
     </marc:datafield>
     <marc:datafield tag="035" ind1=" " ind2=" ">
      <marc:subfield code="a">(DE-606)24091063</marc:subfield>
     </marc:datafield>
     <marc:datafield tag="092" ind1=" " ind2=" ">
      <marc:subfield code="a">841000-8</marc:subfield>
      <marc:subfield code="d">355</marc:subfield>
      <marc:subfield code="l">a</marc:subfield>
      <marc:subfield code="o">e</marc:subfield>
      <marc:subfield code="p">n</marc:subfield>
     </marc:datafield>
     <marc:datafield tag="093" ind1=" " ind2=" ">
      <marc:subfield code="a">a</marc:subfield>
      <marc:subfield code="e">b</marc:subfield>
      <marc:subfield code="f">b</marc:subfield>
      <marc:subfield code="g">c</marc:subfield>
     </marc:datafield>
     <marc:datafield tag="852" ind1=" " ind2=" ">
      <marc:subfield code="a">DE-355</marc:subfield>
     </marc:datafield>
     <marc:datafield tag="856" ind1="4" ind2="0">
      <marc:subfield code="u">https://onlinelibrary.wiley.com/journal/17550998</marc:subfield><marc:subfield code="x">Volltext</marc:subfield>
     </marc:datafield>
     <marc:datafield tag="856" ind1="4" ind2="0">
      <marc:subfield code="u">https://ezb.ur.de/ReadMe?bibid=UBR&owner=WIDEA&anchor=deal_wiley&lang=de</marc:subfield>
      <marc:subfield code="x">Readme</marc:subfield>
     </marc:datafield>
     <marc:datafield tag="856" ind1="4" ind2="0">
      <marc:subfield code="u">https://ezb.ur.de/ReadMe?bibid=UBR&owner=WIDEA&anchor=deal_wiley&lang=en
</marc:subfield>
      <marc:subfield code="x">Readme</marc:subfield>
     </marc:datafield>
     <marc:datafield tag="856" ind1="4" ind2="0">
      <marc:subfield code="u">
https://ezb.ur.de/detail.phtml?bibid=UBR&jour_id=9751
      </marc:subfield>
      <marc:subfield code="x">EZB Link</marc:subfield>
     </marc:datafield>
     <marc:datafield tag="859" ind1="0" ind2="1">
      <marc:subfield code="8">1.1\x</marc:subfield>
      <marc:subfield code="a">8</marc:subfield>
      <marc:subfield code="i">2008</marc:subfield>
     </marc:datafield>
     <marc:datafield tag="866" ind1="3" ind2="0">
      <marc:subfield code="a">8.2008 - </marc:subfield>
     </marc:datafield>
     <marc:datafield tag="866" ind1=" " ind2="0">
      <marc:subfield code="x">DEAL</marc:subfield>
     </marc:datafield>
    </marc:record>
   </metadata>
  </record>
  <!-- Hier würden ALLE weiteren Records für das Set aufgelistet -->
  <resumptionToken expirationDate="2024-05-04T09:24:21Z" completeListSize="146218" cursor="0">1714728261163_marc21</resumptionToken>
 </ListRecords>
</OAI-PMH>

 

4.  Feldbeschreibung

Feld

Beschreibung

MARC 000

Leader (action)

MARC 001

ID des EZB-Lizenzeintrags (EZB license_entry_id)

MARC 003

ISIL der liefernden Einrichtung = EZB-ISIL (DE-606)

MARC 007

Angabe zum Materialcode (cr||||||||||||)

MARC 008

Datum der Ersterfassung des EZB-Lizenzeintrags in der Form „yymmdd“

MARC 016

$a: ZDB-ID des dazugehörigen Titels (zdbid)

$2: ISIL der ZDB = DE-600 (isil)

MARC 035

$a: ID des EZB-Lizenzeintrags mit ZDB-ISIL (ISIL der EZB in Klammern gefolgt von license_entry_id)

MARC 092

$a: Bibliothekskennung der ZDB (BIK) (bik)
$d: Bibliothekssigel (sigel)

$l: Leihverkehrsrelevanz der besitzenden Bibliothek: a, wenn leihverkehrs-relevant; b, wenn nicht leihverkehrs-relevant; c, wenn keine Angabe (ill_relevance)

$o: Fernleihindikator (exemplarbezogen): a, wenn nur Ausleihe; b, wenn Papierkopie an Endnutzer; c, wenn Kopie und Ausleihe; d, wenn keine Fernleihe; e, wenn elektronischer Versand an Endnutzer möglich (ill_code)

$p: Vertragsrechtliche Einschränkung bei der Fernleihe: n, wenn Fernleihe nur im Inland erlaubt (inland_only)

$p: Vertragsrechtliche Einschränkung bei der Fernleihe: p, wenn elektronische Übertragung zwischen den Bibliotheken ausgeschlossen (il_electronic_forbidden)

$q: Kommentar zum Fernleihindikator (comment)

MARC 093

$a: Herkunft, Erfassungsrichtung: a, da aus EZB

$e: Angaben zum Dokumenttyp: a, wenn Volltext, nur online; b, wenn Volltext, Online und Druckausgabe; c, wenn lokale Zeitschrift; d, wenn retrodigitalisiert (type_id)

$f: Angaben zum Lizenztyp: a, wenn Nationallizenz; b, wenn Nationalkonsortium oder Konsortial- oder Allianz-Lizenz; c, wenn Einzellizenz (license_type_id)

$g: Angaben zum Preistyp: a, wenn lizenzfrei; b, wenn kostenlos mit Druckausgabe; c, wenn kostenpflichtig; 4, wenn keine Angabe (price_type_id)

MARC 852

$a: ISIL der Bibliothek (isil)

MARC 856

$u: URL zum Volltext (reference_url)

$x: Beschreibung der URL: Volltext

$u: URL zur dt. Readme-Seite (readme_url lang=‘de‘)

$x: Beschreibung der URL: Readme de

$u: URL zur engl. Readme-Seite (readme_url lang=‘en‘)

$x: Beschreibung der URL: Readme en

$u: URL zum EZB-Eintrag

$x: Beschreibung der URL: EZB Link

MARC 859

$8: Sequence number.Beginngruppe: 1.1\x

$a: Bandangabe zu Beginn des Lizenzzeitraums (first_volume)

$b: Heftangabe zu Beginn des Lizenzzeitraums (first_issue)

$i: Jahresangabe zu Beginn des Lizenzzeitraums (first_date)

$8: Sequence number.Endegruppe: 1.2\x

$a: Bandangabe zum Ende des Lizenzzeitraums (last_volume)

$b: Heftangabe zum Ende des Lizenzzeitraums (last_issue)

$i: Jahresangabe zum Ende des Lizenzzeitraums (last_date)

$y: Moving Wall Angabe (moving_wall)

MARC 866

$a: Lizenzzeitraum als Text (first_volume. first_date, first_issue – last_volume. last_date, last_issue)

$x: Freitext bei Lizenzangabe (available)

MARC 920

$a EZB-PaketID:EZB-PaketAnker bzw. EZB-BIBID:EZB-Anker

Weitere Informationen zur Definition der MARC-Felder in der ZDB finden Sie hier: https://zeitschriftendatenbank.de/fileadmin/user_upload/ZDB/pdf/zdbformat/1101.pdf

5. Daten-Harvesting über die EZB OAI-Schnittstelle

5.1 ListRecords mit Set-Identifier

Dieser Ansatz kann gewählt werden, um alle Bestandsdaten einer bestimmten EZB-Einrichtung abzurufen. Man benötigt den Set-Identifier, der die ISIL der Einrichtung beinhaltet. Für die Universitätsbibliothek Regensburg (ISIL: DE-355) lautet der Set-Identifier: ezb:holdings:DE-355

Vorgehen

  1. Anfrage über Methode: „ListRecords“: ?verb=ListRecords&metadataPrefix=MARC21-xml&set=ezb:holdings:DE-355
  2. Die maximale Anzahl an Datensätzen, die per <ListRecords> geliefert wird, beträgt 2,500. Sind mehr Datensätze vorhanden, wird ein resumptionToken bereitgestellt. Die Abfrage kann dann mit dem resumptionToken wiederholt werden, bis das Ende der Abfrage erreicht ist:
    ?verb=ListRecords&resumptionToken=1714728261163_marc21
5.2 ListRecords mit Angaben zum Zeitraum

Dieser Ansatz kann gewählt werden, wenn man regelmäßig Bestandsdaten mit der EZB abgleichen möchte. Man fragt dafür nur die Änderungsdaten über ein selbst gewähltes Zeitfenster (täglich, wöchentlich oder individuell) ab, z. B.: von 2024-05-10 bis 2024-05-20

Vorgehen

  1. Anfrage über Methode „ListRecords“:
    ?metadataPrefix=MARC21-xml&verb=ListRecords&from=2024-05-10&until=2024-05-20
  2. Die maximale Anzahl an Datensätzen, die per <ListRecords> geliefert wird, beträgt 2,500. Sind mehr Datensätze vorhanden, wird ein resumptionToken bereitgestellt. Die Abfrage kann dann mit dem resumptionToken wiederholt werden, bis das Ende der Abfrage erreicht ist:
    ?verb=ListRecords&resumptionToken=1714728261163_marc21
5.3 ListRecords mit Set-Identifier und Angaben zum Zeitraum

Dieser Ansatz kann gewählt werden, um die Bestandsdaten einer bestimmten EZB-Einrichtung für einen definierten Zeitraum abzurufen. Man benötigt den Set-Identifier, der die ISIL der Einrichtung beinhaltet und den Zeitraum, für den die Daten abgerufen werden, z. B.: von 2024-05-10 bis 2024-05-20. Für die Universitätsbibliothek Regensburg (ISIL: DE-355) lautet der Set-Identifier: ezb:holdings:DE-355

Vorgehen

  1. Anfrage über Methode: „ListRecords“: ?verb=ListRecords&metadataPrefix=MARC21-xml&set=ezb:holdings:DE-355&from=2024-05-10&until=2024-05-20
  2. Die maximale Anzahl an Datensätzen, die per <ListRecords> geliefert wird, beträgt 2,500. Sind mehr Datensätze vorhanden, wird ein resumptionToken bereitgestellt. Die Abfrage kann dann mit dem resumptionToken wiederholt werden, bis das Ende der Abfrage erreicht ist:
    ?verb=ListRecords&resumptionToken=1714728261163_marc21

Qualität durch Kooperation

Nach oben scrollen