---
title: "JSON-LD voor digitale productpaspoorten (en waar EPCIS 2.0 in past) — qr3.app Blog"
description: "Een DPP is alleen nuttig voor machines als hij machineleesbaar is. Deze gids laat de echte JSON-LD zien die een qr3-paspoort via de live resolver beschikbaar stelt, hoe één URL via content negotiation zowel mensen als machines bedient, en waar de aanvullende EPCIS 2.0-eventstandaard in past."
canonical: "https://qr3.app/nl/blog/dpp-json-ld-epcis/"
lang: "nl"
robots: "index,follow,max-image-preview:large,max-snippet:-1"
---

# JSON-LD voor digitale productpaspoorten (en waar EPCIS 2.0 in past) — qr3.app Blog

> Een DPP is alleen nuttig voor machines als hij machineleesbaar is. Deze gids laat de echte JSON-LD zien die een qr3-paspoort via de live resolver beschikbaar stelt, hoe één URL via content negotiation zowel mensen als machines bedient, en waar de aanvullende EPCIS 2.0-eventstandaard in past.

Canonical: <https://qr3.app/nl/blog/dpp-json-ld-epcis/>

[← Blog](/nl/blog/) [Tutorials](/nl/blog/category/tutorials/)

30 mei 2026 6 min leestijd [Tutorials](/nl/blog/category/tutorials/) [dpp](/nl/blog/tag/dpp/)[json-ld](/nl/blog/tag/json-ld/)[epcis](/nl/blog/tag/epcis/)[gs1-digital-link](/nl/blog/tag/gs1-digital-link/)[interoperability](/nl/blog/tag/interoperability/)

# JSON-LD voor digitale productpaspoorten (en waar EPCIS 2.0 in past)

Een DPP is alleen nuttig voor machines als hij machineleesbaar is. Deze gids laat de echte JSON-LD zien die een qr3-paspoort via de live resolver beschikbaar stelt, hoe één URL via content negotiation zowel mensen als machines bedient, en waar de aanvullende EPCIS 2.0-eventstandaard in past.

door **QR3 Redaktion**

![JSON-LD voor digitale productpaspoorten (en waar EPCIS 2.0 in past)](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/dpp-json-ld-epcis/hero.png)

Een digitaal productpaspoort is bedoeld om gelezen te worden door mensen *én* door machines: het inname-systeem van een recycler, een douane-API, een marktplaats-crawler, het script van een duurzaamheidsauditor. Een HTML-pagina die alleen voor mensen geschikt is, volstaat niet. Het paspoort moet **machineleesbaar** zijn — een gestructureerde payload die een programma kan parsen, koppelen en verwerken zonder te scrapen.

Deze gids is bedoeld voor ontwikkelaars die de voor de hand liggende vervolgvraag stellen: *zodra ik een DPP heb, hoe leest een machine die dan daadwerkelijk?* Het antwoord voor qr3 is JSON-LD via de openbare resolver. We laten de echte response zien, leggen uit hoe dezelfde URL zowel mensen als machines bedient, en plaatsen vervolgens EPCIS 2.0 — de aanvullende GS1-eventstandaard — in context.

## Wat machineleesbaarheid betekent voor een DPP

Machineleesbaar is meer dan "geeft JSON terug". Voor een productpaspoort betekent het drie dingen:

- **Gestructureerd** — velden die een parser kan adresseren (`gtin`, `name`, …), geen proza om te scrapen.

- **Getypeerd en gekoppeld** — termen verankerd aan gedeelde vocabulaires zodat `Product` voor iedereen hetzelfde betekent. Dat is de *Linked Data* in JSON-LD.

- **Stabiel op te halen** — één duurzame URL per item die een script gedurende de volledige levensduur van het product kan `GET`-ten.

