Das Datenmodell
Wie das Journal als Linked Data beschrieben ist - in DCAT für Kataloge, in CIDOC CRM für das kulturelle Erbe, und wie beides zusammenpasst. Die Grafiken werden bei jedem Build gegen den veröffentlichten Graphen geprüft.
Farben in den Grafiken
- Ressource des Journals
- Ding in der Welt
- Klasse
- Vokabularbegriff
- Identifikator anderswo
- Wert oder Property
1. Von YAML zum Wissensgraphen
Alles auf dieser Seite stammt aus wenigen YAML-Dateien im Repository: dem Journal, einer Datei je Band, den Orten und dem Vokabular der Beitragstypen. Eine Python-Pipeline (main.py) reichert sie mit den zwischengespeicherten Zenodo-Datensätzen und Wikidata-Orten an und erzeugt aus denselben zusammengeführten Daten drei Dinge: die Webseiten, die Zitationen und den Wissensgraphen. Der Graph wird geprüft, abgefragt und kartiert, bevor die Seite geschrieben wird.
flowchart LR yaml([content/*.yaml]):::inst --> merge[merge]:::prop zen([Zenodo cache]):::ext --> merge wd([Wikidata cache]):::ext --> merge merge --> json([entries.json]):::inst json --> cite[cite]:::prop --> bib([BibTeX · RIS · CSL-JSON]):::inst json --> rdf[rdf]:::prop --> dcat([DCAT graph]):::inst rdf --> crm([CIDOC CRM graph]):::inst dcat --> validate[validate · SHACL]:::prop crm --> validate dcat --> sparql[sparql]:::prop dcat --> map[map]:::prop validate --> site[site]:::prop sparql --> site map --> site bib --> site site --> pages([pages EN · DE]):::inst classDef inst fill:#e2e8f0,stroke:#000000,color:#000000 classDef real fill:#166534,stroke:#000000,color:#ffffff classDef cls fill:#9a3412,stroke:#000000,color:#ffffff classDef term fill:#4c1d95,stroke:#000000,color:#ffffff classDef ext fill:#ffffff,stroke:#000000,color:#000000 classDef prop fill:#fbbf24,stroke:#000000,color:#000000
2. Journal, Band, Heft, Beitrag
Das Journal ist ein Katalog von Bänden, ein Band eine Reihe von Heften, ein Heft eine Reihe von Beiträgen. Jede Ebene hat eine eigene stabile IRI unter https://w3id.org/squirrelpapers/, jeder Beitrag seine Datei auf Zenodo, seine Personen und - bei Vorträgen und Postern - die Veranstaltung, auf der er vorgestellt wurde, samt ihrem Ort. Die Typen stammen aus dem eigenen SKOS-Vokabular des Journals, abgebildet auf COAR und FaBiO.
flowchart TB J([Journal · /]):::inst V([Volume 7 · /v7]):::inst I([Issue 4 · /v7/i4]):::inst E([Entry 5 · /v7/i4/e5]):::inst D([PDF · /v7/i4/e5#pdf]):::inst P([Person · /person/ORCID]):::real EV([Event · /event/…]):::real PL([Place · /place/…]):::real T([Type · /type/poster]):::term O([ORCID]):::ext W([Wikidata]):::ext Z([DOI · Zenodo]):::ext J -->|"dcat:dataset"| V V -->|"dct:hasPart"| I I -->|"dct:hasPart"| E E -->|"dcat:distribution"| D E -->|"dct:creator"| P E -->|"bibo:presentedAt"| EV EV -->|"schema:location"| PL E -->|"dct:type"| T P -->|"owl:sameAs"| O PL -->|"owl:sameAs"| W E -->|"owl:sameAs"| Z classDef inst fill:#e2e8f0,stroke:#000000,color:#000000 classDef real fill:#166534,stroke:#000000,color:#ffffff classDef cls fill:#9a3412,stroke:#000000,color:#ffffff classDef term fill:#4c1d95,stroke:#000000,color:#ffffff classDef ext fill:#ffffff,stroke:#000000,color:#000000 classDef prop fill:#fbbf24,stroke:#000000,color:#000000
3. Die DCAT-Schicht
Der Hauptgraph beschreibt das Journal als Datenkatalog in DCAT 3, geprüft gegen das Profil DCAT-AP 3.0.1 der Europäischen Union: Das Journal ist ein dcat:Catalog, Bände und Hefte sind dcat:DatasetSeries, Beiträge dcat:Dataset mit einer dcat:Distribution für das PDF. Bibliografische Vokabulare ergänzen, was DCAT nicht sagt: BIBO und FaBiO die Art der Publikation, PRISM Band- und Heftnummern, schema.org und FOAF Personen, Veranstaltungen und Orte, GeoSPARQL die Koordinaten, PROV den Zenodo-Datensatz, aus dem ein Beitrag stammt, SPDX die Prüfsummen. Die kleine sqp:-Ontologie enthält nur die eigene Nummerierung des Journals.
flowchart LR cat["dcat:Catalog<br>fabio:Journal"]:::cls ser["dcat:DatasetSeries<br>fabio:JournalVolume"]:::cls iss["dcat:DatasetSeries<br>fabio:JournalIssue"]:::cls ds["dcat:Dataset<br>bibo:Document · fabio:…"]:::cls dist["dcat:Distribution"]:::cls per["foaf:Person<br>schema:Person"]:::cls ev["event:Event<br>schema:Event"]:::cls pl["dct:Location<br>schema:Place · geo:Feature"]:::cls geom["geo:Geometry"]:::cls con["skos:Concept"]:::term cat -->|"dcat:dataset"| ser ser -->|"dct:isPartOf"| cat iss -->|"dcat:inSeries"| ser ds -->|"dcat:inSeries"| iss ds -->|"dcat:distribution"| dist ds -->|"dct:creator · dct:contributor"| per ds -->|"bibo:presentedAt"| ev ds -->|"dct:type"| con ev -->|"schema:location"| pl pl -->|"geo:hasGeometry"| geom ds --- lbl[/"sqp:citationLabel · sqp:entryNumber"/]:::prop iss --- sig[/"sqp:sigil"/]:::prop geom --- wkt[/"geo:asWKT"/]:::prop classDef inst fill:#e2e8f0,stroke:#000000,color:#000000 classDef real fill:#166534,stroke:#000000,color:#ffffff classDef cls fill:#9a3412,stroke:#000000,color:#ffffff classDef term fill:#4c1d95,stroke:#000000,color:#ffffff classDef ext fill:#ffffff,stroke:#000000,color:#000000 classDef prop fill:#fbbf24,stroke:#000000,color:#000000
4. Die CIDOC-CRM-Schicht
Ein zweiter Graph beschreibt dieselben Ressourcen in CIDOC CRM 7.1 mit den Erweiterungen LRMoo (Werke und Expressionen) und CRMdig (digitale Objekte). Wo DCAT Fakten als Eigenschaften des Beitrags nennt, erzählt CRM sie als Ereignisse: Ein Beitrag wurde von Personen (P14) in einer Zeitspanne (P4) geschaffen (E65 / F28); eine Konferenz ist eine Aktivität (E7), die den Beitrag benutzte (P16) und an einem Ort (P7) stattfand, der durch Koordinaten bestimmt ist (P168). Titel und Identifikatoren sind eigene Knoten (E35, E42) mit ihrem symbolischen Inhalt (P190).
flowchart LR e73["crm:E73_Information_Object<br>lrmoo:F2_Expression"]:::cls e65["crm:E65_Creation<br>lrmoo:F28_Expression_Creation"]:::cls e21["crm:E21_Person"]:::cls e52["crm:E52_Time-Span"]:::cls e7["crm:E7_Activity"]:::cls e53["crm:E53_Place"]:::cls e35["crm:E35_Title"]:::cls e42["crm:E42_Identifier"]:::cls e41["crm:E41_Appellation"]:::cls d1["crmdig:D1_Digital_Object"]:::cls f18["lrmoo:F18_Serial_Work"]:::cls e65 -->|"crm:P94_has_created<br>lrmoo:R17_created"| e73 e65 -->|"crm:P14_carried_out_by"| e21 e65 -->|"crm:P4_has_time-span"| e52 e7 -->|"crm:P16_used_specific_object"| e73 e7 -->|"crm:P7_took_place_at"| e53 e7 -->|"crm:P1_is_identified_by"| e41 e7 -->|"crm:P4_has_time-span"| e52 e73 -->|"crm:P102_has_title"| e35 e73 -->|"crm:P1_is_identified_by"| e42 e21 -->|"crm:P1_is_identified_by"| e42 d1 -->|"crm:P165_incorporates"| e73 e73b["crm:E73_Information_Object<br>issue · volume"]:::cls e73 -->|"crm:P106i_forms_part_of"| e73b e73b -->|"crm:P106i_forms_part_of"| f18 e53 --- wkt[/"crm:P168_place_is_defined_by"/]:::prop e52 --- dates[/"crm:P82a_begin_of_the_begin<br>crm:P82b_end_of_the_end"/]:::prop e42 --- sym[/"crm:P190_has_symbolic_content"/]:::prop classDef inst fill:#e2e8f0,stroke:#000000,color:#000000 classDef real fill:#166534,stroke:#000000,color:#ffffff classDef cls fill:#9a3412,stroke:#000000,color:#ffffff classDef term fill:#4c1d95,stroke:#000000,color:#ffffff classDef ext fill:#ffffff,stroke:#000000,color:#000000 classDef prop fill:#fbbf24,stroke:#000000,color:#000000
5. Wie die beiden Schichten zusammenkommen
Beide Graphen verwenden dieselben IRIs. Ein Beitrag, eine Person, eine Veranstaltung oder ein Ort ist ein Knoten, einmal als Katalogeintrag und einmal als CRM-Entität beschrieben; lädt man beide Dateien in einen Store, verbinden sie sich ohne jede Abbildung. Die Tabelle liest dieselbe Tatsache auf beide Arten. Der DCAT-Graph bleibt für sich lesbar, und der CRM-Graph lässt sich ohne das Katalogvokabular in einen CRM-basierten Wissensgraphen wie den von NFDI4Objects übernehmen.
| Tatsache | DCAT-Graph | CIDOC-CRM-Graph |
|---|---|---|
| wer ihn schrieb | dct:creator |
crm:P94i_was_created_by / crm:P14_carried_out_by |
| wann | dct:issued |
… / crm:P4_has_time-span / crm:P82a_begin_of_the_begin |
| sein Titel | dct:title |
crm:P102_has_title / crm:P190_has_symbolic_content |
| seine DOI | bibo:doi |
crm:P1_is_identified_by / crm:P190_has_symbolic_content |
| sein Typ | dct:type |
crm:P2_has_type |
| wo er vorgestellt wurde | bibo:presentedAt / schema:location |
crm:P16i_was_used_for / crm:P7_took_place_at |
| sein PDF | dcat:distribution |
crm:P165i_is_incorporated_in |
| sein Heft | dcat:inSeries |
crm:P106i_forms_part_of |
6. Ein Beitrag in beiden Graphen: 7(4), λ5
Vom Build aus den veröffentlichten Graphen gezeichnet, nicht von Hand: der Beitrag Brückenbau zwischen LOD und RSE mit Heft, Person, Veranstaltung, Ort und Datei - erst als DCAT, dann als CIDOC CRM. Die vollständige Beschreibung steht in index.ttl neben der Beitragsseite.
flowchart LR
n0("/v7/i4/e5<br><small>bibo:Document · dcat:Dataset</small>"):::inst
n1[/"7(4), λ5"/]:::prop
n2[/"2025-09-30"/]:::prop
n3("/v7/i4<br><small>dcat:DatasetSeries · fabio:JournalIssue</small>"):::inst
n4("sqpt:conference-paper<br><small>skos:Concept</small>"):::term
n5("Florian Thiery<br><small>foaf:Person · schema:Person</small>"):::real
n6("NFDI4Objects Community Meeting 2025<br><small>event:Event · schema:Event</small>"):::real
n7("/v7/i4/e5#pdf<br><small>dcat:Distribution</small>"):::inst
n8["https://doi.org/10.5281/zenodo.16875678"]:::ext
n9("German Mining Museum<br><small>dct:Location · geo:Feature</small>"):::real
n10["wd:Q896952"]:::ext
n11["iana:application/pdf<br><small>dct:MediaType</small>"]:::ext
n12[/"3050344"/]:::prop
n13["https://orcid.org/0000-0002-3246-3531"]:::ext
n0 -->|"sqp:citationLabel"| n1
n0 -->|"dct:issued"| n2
n0 -->|"dcat:inSeries"| n3
n0 -->|"dct:type"| n4
n0 -->|"dct:creator"| n5
n0 -->|"bibo:presentedAt"| n6
n0 -->|"dcat:distribution"| n7
n0 -->|"owl:sameAs"| n8
n6 -->|"schema:location"| n9
n9 -->|"owl:sameAs"| n10
n7 -->|"dcat:mediaType"| n11
n7 -->|"dcat:byteSize"| n12
n5 -->|"owl:sameAs"| n13
classDef inst fill:#e2e8f0,stroke:#000000,color:#000000
classDef real fill:#166534,stroke:#000000,color:#ffffff
classDef cls fill:#9a3412,stroke:#000000,color:#ffffff
classDef term fill:#4c1d95,stroke:#000000,color:#ffffff
classDef ext fill:#ffffff,stroke:#000000,color:#000000
classDef prop fill:#fbbf24,stroke:#000000,color:#000000flowchart LR
n0("/v7/i4/e5#creation<br><small>crm:E65_Creation · lrmoo:F28_Expression_Creation</small>"):::inst
n1("/v7/i4/e5<br><small>crm:E73_Information_Object · lrmoo:F2_Expression</small>"):::inst
n2("Florian Thiery<br><small>crm:E21_Person</small>"):::real
n3("/v7/i4/e5#creation-time-span<br><small>crm:E52_Time-Span</small>"):::inst
n4[/"2025-09-30T00:00:00"/]:::prop
n5("/v7/i4/e5#title<br><small>crm:E35_Title</small>"):::inst
n6[/"Brückenbau zwischen LOD und RSE: Von CIDOC CR…"/]:::prop
n7("/v7/i4/e5#doi<br><small>crm:E42_Identifier</small>"):::inst
n8[/"10.5281/zenodo.16875678"/]:::prop
n9("sqpt:conference-paper"):::term
n10("/v7/i4<br><small>crm:E73_Information_Object</small>"):::inst
n11("NFDI4Objects Community Meeting 2025<br><small>crm:E7_Activity</small>"):::real
n12("German Mining Museum<br><small>crm:E53_Place</small>"):::real
n13[/"POINT(7.21722 51.4892)"/]:::prop
n14("/v7/i4/e5#pdf<br><small>crmdig:D1_Digital_Object</small>"):::inst
n0 -->|"crm:P94_has_created"| n1
n0 -->|"crm:P14_carried_out_by"| n2
n0 -->|"crm:P4_has_time-span"| n3
n3 -->|"crm:P82a_begin_of_the_begin"| n4
n1 -->|"crm:P102_has_title"| n5
n5 -->|"crm:P190_has_symbolic_content"| n6
n1 -->|"crm:P1_is_identified_by"| n7
n7 -->|"crm:P190_has_symbolic_content"| n8
n1 -->|"crm:P2_has_type"| n9
n1 -->|"crm:P106i_forms_part_of"| n10
n11 -->|"crm:P16_used_specific_object"| n1
n11 -->|"crm:P7_took_place_at"| n12
n12 -->|"crm:P168_place_is_defined_by"| n13
n14 -->|"crm:P165_incorporates"| n1
classDef inst fill:#e2e8f0,stroke:#000000,color:#000000
classDef real fill:#166534,stroke:#000000,color:#ffffff
classDef cls fill:#9a3412,stroke:#000000,color:#ffffff
classDef term fill:#4c1d95,stroke:#000000,color:#ffffff
classDef ext fill:#ffffff,stroke:#000000,color:#000000
classDef prop fill:#fbbf24,stroke:#000000,color:#0000007. Die Regeln, die der Graph einhalten muss
Bevor die Seite gebaut wird, prüft SHACL den Graphen dreifach: gegen die offiziellen Shapes von DCAT-AP 3.0.1, gegen die eigenen Regeln des Journals unten und gegen Regeln für die CRM-Sicht. Zuerst muss ein absichtlich kaputter Beitrag von jeder Regel erkannt werden, damit die Prüfung nicht unbemerkt aufhört zu wirken. Die Regeln liegen als sqp-shapes.ttl und crm-shapes.ttl vor.
| Shape | Gilt für | Regeln |
|---|---|---|
EntryShapeshapes/sqp-shapes.ttl |
bibo:Document |
|
EventShapeshapes/sqp-shapes.ttl |
event:Event |
|
IssueShapeshapes/sqp-shapes.ttl |
fabio:JournalIssue |
|
JournalShapeshapes/sqp-shapes.ttl |
/ |
|
PersonShapeshapes/sqp-shapes.ttl |
foaf:Person |
|
PlaceShapeshapes/sqp-shapes.ttl |
schema:Place |
|
VolumeShapeshapes/sqp-shapes.ttl |
fabio:JournalVolume |
|
CrmActivityShapeshapes/crm-shapes.ttl |
crm:E7_Activity |
|
CrmCreationShapeshapes/crm-shapes.ttl |
crm:E65_Creation |
|
CrmDigitalObjectShapeshapes/crm-shapes.ttl |
crmdig:D1_Digital_Object |
|
CrmExpressionShapeshapes/crm-shapes.ttl |
lrmoo:F2_Expression |
|
CrmIdentifierShapeshapes/crm-shapes.ttl |
crm:E42_Identifier |
|
CrmPlaceShapeshapes/crm-shapes.ttl |
crm:E53_Place |
|
CrmTimeSpanShapeshapes/crm-shapes.ttl |
crm:E52_Time-Span |
|
Die Meldungen der Regeln sind englisch, wie in den Shapes.
8. Stabile IRIs
Jede Ressource hat eine IRI unter https://w3id.org/squirrelpapers/, die bleibt, wenn die Seite umzieht. Sie führt einen Browser zur Seite und eine Maschine zu Turtle oder JSON-LD; dieselben Dateien liegen neben jeder Seite.
| IRI | Ressource | Klassen |
|---|---|---|
/ |
das Journal | dcat:Catalog · fabio:Journal · lrmoo:F18_Serial_Work |
/v7 |
Band 7 | dcat:DatasetSeries · fabio:JournalVolume |
/v7/i4 |
Band 7, Heft 4 | dcat:DatasetSeries · fabio:JournalIssue |
/v7/i4/e5 |
Beitrag 5 dieses Hefts | dcat:Dataset · bibo:Document · crm:E73_Information_Object |
/v7/i4/e5#pdf |
sein PDF auf Zenodo | dcat:Distribution · crmdig:D1_Digital_Object |
/person/<ORCID> |
eine Person | foaf:Person · crm:E21_Person |
/event/<name-year> |
eine Konferenz oder ein Workshop | event:Event · crm:E7_Activity |
/place/<key> |
ein Ort | schema:Place · crm:E53_Place |
/type/<slug> |
ein Beitragstyp | skos:Concept |
/ontology |
die Ontologie des Journals | owl:Ontology |