JSON-LD a digitális termékútlevelekhez (és hol illeszkedik az EPCIS 2.0)

A DPP csak akkor hasznos a gépek számára, ha gépileg olvasható. Ez az útmutató bemutatja a valódi JSON-LD-t, amelyet egy qr3 útlevél tesz közzé az élő resolveren keresztül, hogyan szolgál ki egyetlen URL egyszerre embereket és gépeket a tartalom-egyeztetés (content negotiation) révén, és hol illeszkedik a kiegészítő EPCIS 2.0 eseményszabvány.

szerző: QR3 Redaktion

JSON-LD a digitális termékútlevelekhez (és hol illeszkedik az EPCIS 2.0)

A digitális termékútlevél célja, hogy emberek és gépek egyaránt olvashassák: egy újrahasznosító üzem átvételi rendszere, egy vámügyi API, egy piactér-feltérképező robot, egy fenntarthatósági auditor szkriptje. Egy kizárólag emberek számára készült HTML-oldal nem elegendő. Az útlevélnek gépileg olvashatónak kell lennie — strukturált adatcsomagnak, amelyet egy program scraping nélkül képes feldolgozni, összekapcsolni és értelmezni.

Ez az útmutató azoknak a fejlesztőknek szól, akik a kézenfekvő következő kérdést teszik fel: ha már megvan a DPP-m, hogyan olvassa azt el ténylegesen egy gép? A válasz a qr3 esetében a nyilvános resolveren keresztül szolgáltatott JSON-LD. Megmutatjuk a valódi választ, elmagyarázzuk, hogyan szolgál ki ugyanaz az URL embereket és gépeket, majd kontextusba helyezzük az EPCIS 2.0-t — a kiegészítő GS1 eseményszabványt.

Mit jelent a gépi olvashatóság egy DPP esetében

A gépi olvashatóság több, mint hogy „JSON-t ad vissza". Egy termékútlevél esetében három dolgot jelent:

  • Strukturált — olyan mezők, amelyeket egy értelmező közvetlenül megcímezhet (gtin, name, …), nem pedig kinyerendő próza.
  • Tipizált és összekapcsolt — a fogalmak közös szótárakhoz vannak rögzítve, így a Product mindenki számára ugyanazt jelenti. Ez a Linked Data a JSON-LD-ben.
  • Stabilan lekérhető — egyetlen tartós URL elemenként, amelyet egy szkript a termék teljes élettartama alatt GET-tel lekérhet.

A JSON-LD (JSON for Linking Data) mindhármat biztosítja. Ez közönséges JSON, kiegészítve egy @context-tel, amely minden kulcsot egy nyilvános szótár fogalmához rendel — itt a schema.org-hoz és a GS1 Web Vocabulary-hoz. Egy feltérképező robot, amely már érti a schema.org-ot, mindenféle egyedi integráció nélkül megérti az útlevelet.

A DPP mint JSON-LD (valódi curl + ellenőrzött válasz)

Minden qr3 útlevél egy GS1 Digital Link URL-en érhető el: https://qr3.app/dpp/{gtin}/{serial}. A ?format=jsonld hozzáadásával kérheted a Linked Data nézetet. Az élő akkumulátor-demón:

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

a következőt adja vissza:

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

Három dolgot érdemes megjegyezni:

  • A @context egy tömb, amely két szótárat tartalmaz — a schema.org-ot az általános webhez, és a gs1.org/voc/-ot a GS1 termékfogalmaihoz. A kulcsok mindkettő alapján feloldhatók.
  • A @type: "Product" bármely Linked Data fogyasztó számára pontosan megmondja, milyen típusú entitásról van szó.
  • Az értékek (gtin, name) valódiak és élők — ez a tényleges adatcsomag, nem egy minta.

Pontosan ez a lényeg: egy újrahasznosító üzem szkriptjének nincs szüksége qr3-specifikus kliensre. Végrehajt egy HTTP GET-et, feldolgozza az általa már ismert JSON-LD-t, és közvetlenül kiolvassa a GTIN-t és a terméknevet.

Egy URL, két közönség: tartalom-egyeztetés

Ugyanaz a https://qr3.app/dpp/{gtin}/{serial} URL egyszerre szolgál ki egy ember számára barátságos HTML-útlevelet és a gépi nézetet — a szerver dönti el, mit ad vissza aszerint, hogy mit kér a hívó fél. Kétféleképpen kérheted:

Amit szeretnél Lekérdezési paraméter Vagy Accept fejléc
Ember számára olvasható HTML-oldal (alapértelmezett) Accept: text/html
JSON-LD (Linked Data) ?format=jsonld Accept: application/ld+json
Egyszerű JSON ?format=json
Linkset (kapcsolódó erőforrások) ?format=linkset
DCAT-AP (adatkészlet-metaadatok) ?format=dcat-ap

Így egy telefonkamera, amely megnyitja a QR-kódot, az olvasható HTML-útlevélen köt ki, miközben egy szkript az azonos URL-től application/ld+json formátumot kér, és strukturált adatokat kap:

