E-Label Standard Format
- Version: 1.1.0
- Status: Proposal
- Published: 2026-09-18
- Machine-readable vocabulary:
https://elabel.glasswise.eu/api/vocab/ - This document:
https://elabel.glasswise.eu/standard
The E-Label Standard Format is versioned with semantic versioning. A change that only adds terms raises the minor version; a change that removes or reinterprets an existing term is breaking and raises the major version. Section 7 defines what counts as additive.
Changelog
- 1.0.0 (2026-09-18): first published version, issued as a proposal.
- Corrections to legal references, 2026-09-18.
- 1.1.0 (2026-09-19): adds two terms and changes nothing else. Organizations may carry
url, their website.gw:ingredientsDisplayTextcarries the ingredient list exactly as the label renders it, grouped by category, with allergen names in a...pair, the one markup the Standard allows in that string.gw:ingredientsTextandgs1:ingredientStatementkeep their plain form and are unchanged. One existing value does change shape: organizationurlvalues are now normalized before publication, so a bare host is published ashttps://...and a value that is not an absolute http(s) URL is dropped rather than published verbatim.
1. Purpose
This document specifies the JSON-LD document that a Glasswise e-label publishes about the product the label describes. The document exists so that a machine consumer can read everything the e-label shows on screen without scraping HTML: legal particulars, nutrition, ingredients and allergens, packaging and recycling information, certifications, operators, and the label's own translated texts.
The document is designed for three audiences at once:
- generic structured-data consumers, which read the schema.org terms,
- GS1-aware supply-chain consumers, which read the GS1 Web Vocabulary terms,
- e-label-specific consumers such as e-label Atlas, which read the whole document including the
gw:extension terms.
Every e-label publishes the document embedded in its HTML page as a script element of type application/ld+json.
2. The document
2.1 Shape
The document is a single JSON-LD object of @type Product. One e-label page publishes exactly one such document per language. There are no nested product documents and no language maps: all human-readable values in the document are strings in the page's language (see section 4).
2.2 Context
"@context": {
"@vocab": "https://schema.org/",
"gw": "https://elabel.glasswise.eu/api/vocab/",
"gs1": "https://ref.gs1.org/voc/",
"gtin14": "gtin14",
"image": {
"@id": "image",
"@type": "@id"
}
}
@vocabbinds unprefixed terms to schema.org.gwbinds thegw:prefix to the Glasswise vocabulary, served as JSON-LD fromhttps://elabel.glasswise.eu/api/vocab/. The vocabulary defines everygw:term this document may carry, and records the source vocabulary of each term.gs1binds thegs1:prefix to the GS1 Web Vocabulary.gtin14is a plain string identifier used aspropertyIDinsideidentifierentries, matching the schema.org convention of exposing GTINs asPropertyValueentries.imageis declared as@type: @idso the value is a URL reference rather than an embedded image object.
2.3 Identity
The product is identified by:
@id: the product's GS1 Digital Link URL when one exists (for examplehttps://glws.eu/01/09120013397797/22/2025), otherwise the e-label page URL (https://elabel.glasswise.eu/l/{ref}). The Digital Link form encodes the GTIN and any qualifier application identifiers in the path.identifier: an array ofPropertyValueentries:propertyID: "glasswise-ref": the short reference that appears in the e-label URL. Always present.propertyID: "gtin14": the product's GTIN-14. Present when the label carries a GTIN.
2.4 GTIN qualifiers
When present, the GTIN qualifier application identifiers from the label's Digital Link are published as top-level properties:
| Term | Type | Required | Example | Meaning |
|---|---|---|---|---|
gs1:consumerProductVariant | Text | no | "2025" | Consumer product variant, GS1 application identifier 22. |
gs1:hasBatchLotNumber | Text | no | "L2412" | Batch or lot number, GS1 application identifier 10. |
3. Vocabularies and term sources
Terms are drawn from three vocabularies, in a fixed order of preference:
- schema.org first. If a schema.org term genuinely fits, it is used.
- GS1 Web Vocabulary (
gs1:) second. Where GS1 defines a term that schema.org lacks, it is reused, especially for allergens, nutrients, ingredients, packaging and trade-item identifiers. gw:terms only when neither vocabulary has a term that genuinely fits. Agw:term is minted rather than forcing a value into a term whose semantics or code list does not match.
The published vocabulary at https://elabel.glasswise.eu/api/vocab/ defines every gw: term with label, comment, domain and range, records the source of each term, and lists the GS1 terms the document reuses. A consistency test in the repository fails if the emitter ever produces a gw: or gs1: term the vocabulary does not record, so the vocabulary and the emitted documents cannot drift apart.
The vocabulary URL and every gw: term URL are dereferenceable. A client asking for application/ld+json receives the vocabulary, or the single term's definition; a browser is redirected to the term index at https://elabel.glasswise.eu/standard.
GS1 code list values are emitted as node references whose @id is the code's URI in the GS1 vocabulary, for example {"@id": "gs1:SweetnessLevelOfAlcoholicBeverageCode-DRY"}.
4. Languages
One document exists per language, never a multilingual merged document.
- Every human-readable text value is exactly the string the e-label displays in that language. Nothing is invented, summarised or machine-translated for the document.
inLanguagenames the language of the document's text values. It is the locale of the resolved translation when one exists, otherwise the label's own default locale.- When a translated field has no value in the requested language, the document applies the same fallback the page renders: the label's default-locale translation where the page uses one (designation of origin), otherwise the field is absent.
- Fields the winemaker has switched off for display are not published. The document follows the same visibility switches as the rendered label (
show_product_type,show_inspection_number,show_allergen_text,show_sweetness,show_quantity), so the document never claims a particular the label does not show.
5. Term reference
"Required" in these tables means the term is present on every document. Everything else appears only when the underlying data exists and its display switch is on. Text values are in the document language (section 4); code values are stable across languages.
5.1 Product identity
| Term | Source | Type | Required | Example | Notes and regulation |
|---|---|---|---|---|---|
@type | schema.org | "Product" | yes | "Product" | The document describes the traded product itself. |
@id | JSON-LD | URL | yes | https://glws.eu/01/09120013397797/22/2025 | GS1 Digital Link when present, else the e-label URL. |
identifier | schema.org | PropertyValue[] | yes | see 2.3 | glasswise-ref always; gtin14 when a GTIN exists. |
name | schema.org | Text | yes | "Grüner Veltliner Smaragd" | Combined name lines as displayed. |
inLanguage | schema.org | Text | yes | "de" | Language of all text values in the document. |
image | schema.org | URL | no | https://.../files/abc | The product image shown on the label. |
countryOfOrigin | schema.org | Country | no | {"@type":"Country","name":"Austria","gs1:countryCode":"AT"} | Translated country name plus ISO 3166-1 alpha-2 code via gs1:countryCode. Serves the origin particulars of Regulation (EU) 2019/33 Article 45 and Regulation (EU) 1169/2011 Article 26. |
gw:productType | gw | Text (code) | no | "quality_wine" | Regulated product category code, shown when show_product_type is on. |
5.2 Organizations
Each organization is a schema.org Organization with name, optional logo, optional address (PostalAddress with streetAddress, postalCode, addressLocality, addressCountry), and optional gw:producerIdentificationNumber. An organization may also carry url, its website: on the producer brand, the bottler and the distributor that is the organization's own site. On the two PPWR roles url serves as the electronic means of communication instead, and exactly one of email and url is set.
| Term | Source | Type | Required | Notes and regulation |
|---|---|---|---|---|
brand | schema.org | Organization | no | The producer. Also carries gw:imprint. |
gw:bottler | gw | Organization | no | Regulation (EU) 2019/33 Article 46 name and address. |
gw:distributor | gw | Organization | no | Regulation (EU) 2019/33 Article 46 name and address. |
gw:ppwrManufacturer | gw | Organization | no | Regulation (EU) 2025/40 Article 15(6): name, postal address and electronic means of communication. |
gw:ppwrImporter | gw | Organization | no | Regulation (EU) 2025/40 Article 18(3): name, postal address and electronic means of communication. |
gw:producerIdentificationNumber | gw | Text | no | Official producer identification number on the organization. |
gw:imprint | gw | Text | no | The legal imprint text, on brand only. |
url | schema.org | URL | no | The organization's website. On the PPWR roles it is instead the electronic means of communication, and exactly one of email and url is set. |
5.3 Nutrition
The nutrition object is a schema.org NutritionInformation on a 100 ml basis, matching the mandatory nutrition declaration of Article 119(1)(h) of Regulation (EU) No 1308/2013, as amended by Regulation (EU) 2021/2117, for wine and Regulation (EU) 1169/2011 for other beverages.
| Term | Source | Type | Required | Example |
|---|---|---|---|---|
servingSize | schema.org | Text | yes | "100 ml" |
calories | schema.org | Text | no | "84 kcal" |
fatContent | schema.org | Text | no | "0 g" |
saturatedFatContent | schema.org | Text | no | "0 g" |
carbohydrateContent | schema.org | Text | no | "2.1 g" |
sugarContent | schema.org | Text | no | "2.1 g" |
proteinContent | schema.org | Text | no | "0.1 g" |
sodiumContent | schema.org | Text | no | "0.2 g" |
gw:saltContent | gw | Text | no | "0.5 g" |
5.4 Wine properties
The gw:wineProperties object is a gw:WineSpecification. These terms predate the GS1 review and are retained unchanged; new consumers should read gs1:netContent and gs1:sweetnessLevelOfAlcoholicBeverage alongside them.
| Term | Source | Type | Required | Example | Notes |
|---|---|---|---|---|---|
gw:vintage | gw | Text | no | "2022" | Harvest year. |
gw:isNonVintage | gw | Boolean | no | false | Non-vintage blend flag. |
gw:color | gw | Text | no | "white" | Wine colour category. |
gw:quantity | gw | Number | no | 750 | Net content in millilitres. |
gw:alcoholContent | gw | Number | no | 13.5 | Measured alcohol, % vol. |
gw:alcoholLabel | gw | Number | no | 13.5 | Declared alcohol, % vol. Regulation (EU) 2019/33 Article 44. |
gw:residualSugar | gw | Number | no | 2.1 | g/l. |
gw:acidity | gw | Number | no | 6.8 | Total acidity, g/l. |
gw:packagingGas | gw | Text (code) | no | "protective_atmosphere" | Protective atmosphere declaration, Regulation (EU) 1169/2011 Annex III, point 1.1. |
gw:energyKJ | gw | Number | no | 350 | Energy per 100 ml in kJ. |
gw:sweetness | gw | Text (code) | no | "dry" | brut, dry, semi_dry, semi_sweet, sweet. |
Product-level equivalents added under the GS1-first rule:
| Term | Source | Type | Required | Example | Notes |
|---|---|---|---|---|---|
gs1:netContent | gs1 | gs1:QuantitativeValue | no | {"gs1:value":750,"gs1:unitCode":"MLT"} | The net content shown in the facts bar, honouring show_quantity and the resolved format quantity. |
gs1:sweetnessLevelOfAlcoholicBeverage | gs1 | code @id | no | "gs1:SweetnessLevelOfAlcoholicBeverageCode-DRY" | Emitted only when the label shows sweetness (show_sweetness). Mapping: brut→BRUT, dry→DRY, semi_dry→MEDIUM_DRY, semi_sweet→MEDIUM, sweet→SWEET. |
gs1:alcoholicBeverageSubregion | gs1 | Text | no | "Wachau DAC" | The designation of origin: the legally defined region the label shows, the protected designation name particular of Article 119(1)(b) of Regulation (EU) No 1308/2013. |
gw:singleVineyard | gw | Text | no | "Ried Kellerberg" | Single vineyard (Einzellage/Ried) name. No schema.org or GS1 term exists. |
gs1:bestBeforeDate | gs1 | Date | no | "2032-05-01" | Minimum durability date, Article 119(1)(j) of Regulation (EU) No 1308/2013, as amended by Regulation (EU) 2021/2117. |
gw:inspectionNumber | gw | Text | no | "L1234 22" | Official inspection or control number, shown when show_inspection_number is on. |
gw:grapeVarieties | gw | gw:GrapeVariety[] | no | see example | Each entry has name (translated variety) and optional gw:percentage (blend share). |
5.5 Ingredients and allergens
Structured ingredients are published twice, once per vocabulary, carrying the same facts:
recipeIngredient(schema.org): the original list ofgw:WineIngrediententries withname,gw:isOrganic,gw:isAllergenandgw:category. Unchanged for existing consumers.gs1:ingredient:gs1:FoodBeverageTobaccoIngredientDetailsentries withgs1:ingredientName(translated name, including the organic name when the label shows one) andgs1:ingredientSequence(position in the list).
gw:ingredientsText and gs1:ingredientStatement carry the ingredient names as one plain comma-joined string and keep that form unchanged. gw:ingredientsDisplayText, added in 1.1.0, carries the list exactly as the label renders it: ingredients of a grouped category appear behind the category name, a comma separates ingredients inside a group, and a semicolon separates the entries. One markup is allowed in this string: a name wrapped in a strict ... pair marks an allergen, carrying into plain text the emphasis that Regulation (EU) 1169/2011 Annex II requires for allergens. A single * is the organic marker and stays a literal asterisk. No other markup is interpreted; consumers that render the text should show a name pair as emphasis and escape everything else.
| Term | Source | Type | Required | Example | Notes and regulation |
|---|---|---|---|---|---|
gw:ingredientsText | gw | Text | no | "Grüner Veltliner grapes, sulfites" | The rendered ingredient list. Retained; identical value to gs1:ingredientStatement. |
gw:ingredientsDisplayText | gw | Text | no | "Grape: Grüner Veltliner grapes*; Preservative: Sulfites" | The rendered ingredient list with the markup described above. A category with one entry uses its singular name. Added in 1.1.0. |
gs1:ingredientStatement | gs1 | Text | no | same | The ingredient list as one string, Article 119(1)(i) of Regulation (EU) No 1308/2013, as amended by Regulation (EU) 2021/2117. |
gs1:ingredientOfConcern | gs1 | Text[] | no | ["Sulfites"] | Names of the ingredients flagged as allergens, Regulation (EU) 1169/2011 Annex II. |
gs1:allergenStatement | gs1 | Text | no | "Contains sulfites" | The free-text allergen statement the label shows, only when the account feature and label switch are on. |
5.6 Packaging
gs1:packaging carries one gs1:PackagingDetails entry per packaging component the label lists (bottle, capsule, closure, carton and so on). This serves the packaging information duties of Regulation (EU) 2025/40 and the material identification marking of Commission Decision 97/129/EC.
| Term | Source | Type | Required | Example | Notes |
|---|---|---|---|---|---|
gs1:packaging | gs1 | gs1:PackagingDetails[] | no | see example | One entry per component. |
gs1:packagingType | gs1 | Text | no | "bottle" | The component type code. |
gw:collection | gw | Text (code) | no | "glass" | The separate waste-collection stream: aluminium, glass, metal, organic, paper, plastic, separate_organic, specific. No GS1 term covers the collection stream. |
gs1:packagingMaterial | gs1 | gs1:PackagingMaterialDetails | no | see example | The component's material. |
name | schema.org | Text | no | "Glass" | Translated material name inside the material details. |
gs1:packagingMaterialType | gs1 | code @id | no | "gs1:PackagingMaterialTypeCode-GLASS" | Emitted when the material type maps onto GS1's code list: glass→GLASS, glass_composites→COMPOSITE, metals→METAL_OTHER, paper→PAPER_OTHER, paper_composites→COMPOSITE, plastic→PLASTIC_OTHER, plastic_composites→COMPOSITE, wood→WOOD_OTHER, other→OTHER. |
gw:materialType | gw | Text (code) | no | "glass" | The source material type code, kept for the types GS1's list does not cover (batteries, biodegradable). |
gw:recyclingCode | gw | Text | no | "GL 71" | The Commission Decision 97/129/EC identification code printed on the component. |
5.7 Certifications and referenced documents
| Term | Source | Type | Required | Example | Notes |
|---|---|---|---|---|---|
gs1:certification | gs1 | gs1:CertificationDetails[] | no | see example | One entry per certification the label shows. |
gs1:certificationStandard | gs1 | Text | no | "Bio Austria" | Translated certification name. |
gs1:certificationIdentification | gs1 | Text | no | "AT-BIO-301" | The code number of the control authority or control body under Article 32(1)(a) of Regulation (EU) 2018/848, attached to the organic entry or emitted as an identification-only entry. |
gw:certificateType | gw | Text (code) | no | "organic" | The certification category: organic, sustainability, geographical, responsible_consumption, certifications, recycling. |
image | schema.org | URL | no | https://.../files/xyz | The certification logo image. |
gs1:referencedFile | gs1 | gs1:ReferencedFileDetails[] | no | see example | Every uploaded EU declaration of conformity language, Regulation (EU) 2025/40 Article 39. Each entry carries gs1:referencedFileURL, gs1:fileLanguageCode and gs1:referencedFileType set to gs1:ReferencedFileTypeCode-DECLARATION_OF_CONFORMITY. |
5.8 Label messages and geo content
The e-label lets a producer show free-text messages on defined topics. The gw:messages object, a gw:LabelMessages, carries them; each is present only when the translated text exists in the document language.
| Term | Source | Type | Required | Example |
|---|---|---|---|---|
gw:messages | gw | gw:LabelMessages | no | see example |
gw:sustainabilityMessage | gw | Text | no | "Sustainably farmed since 1998" |
gw:organicMessage | gw | Text | no | "Certified organic by Bio Austria" |
gw:certificationsMessage | gw | Text | no | "See our certificates below" |
gw:geographicalMessage | gw | Text | no | "From the Wachau valley" |
gw:responsibleConsumptionMessage | gw | Text | no | "Please enjoy responsibly" |
gw:recyclingMessage | gw | Text | no | "Recycle glass, cork and capsule separately" |
gw:foodPairingMessage | gw | Text | no | "Pairs with river fish" |
gw:productionMethodMessage | gw | Text | no | "Spontaneous fermentation in large oak" |
gw:geoContent carries the country-conditional information blocks the page showed to this visitor (for example a deposit notice that applies only in one market). Each gw:GeoContent entry has an optional name (the block title) and a description (the block text). The country a block applies to is a property of the request that served the page, not of the label, so the document records the blocks it showed without repeating the targeting rule.
5.9 Dealcoholisation
The particulars for dealcoholised grapevine products live in Article 119(1) of Regulation (EU) No 1308/2013: Regulation (EU) 2021/2117 added the de-alcoholisation category terms and the minimum durability date, and Regulation (EU) 2026/471 adds the "produced by de-alcoholisation" particular and the "alcohol-free" and "reduced alcohol" terms, applicable from 19 September 2027. Neither schema.org nor GS1 covers them.
| Term | Source | Type | Required | Example | Notes |
|---|---|---|---|---|---|
gw:dealcoholisationApplied | gw | Boolean | no | true | A de-alcoholisation treatment was applied. Drives the "produced by de-alcoholisation" particular, Article 119(1)(k) of Regulation (EU) No 1308/2013, as amended by Regulation (EU) 2026/471. |
gw:dealcoholisationStatus | gw | Text (code) | no | "de_alcoholised" | Category term, Article 119(1)(a) of Regulation (EU) No 1308/2013, as amended by Regulations (EU) 2021/2117 and 2026/471: de_alcoholised, partially_de_alcoholised, alcohol_free, reduced_alcohol. |
6. Complete example
{
"@context": {
"@vocab": "https://schema.org/",
"gw": "https://elabel.glasswise.eu/api/vocab/",
"gs1": "https://ref.gs1.org/voc/",
"gtin14": "gtin14",
"image": {
"@id": "image",
"@type": "@id"
}
},
"@type": "Product",
"@id": "https://glws.eu/01/09120013397797/22/2025",
"identifier": [
{
"@type": "PropertyValue",
"propertyID": "glasswise-ref",
"value": "ItW5C2WenG"
},
{
"@type": "PropertyValue",
"propertyID": "gtin14",
"value": "09120013397797"
}
],
"name": "Grüner Veltliner Smaragd",
"inLanguage": "en",
"image": "https://storage.example.com/files/image123",
"countryOfOrigin": {
"@type": "Country",
"name": "Austria",
"gs1:countryCode": "AT"
},
"brand": {
"@type": "Organization",
"name": "Weingut",
"logo": "https://storage.example.com/files/logo456",
"address": {
"@type": "PostalAddress",
"streetAddress": "Wachau 1",
"postalCode": "3601",
"addressLocality": "Dürnstein",
"addressCountry": "Austria"
},
"url": "https://weingut.example.com",
"gw:producerIdentificationNumber": "AT123456789",
"gw:imprint": "Weingut GmbH, Wachau 1, 3601 Dürnstein, Austria"
},
"gw:bottler": {
"@type": "Organization",
"name": "Weingut",
"address": {
"@type": "PostalAddress",
"streetAddress": "Wachau 1",
"postalCode": "3601",
"addressLocality": "Dürnstein",
"addressCountry": "Austria"
},
"gw:producerIdentificationNumber": "AT123456789"
},
"gw:ppwrManufacturer": {
"@type": "Organization",
"name": "Glaswerke AG",
"address": {
"@type": "PostalAddress",
"streetAddress": "Werkstrasse 4",
"postalCode": "4020",
"addressLocality": "Linz",
"addressCountry": "Austria"
},
"url": "https://glaswerke.example.com"
},
"nutrition": {
"@type": "NutritionInformation",
"servingSize": "100 ml",
"calories": "84 kcal",
"fatContent": "0 g",
"saturatedFatContent": "0 g",
"carbohydrateContent": "2.1 g",
"sugarContent": "2.1 g",
"proteinContent": "0.1 g",
"sodiumContent": "0.2 g",
"gw:saltContent": "0.5 g"
},
"gw:wineProperties": {
"@type": "gw:WineSpecification",
"gw:vintage": "2022",
"gw:color": "white",
"gw:isNonVintage": false,
"gw:quantity": 750,
"gw:alcoholContent": 13.5,
"gw:alcoholLabel": 13.5,
"gw:residualSugar": 2.1,
"gw:acidity": 6.8,
"gw:packagingGas": "protective_atmosphere",
"gw:energyKJ": 350,
"gw:sweetness": "dry"
},
"recipeIngredient": [
{
"@type": "gw:WineIngredient",
"name": "Grüner Veltliner grapes",
"gw:isOrganic": true,
"gw:isAllergen": false,
"gw:category": "Grapes"
},
{
"@type": "gw:WineIngredient",
"name": "Sulfites",
"gw:isOrganic": false,
"gw:isAllergen": true,
"gw:category": "Preservatives"
}
],
"gw:ingredientsText": "Grüner Veltliner grapes, sulfites",
"gw:ingredientsDisplayText": "Grape: Grüner Veltliner grapes*; Preservative: **Sulfites**",
"gs1:ingredient": [
{
"@type": "gs1:FoodBeverageTobaccoIngredientDetails",
"gs1:ingredientName": "Grüner Veltliner grapes",
"gs1:ingredientSequence": 1
},
{
"@type": "gs1:FoodBeverageTobaccoIngredientDetails",
"gs1:ingredientName": "Sulfites",
"gs1:ingredientSequence": 2
}
],
"gs1:ingredientStatement": "Grüner Veltliner grapes, sulfites",
"gs1:ingredientOfConcern": ["Sulfites"],
"gs1:allergenStatement": "Contains sulfites",
"gs1:consumerProductVariant": "2025",
"gs1:hasBatchLotNumber": "L2412",
"gs1:bestBeforeDate": "2032-05-01",
"gs1:netContent": {
"@type": "gs1:QuantitativeValue",
"gs1:value": 750,
"gs1:unitCode": "MLT"
},
"gs1:sweetnessLevelOfAlcoholicBeverage": {
"@id": "gs1:SweetnessLevelOfAlcoholicBeverageCode-DRY"
},
"gs1:alcoholicBeverageSubregion": "Wachau DAC",
"gw:singleVineyard": "Ried Kellerberg",
"gw:grapeVarieties": [
{
"@type": "gw:GrapeVariety",
"name": "Grüner Veltliner",
"gw:percentage": 100
}
],
"gw:productType": "quality_wine",
"gw:inspectionNumber": "L1234 22",
"gw:dealcoholisationApplied": false,
"gs1:packaging": [
{
"@type": "gs1:PackagingDetails",
"gs1:packagingType": "bottle",
"gw:collection": "glass",
"gs1:packagingMaterial": {
"@type": "gs1:PackagingMaterialDetails",
"name": "Glass",
"gs1:packagingMaterialType": {
"@id": "gs1:PackagingMaterialTypeCode-GLASS"
},
"gw:materialType": "glass",
"gw:recyclingCode": "GL 71"
}
}
],
"gs1:certification": [
{
"@type": "gs1:CertificationDetails",
"gs1:certificationStandard": "Bio Austria",
"gs1:certificationIdentification": "AT-BIO-301",
"gw:certificateType": "organic",
"image": "https://storage.example.com/files/cert789"
}
],
"gs1:referencedFile": [
{
"@type": "gs1:ReferencedFileDetails",
"gs1:referencedFileURL": "https://storage.example.com/files/doc-de",
"gs1:fileLanguageCode": "de",
"gs1:referencedFileType": {
"@id": "gs1:ReferencedFileTypeCode-DECLARATION_OF_CONFORMITY"
}
},
{
"@type": "gs1:ReferencedFileDetails",
"gs1:referencedFileURL": "https://storage.example.com/files/doc-en",
"gs1:fileLanguageCode": "en",
"gs1:referencedFileType": {
"@id": "gs1:ReferencedFileTypeCode-DECLARATION_OF_CONFORMITY"
}
}
],
"gw:messages": {
"@type": "gw:LabelMessages",
"gw:sustainabilityMessage": "Sustainably farmed since 1998",
"gw:productionMethodMessage": "Spontaneous fermentation in large oak"
},
"gw:geoContent": [
{
"@type": "gw:GeoContent",
"name": "Pfand",
"description": "Return the crate to your dealer"
}
]
}
7. Versioning and compatibility
The compatibility rule is additive-only:
- existing terms, meanings and value shapes never change or move,
- new terms may be added in any release,
- a term may only be removed or repurposed by a major version change, which would also change the vocabulary URL or the document's context.
The standard is versioned with semantic versioning, currently at version 1.1.0. An additive change raises the minor version; a breaking change raises the major version. The version is recorded on the published vocabulary as owl:versionInfo. Published e-label documents carry no version field, so consumers should treat any term not listed here as a forward-compatible addition.
8. Relationship to GS1
GS1 and this standard cover different sides of the same scan.
GS1 identifies the product. The GTIN, the qualifier application identifiers and the GS1 Digital Link URL say which trade item a code resolves to. This standard describes what is on the label the link leads to: the particulars, texts and statements a consumer or an authority reads there. The two compose naturally: the document's @id is the GS1 Digital Link, and the GTIN and its qualifiers appear as identifiers and properties of the product.
The document reuses individual GS1 Web Vocabulary terms where they genuinely fit, per the order schema.org, then GS1, then gw::
- trade item identifiers:
gs1:consumerProductVariant,gs1:hasBatchLotNumber,gs1:bestBeforeDate,gs1:countryCode, - ingredients and allergens:
gs1:ingredient,gs1:ingredientStatement,gs1:ingredientOfConcern,gs1:allergenStatement, - beverage particulars:
gs1:alcoholicBeverageSubregion,gs1:sweetnessLevelOfAlcoholicBeverage,gs1:netContent, - packaging:
gs1:packaging,gs1:packagingType,gs1:packagingMaterial,gs1:packagingMaterialType, - certifications and files:
gs1:certification,gs1:certificationStandard,gs1:certificationIdentification,gs1:referencedFile,gs1:referencedFileURL,gs1:fileLanguageCode,gs1:referencedFileType.
GS1 also publishes an e-label schema. This standard does not adopt its document structure or data model. The differences are deliberate design choices, listed here factually:
- Structure. This document is one flat
Productobject per e-label page, so a consumer can read it with any JSON-LD parser and no knowledge of a profile. GS1's e-label schema models a more deeply structured document. - Languages. This standard publishes one document per language, with every text value already resolved to exactly the string the label shows in that language. A consumer never resolves translations or language maps itself.
- Openness. The document and its vocabulary are published openly on the e-label domain, with no membership or registry lookup required to read or extend it.
Reusing well-defined GS1 terms inside a different document shape keeps vocabulary-level interoperability without importing a document model built for a different purpose.