External Entities

Een familie Drupal-modules die externe data (API's, datasets, gescrapete pagina's) omzet in Drupal-entiteiten die net als lokale content renderen, refereren en doorzoekbaar zijn, en waarbij redacteuren elk veld kunnen overschrijven.

 

## Wat het is

External Entities is een gelaagde familie van Drupal-modules voor sites waarvan de content deels elders staat. Records uit een externe API of dataset worden Drupal-entiteiten met velden, weergavemodi en Beheer weergave, zodat pagina's ze kunnen tonen, ernaar kunnen verwijzen en ze kunnen oplijsten als alle andere content, terwijl de gegevens verbonden blijven met hun bron.

Een gedeelde onderlaag regelt wat elke integratie nodig heeft: HTTP-caching, één verzoek per bron ongeacht hoeveel delen van een pagina erom vragen, en spiegeling per veld. Een nieuwe databron is daarom een kleine module die in het framework plugt, geen nieuwe integratie. [Species External Entity](/nl/producten/species-ext) en [Editorial Intelligence](/nl/producten/editorial-intelligence) zijn zo gebouwd, en de catalogus van [Research Library](/nl/producten/research-library) staat daarbovenop.



 

 





 

## In één oogopslag

Substraat`entities_ext`, gebouwd op de engine van de bijdragen External Entities-module; `request_bus`, de uitgaande aanroeplaag; `dynamic_mirror_base`, spiegeling per veldGenerieke typen`entity_ext`: een extern entiteitstype met een HTTP-API als backend, gedefinieerd in configuratie in plaats van een aangepaste opslagpluginBronmodulesEén per externe bron of dataset, waaronder `wikipedia_ext`, `data_ext`, `scripture_x`, `books_ext`, `scholar_ext`, `places_ext`, `artworks_ext`, `iiif_x`, `wikidata_x` en `authority_x`Drupal core10 of 11Vereist`key`; `entities_ext` vereist ook `request_bus`, dat zelf alleen Drupal core en `key` nodig heeftStatusGebouwd en in actieve ontwikkeling, nog geen 1.0-release (modules op `0.1.0-dev`). Het substraat draait in productie op [Biodiversa](/nl/projecten/biodiversa), [Museo Avellonia](/nl/projecten/museo-avellonia) en het [Quercus Project](/nl/projecten/quercus-project); de meeste bronmodules zijn in ontwikkeling op het eigen onderzoeksplatform van MADDev.

 

 





 

## Wat het toevoegt aan een Drupal-site

### Externe entiteitstypen

`entities_ext` definieert geen eigen inhoudstype. Elke verbruikende module registreert zijn externe entiteitstypen op het gedeelde substraat, bijvoorbeeld `wikipedia_page`, `species_x` of `editorial_news`. De submodule `xntt_views` toont externe entiteiten in Views, `xnttsql` leest externe SQL-schema's, en `entities_ext_mng` controleert elke bron op ontbrekende eindpunten of gewijzigde velden en beschermt de weergave terwijl een bron niet beschikbaar is.

### Spiegeling per veld

`dynamic_mirror_base` bepaalt, veld per veld, waar een waarde vandaan komt: live uit de bron, een gespiegelde kopie, of een lokale waarde die permanent bewaard blijft. Een redacteur kan elk veld vergrendelen op een lokale waarde die elke verversing van upstream overleeft. `dmb_ui` geeft redacteuren acties voor vergrendelen, bewerken, hersynchroniseren en ontgrendelen, en `dmb_harvest` ververst gespiegelde waarden volgens een schema.

### Losse feiten

`data_ext` lost één extern feit op, zoals een bijschrift, een prijs of een coördinaat, zonder een heel record te spiegelen. Het wordt geleverd met bijschriften voor Library of Congress Classification en Universal Decimal Classification.

### Plugintypen

- `@StorageClient` en `@ExternalSource`: één plugin per upstream-API, geprobeerd in volgorde van gewicht totdat er één antwoordt
- plugins voor veldmapper, eigenschapmapper, gegevensprocessor en gegevensaggregator om de gegevens van een bron in velden vorm te geven
- `@DmbAdapter`: verbindt een entiteitstype met spiegeling per veld
- bronplugins per module, zoals `@WikipediaSource`, `@ScriptureSource`, `@ScholarSource`, `@ArtworkSource` en `@DatumSource`

### Diensten