# Gépi nézet fejléc-egyeztetéssel — ugyanaz az URL, lekérdezési karakterlánc nélkül
curl -s -H "Accept: application/ld+json" \
  "https://qr3.app/dpp/04019999999902/DEMO-BAT-01"

Egy azonosító, egy URL, sokféle reprezentáció. A GTIN/serial stabil marad; a nézet alkalmazkodik a hívó félhez. Pontosan ettől lesz egy DPP egyszerre tartós és interoperábilis.

Hol illeszkedik az EPCIS 2.0 (események kontra útlevél)

Gyakori következő kérdés: mi a helyzet az EPCIS-szel — nem az a GS1 szabvány erre? Fontos megkülönböztetés:

  • A DPP egyetlen termékelem statikus leírása — annak azonossága, anyagai, szénlábnyoma, újrahasznosíthatósága. Arra a kérdésre válaszol, hogy „mi ez a dolog?" A fenti JSON-LD ez a pillanatkép.
  • Az EPCIS 2.0 a GS1 szabványa az ellátási lánc eseményeire — a láthatósági adatokra arról, hogy mi történt, hol, mikor és miért: egy elemet legyártottak, kiszállítottak, átvettek, újrahasznosítottak. Arra a kérdésre válaszol, hogy „mi történt ezzel a dologgal, és hol van?"

Ezek kiegészítik egymást, nem versenyeznek. Az útlevél elárulja, hogy a termék egy 5,2 kWh-s akkumulátor 35% újrahasznosított tartalommal; egy EPCIS eseménynapló pedig azt, hogy egy adott napon Hamburgban gyártották, egy elosztóközponton keresztül szállították, és megérkezett egy újrahasznosítóhoz. Maga az EPCIS 2.0 JSON/JSON-LD-barát, így a kettő ugyanazt a Linked Data világképet és ugyanazokat a GS1 azonosítókat (GTIN + serial) használja összekapcsolási kulcsként.

qr3 hatókör (legyünk pontosak): a qr3 a DPP-t JSON-LD formátumban teszi közzé — ezt mutatja be ez a bejegyzés. A qr3 nem biztosít EPCIS eseményrögzítést vagy EPCIS végpontokat. Az EPCIS 2.0-t itt fogalmi, kiegészítő szabványként kezeld, amelyet a DPP mellett vezetnél be a teljes ellátásilánc-nyomonkövetéshez, nem pedig qr3 funkcióként.

A gondolati modell tehát a következő: a DPP (qr3, JSON-LD) a termék azonossági adatlapja; az EPCIS 2.0 (külön rendszer) a termék útinaplója. Ugyanazok az azonosítók, két megválaszolt kérdés.

JSON-LD-t közzétevő DPP létrehozása

Semmi különöset nem kell tenned a JSON-LD „engedélyezéséhez" — hozd létre az útlevelet, és a resolver minden reprezentációt automatikusan kiszolgál:

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

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

const passport = await client.dpp.create({
  gtin: "04019999999902",
  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,
  },
});

// Az útlevél most a https://qr3.app/dpp/04019999999902/SN-00012345 címen érhető el
// Az emberek HTML-t kapnak; a gépek a ?format=jsonld-t fűzik hozzá (vagy Accept: application/ld+json fejlécet küldenek).
console.log(passport.qr.svg); // A QR a resolverhez vezető GS1 Digital Linket kódolja

A létrehozás után az elem URL-je azonnal mindkét közönséget kiszolgálja — nincs szükség külön közzétételi lépésre a gépi nézethez.

GYIK

Miért JSON-LD és nem egyszerű JSON? Az egyszerű JSON strukturált, de nem önleíró: a fogyasztónak meg kell tanulnia a mezőneveidet. A JSON-LD hozzáadja az @context-et, amely minden kulcsot a schema.org / GS1 fogalmaihoz rendel, így bármely Linked Data fogyasztó megérti egyedi integráció nélkül. Ha csak gyors beolvasásra van szükséged, a ?format=json továbbra is elérhető.

Megvalósítja a qr3 az EPCIS 2.0-t? Nem. A qr3 a DPP-t JSON-LD formátumban teszi közzé. Az EPCIS 2.0 a külön, kiegészítő GS1 szabvány az ellátási lánc eseményeire; ezt mellette futtatnád, a közös GTIN + serial alapján összekapcsolva.

Hogyan kapom meg a gépi nézetet? Fűzd hozzá a ?format=jsonld-t a resolver URL-jéhez, vagy küldj Accept: application/ld+json fejlécet. Mindkettő ugyanazt a Linked Data adatcsomagot adja vissza.

Stabil az @context? A schema.org-ot és a GS1 Web Vocabularyt (gs1.org/voc/) rögzíti — mindkettő nyilvános, verziózott szótár, így a fogyasztók megbízhatnak a fogalmak jelentésében.

Források

Kezdd el ingyen, és hozz létre egy JSON-LD-t közzétevő DPP-t: app.qr3.app/sign-up