条形码不是产品。 prodid 才是。
为每一件实体产品提供永久、开放的标识符。每个条形码和零件号都解析到它,关于它的每条信息都注明说出这条信息的来源。
规范只以英文发布,以英文文本为准。
Item · Acme
Trail Jacket
海军蓝 · M · 在 TR, DE 销售
- material100% recycled polyester✓ acme.example
- weight480 g✓ acme.example
- nameAcme Trail Jacket, navy, Mlapsed · shop.example
问题
四个代码,一件夹克,彼此之间毫无关联。
一件产品每进入一个市场、换一种包装规格、改一次包装,就会得到一个新条形码,而它的数据分散在各自不同的系统里。两个系统一旦不一致,其中一个就会被悄悄覆盖。
prodid 为产品本身提供一个标识符,条形码变了,它也不变。
09506000134352
DE 和 TR 的零售单元
另一个 GTIN
同一件夹克的两件装
另一个 GTIN
明年的包装
TJ-2041-NVY-M
制造商零件号
一个变体
9p2d4kv7mq3nbhxf
永不复用,永不删除。曾经指向这里的每个代码都会继续有效。
模型
系列、变体、单品。代码指向它们,但不是它们。
每一层都有自己的 opid:16 个不编码任何信息的字符,所以产品的任何变化都不会让它出错。
family · 3n7k2q9vdfhb4mta
Acme Trail Jacket
人们日常所说的那件产品。
variant · 9p2d4kv7mq3nbhxf
海军蓝 · M 码
颜色、尺码等属性的一种组合。
item · kq7m3v9dn2hb4t5x
DE 和 TR 的零售单元
印着条形码的那个东西。
- gtin09506000134352
- mpnTJ-2041-NVY-M
- skuTJ-2041-NVY-M
新包装会在同一个变体、同一个系列下增加一个带新条形码的新单品。原来指向旧单品的一切都不会失效。
工作方式
在你的域名上发布,prodid 建立索引,任何人都能解析。
01 · 发布
域名上的三样东西
- /.well-known/prodid.json
- /prodid/items.ndjson
- _prodid TXT "v=prodid0; host=…"
一个发现文档、一个每行一件产品的 feed,以及一条证明域名归你所有的 DNS 记录。
如何发布 →02 · 索引
校验、匹配、归属
- 每一行都按 schema 校验
- 匹配到已有的 opid,或分配一个新的
- 每个字段都作为你的域名的声明保存
零售商、注册机构和开放数据集也以同样的方式作为来源:与制造商并列,而不是凌驾于它之上。
声明如何运作 →03 · 解析
印在产品上的一个 URL
prodid.org/01/09506000134352
浏览器 → 一个网页
API → JSON 记录
路径采用 GS1 Digital Link 语法,因此它本身就可以是标签上的二维码。
解析如何运作 →
声明
每条信息都注明来源,分歧始终可见。
没有任何内容会被合并成唯一的“真相”。当一个来源停止发布时,它的声明会被保留并标记为 lapsed,而不是删除。
| 属性 | 值 | 来源 | 可信度 | 可见自 |
|---|---|---|---|---|
| name | Trail Jacket | acme.example | verified | 2026-09-14 |
| brand | Acme | acme.example | verified | 2026-09-14 |
| material | 100% recycled polyester | acme.example | verified | 2026-09-14 |
| weight | 480 g | acme.example | verified | 2026-09-14 |
| media | image · CC-BY-4.0 | acme.example | verified | 2026-09-14 |
| markets | TR, DE | acme.example | verified | 2026-09-14 |
| name | Acme Trail Jacket, navy, M | shop.example | unverified · lapsed | 2026-08-02 |
- authoritative
- 控制该域名,并已确认为品牌所有者。
- verified
- 已通过 DNS 或自己的网站证明对某个域名的控制。
- unverified
- 没有域名的托管名称、数据集或社区贡献。
GET /01/09506000134352 HTTP/1.1
Host: prodid.org
Accept: application/json
HTTP/1.1 200 OK
Content-Type: application/json
Content-Location: /id/kq7m3v9dn2hb4t5x{
"$type": "org.prodid.entity",
"version": 1,
"opid": "kq7m3v9dn2hb4t5x",
"kind": "item",
"parents": {
"family": "3n7k2q9vdfhb4mta",
"variant": "9p2d4kv7mq3nbhxf"
},
"identifiers": [
{
"scheme": "gtin",
"value": "09506000134352"
},
{
"scheme": "mpn",
"value": "TJ-2041-NVY-M",
"scope": "acme"
},
{
"scheme": "sku",
"value": "TJ-2041-NVY-M",
"scope": "acme.example"
}
],
"claims": [
{
"property": "name",
"value": "Trail Jacket",
"lang": "en",
"source": {
"name": "acme.example",
"trust": "verified",
"lapsed": false
},
"seen_at": "2026-09-14T09:12:03Z"
},
{
"property": "brand",
"value": "Acme",
"source": {
"name": "acme.example",
"trust": "verified",
"lapsed": false
},
"seen_at": "2026-09-14T09:12:03Z"
},
{
"property": "properties.material",
"value": "100% recycled polyester",
"lang": "en",
"source": {
"name": "acme.example",
"trust": "verified",
"lapsed": false
},
"seen_at": "2026-09-14T09:12:03Z"
},
{
"property": "properties.weight",
"value": {
"value": 480,
"unit": "g"
},
"source": {
"name": "acme.example",
"trust": "verified",
"lapsed": false
},
"seen_at": "2026-09-14T09:12:03Z"
},
{
"property": "markets",
"value": "TR",
"source": {
"name": "acme.example",
"trust": "verified",
"lapsed": false
},
"seen_at": "2026-09-14T09:12:03Z"
},
{
"property": "markets",
"value": "DE",
"source": {
"name": "acme.example",
"trust": "verified",
"lapsed": false
},
"seen_at": "2026-09-14T09:12:03Z"
},
{
"property": "name",
"value": "Acme Trail Jacket, navy, M",
"lang": "en",
"source": {
"name": "shop.example",
"trust": "unverified",
"lapsed": true
},
"seen_at": "2026-08-02T17:41:55Z"
},
{
"property": "media",
"value": {
"sha256": "e3943ea26ce08ae81809e62936dc4f934fa04da6cd57bd9ab2a90b79da751c09",
"url": "https://acme.example/img/tj2041-navy.webp",
"media_url": "https://media.prodid.org/sha256/e3943ea26ce08ae81809e62936dc4f934fa04da6cd57bd9ab2a90b79da751c09",
"license": "CC-BY-4.0",
"kind": "image"
},
"source": {
"name": "acme.example",
"trust": "verified",
"lapsed": false
},
"seen_at": "2026-09-14T09:12:03Z"
}
]
}适用对象
产生数据的人,和需要数据的人。
关于欧盟数字产品护照。 ESPR 要求可以通过产品上的数据载体访问护照,而 GS1 Digital Link 是为此正在标准化的载体语法之一。prodid 不是护照服务,在这里发布也不代表符合任何法规;它做的是同样的基础工作:每件产品一条机器可读的记录,放在一个由你控制的稳定地址上。
现状
项目的真实进展。
Spec v1。索引和托管发布服务运行在 prodid.org 上。任何人都可以发布,可以用自己的域名,也可以使用托管。
- 稳定
规范 v1。 它只会以新增的方式变化;其他任何改动都会是 v2。v0 发现文档在 2027-01-26 00:00 UTC 之前仍被接受。阅读规范,并指出哪里有错。
- Canary 和一个数据集
目前还没有任何发布者的目录被索引。 索引中有两个来源:项目自己的 canary canary.prodid.org,用于端到端验证发布、抓取和解析;以及 dataset:wikidata,一次限定为 5 个 Wikidata 条目的测试导入,unverified,采用 CC0-1.0。
- 有意为之
索引是可替换的。 规范、schema、opid 和代码映射都采用 CC0。每条声明都保留其来源的许可。信息存放在发布它们的域名上,所以任何人都可以重新抓取,印好的代码也会保持其含义。
给你的产品一个比条形码更长久的身份。
在你自己的域名上放两个文件和一条 DNS 记录,或者在没有域名的情况下使用托管站点。