`request_bus.bus` (ook beschikbaar als `entities_ext.request_bus`), `data_ext.resolver`, `wikidata_x.client`, `authority_x.resolver`, `scholar_ext.resolver`, `iiif_x.manifest_loader`.

### Beheer

- `/admin/config/services/dmb/policy`: beleid voor spiegeling per veld
- `/admin/content/dmb-overrides`: elke lokale overschrijving
- `/admin/config/services/dmb/harvest`: het verversingsschema
- `/admin/config/services/wikipedia-ext`: Wikipedia-instellingen

### Ontwikkelaarswerkbank

`entities_ext_builder`, in ontwikkeling, bouwt externe entiteitstypen zonder handgeschreven configuratie: het onderzoekt een live-eindpunt, toont een voorbeeld van hoe velden worden geëxtraheerd voordat er iets wordt opgeslagen, en kan een AI-provider gebruiken om de documentatie van een API te vinden. Het bevat geen runtime-logica, dus na verwijdering blijven alle externe entiteitstypen die het heeft gebouwd werken.



 

 





 

## Databronnen en licenties

- **Encyclopedisch:** Wikipedia en elke MediaWiki-site (`wikipedia_ext`); Wikidata (`wikidata_x`)
- **Boeken en onderzoek:** Open Library en Google Books, geharmoniseerd op ISBN (`books_ext`); OpenAlex, Crossref, arXiv, PubMed en Semantic Scholar (`scholar_ext`)
- **Namen:** VIAF, ORCID, ULAN, Wikidata en ISNI-identificatoren samengevoegd tot één persoon of organisatie (`authority_x`)
- **Plaatsen:** Pleiades en de World Historical Gazetteer (`places_ext`)
- **Collecties:** het Metropolitan Museum of Art, het Art Institute of Chicago en het Cleveland Museum of Art, geen ervan vereist een sleutel (`artworks_ext`); IIIF-afbeeldingsmanifesten, versies 2 en 3 (`iiif_x`)
- **Teksten:** bronnen en vertalingen van Hebreeuwse, Griekse en Koptische geschriften (`scripture_x`)
- **Classificatiebijschriften:** id.loc.gov en de UDC Summary (`data_ext`)

Elke uitgaande aanroep gaat via `request_bus`, die verzoeken in de cache opslaat en combineert; bronnen die een sleutel nodig hebben, bewaren die in de module `key`, niet in de code. Wanneer inhoud van een externe bron afkomstig is, schrijft `copyrights_ext` de licentie en naamsvermelding in het copyrightveld van de site op het moment dat deze wordt geïmporteerd of gespiegeld, wat [Copyrights Guard](/nl/producten/copyrights-guard) vervolgens handhaaft.



 

 





 

## Ontwerpbeslissingen

- **Registreer een behoefte, verstuur geen verzoek.** Aanroepers vertellen de verzoekbus wat ze nodig hebben; deze voegt identieke verzoeken samen, combineert de velden die verschillende delen van een pagina opvragen, bundelt per bron en onthoudt het antwoord, inclusief "geen data", voor de rest van het verzoek. Een pagina met tien door Wikipedia ondersteunde secties doet één Wikipedia-aanroep.
- **Een dode bron breekt nooit een pagina.** Een bron die offline is, traag is of misvormd is, geeft niets terug in plaats van een uitzondering te gooien, en de pagina wordt zonder die bron gerenderd.
- **Alleen de velden die een pagina opvraagt.** Het laden van een externe entiteit resolvet de velden die daadwerkelijk worden opgevraagd, niet het hele externe record.
- **Drie instellingen per veld, niet één modus.** Waar een waarde vandaan komt (live, mirror of lokaal), wat er gebeurt wanneer de bron die laat vallen (verwijderen of behouden), en waar de waarde wordt opgeslagen, worden onafhankelijk ingesteld; de vergrendeling van een redacteur heeft voorrang op alle drie.
- **Zachte afhankelijkheden.** Modules zijn alleen hard afhankelijk van het substraat en `key`; elke andere integratie wordt tijdens runtime gecontroleerd, zodat de familie blijft werken wanneer een module ontbreekt.
- **Namen die zeggen wat een module is.** `_ext` markeert een bronmodule, `_x` een module die het framework uitbreidt, en geen suffix een hulpprogramma zonder afhankelijkheid ervan.



 

 





## Start een project.

Vertel ons van welke externe gegevens je site afhankelijk is, en hoe actueel die moeten zijn.



[Neem contact op →](/nl/contact)