JSON-LD (JSON for Linking Data) levert alle drie. Het is gewone JSON plus een `@context` die elke key koppelt aan een term in een openbaar vocabulaire — hier [schema.org](https://schema.org) en het [GS1 Web Vocabulary](https://gs1.org/voc/). Een crawler die schema.org al begrijpt, begrijpt het paspoort zonder enige maatwerkintegratie.

## De DPP als JSON-LD (echte curl + geverifieerde response)

Elk qr3-paspoort wordt opgelost op een GS1 Digital Link-URL: `https://qr3.app/dpp/{gtin}/{serial}`. Voeg `?format=jsonld` toe om de Linked-Data-weergave op te vragen. Tegen de live batterijdemo:

```
curl -s "https://qr3.app/dpp/09520000000011/DEMO-BAT-01?format=jsonld"
```

geeft terug:

```
{
  "@context": ["https://schema.org", "https://gs1.org/voc/"],
  "@type": "Product",
  "gtin": "09520000000011",
  "name": "EcoMax 5000 (Demo)"
}
```

Drie dingen om op te merken:

- `@context` is een **array** van twee vocabulaires — schema.org voor het algemene web en `gs1.org/voc/` voor de producttermen van GS1. Keys worden tegen beide opgelost.

- `@type: "Product"` vertelt elke Linked-Data-consument precies wat voor soort entiteit dit is.

- De waarden (`gtin`, `name`) zijn echt en live — dit is de werkelijke payload, geen mock.

Dat is precies het punt: het script van een recycler heeft geen qr3-specifieke client nodig. Het doet een HTTP `GET`, parst JSON-LD die het al begrijpt, en leest de GTIN en productnaam er rechtstreeks van af.

## Eén URL, twee doelgroepen: content negotiation

Dezelfde `https://qr3.app/dpp/{gtin}/{serial}`-URL bedient zowel een mensvriendelijk HTML-paspoort *als* de machineweergave — de server beslist wat hij teruggeeft op basis van wat de aanroeper vraagt. Twee manieren om te vragen:

| Wat je wilt | Query-parameter | Of Accept-header |
| --- | --- | --- |
| Menselijke HTML-pagina | *(standaard)* | `Accept: text/html` |
| JSON-LD (Linked Data) | `?format=jsonld` | `Accept: application/ld+json` |
| Platte JSON | `?format=json` | — |
| Linkset (gerelateerde resources) | `?format=linkset` | — |
| DCAT-AP (datasetmetadata) | `?format=dcat-ap` | — |

Een telefooncamera die de QR-code opent, komt dus uit op het leesbare HTML-paspoort, terwijl een script dezelfde *identieke* URL om `application/ld+json` vraagt en gestructureerde data krijgt:

```
# Machineweergave via header-negotiation — zelfde URL, geen query string
curl -s -H "Accept: application/ld+json" \
  "https://qr3.app/dpp/09520000000011/DEMO-BAT-01"
```

Eén identifier, één URL, vele representaties. De GTIN/serial blijft stabiel; de *weergave* past zich aan de aanroeper aan. Precies dat maakt een DPP tegelijk duurzaam én interoperabel.

## Waar EPCIS 2.0 in past (events vs. paspoort)

Een veelgehoorde vervolgvraag: *en EPCIS dan — is dat niet de GS1-standaard hiervoor?* Belangrijk onderscheid:

- Een **DPP** is de **statische beschrijving van één productitem** — de identiteit, materialen, CO₂-voetafdruk en recycleerbaarheid ervan. Het beantwoordt *"wat is dit ding?"* De JSON-LD hierboven is die momentopname.

- **EPCIS 2.0** is de GS1-standaard voor **supply-chain-events** — de zichtbaarheidsdata van *wat er is gebeurd, waar, wanneer en waarom*: een item werd in gebruik genomen, verzonden, ontvangen, gerecycled. Het beantwoordt *"wat is er met dit ding gebeurd, en waar is het?"*

Ze zijn **aanvullend, niet concurrerend**. Het paspoort vertelt je dat het product een 5,2 kWh-batterij is met 35% gerecycled materiaal; een EPCIS-eventspoor zou je vertellen dat hij op een bepaalde datum in Hamburg is gefabriceerd, via een distributiecentrum is verzonden en bij een recycler is aangekomen. EPCIS 2.0 zelf is JSON/JSON-LD-vriendelijk, dus beide delen dezelfde Linked-Data-wereldvisie en dezelfde GS1-identifiers (GTIN + serial) als koppelsleutel.

> **qr3-scope (wees precies):** qr3 **levert de DPP als JSON-LD** — dat is wat deze post demonstreert. qr3 biedt **geen** EPCIS-eventregistratie of EPCIS-endpoints. Beschouw EPCIS 2.0 hier als de *conceptuele, aanvullende* standaard die je naast een DPP zou inzetten voor volledige supply-chain-traceerbaarheid, niet als een qr3-functie.

Het mentale model is dus: de DPP (qr3, JSON-LD) is het *identiteitsblad* van het product; EPCIS 2.0 (afzonderlijk systeem) is het *reislogboek* ervan. Dezelfde identifiers, twee beantwoorde vragen.

## Een DPP genereren die JSON-LD beschikbaar stelt

Je hoeft niets bijzonders te doen om JSON-LD "in te schakelen" — maak het paspoort aan en de resolver serveert elke representatie automatisch:

```
import { QR3 } from "@qr3/sdk";

const client = new QR3({ apiKey: process.env.QR3_API_KEY! });

const passport = await client.dpp.create({
  gtin: "09520000000011",
  serial: "SN-00012345",
  product_name: "PowerCell 5 kWh LFP",
  manufacturer: "ExampleTech GmbH",
  origin_country: "DE",
  category: "battery",
  market_countries: ["DE", "FR", "AT"],
  status: "live",
  battery_data: {
    capacity_kwh: 5,
    carbon_footprint_kg: 62,
    recycled_content_pct: 12,
    recyclability_pct: 95,
  },
});

// The passport now resolves at https://qr3.app/dpp/09520000000011/SN-00012345
// Humans get HTML; machines append ?format=jsonld (or send Accept: application/ld+json).
console.log(passport.qr.svg); // QR encodes the GS1 Digital Link to the resolver
```

Eenmaal aangemaakt beantwoordt de URL van het item meteen beide doelgroepen — geen extra publicatiestap voor de machineweergave.

## FAQ

**Waarom JSON-LD en niet platte JSON?**
Platte JSON is gestructureerd maar niet *zelfbeschrijvend*: een consument moet jouw veldnamen leren kennen. JSON-LD voegt `@context` toe en koppelt elke key aan schema.org-/GS1-termen, zodat elke Linked-Data-consument het begrijpt zonder maatwerkintegratie. Als je alleen snel iets wilt uitlezen, is `?format=json` nog steeds beschikbaar.

**Implementeert qr3 EPCIS 2.0?**
Nee. qr3 levert de DPP als JSON-LD. EPCIS 2.0 is de afzonderlijke, aanvullende GS1-standaard voor supply-chain-*events*; die zou je ernaast draaien, gekoppeld via de gedeelde GTIN + serial.

**Hoe krijg ik de machineweergave?**
Voeg `?format=jsonld` toe aan de resolver-URL, of stuur `Accept: application/ld+json`. Beide geven dezelfde Linked-Data-payload terug.

**Is de `@context` stabiel?**
Hij pint schema.org plus het GS1 Web Vocabulary (`gs1.org/voc/`) vast — beide openbare, geversioneerde vocabulaires, zodat consumenten kunnen vertrouwen op de betekenis van de termen.

## Bronnen

- [JSON-LD 1.1 (W3C Recommendation)](https://www.w3.org/TR/json-ld11/)

- [GS1 Web Vocabulary](https://www.gs1.org/voc/)

- [GS1 EPCIS and CBV 2.0](https://www.gs1.org/standards/epcis)

- [schema.org Product](https://schema.org/Product)

- [ESPR — Verordening (EU) 2024/1781](https://eur-lex.europa.eu/eli/reg/2024/1781/oj)

**Start gratis** en maak een DPP die JSON-LD beschikbaar stelt: [app.qr3.app/sign-up](https://app.qr3.app/sign-up)

Dit zijn werkende demo’s met fictieve productgegevens en voorbeeld-GTIN’s uit GS1-prefix 952. Ze bewijzen geen toegewezen productidentificatoren, registratie of certificering.

## Gerelateerde artikelen

- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/gs1-digital-link-resolver/hero.png) Tutorials De GS1 Digital Link Resolver, uitgelegd (met een live voorbeeld) Een DPP-QR-code is geen link naar een webpagina — het is een GS1 Digital Link, en de resolver zet één identifier om in vele contextbewuste antwoorden. Zo werkt het, met een live paspoort dat je nu meteen kunt curlen.](/nl/blog/gs1-digital-link-resolver/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/gs1-resolver-test-suite-dpp-links/hero.png) Tutorials GS1 Resolver Test Suite: DPP-links vóór de livegang betrouwbaar testen De stabiele GS1-testsuite maakt Resolver 1.2 toetsbaar. Zo test u redirects, linksets, CORS, talen en foutgevallen vóór de livegang.](/nl/blog/gs1-resolver-test-suite-dpp-links/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/dpp-battery-passport-2027-20260715/hero.png) Branche-nieuws BatteryPass-Ready start testomgeving voor het digitale batterijpaspoort Het consortium BatteryPass-Ready heeft op 24 juni 2026 een openbare testomgeving voor het digitale batterijpaspoort gestart, met het oog op de EU-verplichting vanaf februari 2027.](/nl/blog/dpp-battery-passport-2027-20260715/)
- [![](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/sector-20260713/hero.png) Branche-nieuws Digitale batterijpas 2027: wat fabrikanten nu moeten weten Webinars, opensourcetools en nieuwe normen: de EU-batterijpas komt op stoom. Een overzicht van de stand van zaken in juli 2026 en de openstaande vragen tot februari 2027.](/nl/blog/sector-20260713/)

[← Alle artikelen](/nl/blog/) [Gratis starten](https://app.qr3.app/sign-up)
