Textile DPP Implementation Guide

How to assemble a Textile Digital Product Passport against the published openepcis-dpp-ready textile vocabulary

Overview

This guide walks through assembling a textile DPP that uses only published vocabulary — terms defined in the OpenEPCIS textile ontology and the GS1 Web Vocabulary. It mirrors the canonical reference passport extensions/eu/textile/examples/garment-product.jsonld in the dpp-ready repo.

Conventions. In JSON-LD documents the property names are bare — the JSON-LD context maps them to the right namespace. So you write "textileCategory": "Apparel", not "textile:textileCategory". Likewise the controlled values come out unprefixed once @vocab is set: "fabricType": "WovenNonDenim".

Prerequisites

  • A GS1 Company Prefix and assigned GTINs for the products you'll passport.
  • A resolver that can host the linkset for each Digital Link URL (see Resolver Setup).
  • The textile JSON-LD context: https://ref.openepcis.io/extensions/eu/textile/textile-context.jsonld.

Step 1: Identify the product

Every DPP-relevant article needs a GS1 Digital Link URL. For a serialised garment that's https://id.gs1.org/01/{GTIN}/21/{serial}. The same identifier becomes the id of the passport document and the epcList value in every EPCIS event.

Step 2: Classify the textile

The textile module publishes top-level classifications that the consumer-handling page, the recycler and the customs authority all consume:

  • textileCategory — one of TextileApparel, TextileFootwear, TextileAccessories, HomeTextiles, TechnicalTextiles.
  • apparelSubcategoryTShirts, ShirtsBlouses, JacketsCoats, PantsShorts, DressesSkirts, Sweaters, Underwear, Swimwear, Denim, LeggingsStockingsSocks (only applies when textileCategory is TextileApparel).
  • fabricTypeKnitted, WovenNonDenim, Denim.
  • garmentType, targetGender, sizeRange, seasonCollection — free-text classification fields the vocabulary defines.

Dual-type the document: "type": ["Product", "TextileApparel"] (or TextileFootwear, etc.).

Step 3: Declare fibre composition the GS1 way

Fibre composition uses gs1:textileMaterial with one gs1:TextileMaterialDetails entry per fibre. The textile module attaches fiberOrigin, isRecycledFiber, recycledContentSource and fiberCertification inline on each entry — it does not invent a parallel textile:FiberComposition class.

"textileMaterial": [
  {
    "type": "TextileMaterialDetails",
    "textileMaterialContent": { "type": "QuantitativeValue", "value": 55, "unitCode": "P1" },
    "textileMaterialDescription": "Recycled polyester (post-consumer PET)",
    "fiberOrigin": "TW",
    "isRecycledFiber": true,
    "recycledContentSource": "Post-consumer PET bottles",
    "fiberCertification": {
      "type": "CertificationDetails",
      "certificationStandard": "GRS"
    }
  },
  {
    "type": "TextileMaterialDetails",
    "textileMaterialContent": { "type": "QuantitativeValue", "value": 45, "unitCode": "P1" },
    "textileMaterialDescription": "Organic cotton",
    "fiberOrigin": "TR",
    "isRecycledFiber": false
  }
]

unitCode: "P1" is the UN/CEFACT Rec 20 percent code. The textile module enforces the percentages summing to ~100% via its SHACL shapes.

Step 4: Care instructions (ISO 3758)

Care is expressed as a list of CareInstruction records carrying a careSymbolCode and supporting metadata. The published controlled values cover the ISO 3758 symbol set:

  • Washing: Wash30, Wash40, Wash60, WashGentle, WashHandOnly, DoNotWash
  • Bleaching: BleachAllowed, NonChlorineBleach, DoNotBleach
  • Tumble drying: TumbleDryLow, TumbleDryMedium, TumbleDryHigh, DripDry, LineDry, DryFlat, DoNotTumbleDry
  • Ironing: IronLow, IronMedium, IronHigh, NoSteam, DoNotIron
  • Professional / dry-cleaning: DryCleanAny, DryCleanPCE, DryCleanHydrocarbon, WetClean, DoNotDryClean

Step 5: Durability

DurabilityInfo rolls up the regulated tests into a single DurabilityClass (DurabilityADurabilityE). Underlying test results live in dedicated records:

  • DimensionalChangeTestResult referencing the test standard (ISO3759, ISO6330, ISO16322_3).
  • SpiralityTestResult referencing ISO16322_3.
  • VisualInspectionResult for finishing defects.

The RobustnessAssessment and RecyclabilityAssessment records aggregate per-dimension scores defined by the JRC scoring tables; see the textile vocabulary's RECYCLABILITY_SCORING.md and ROBUSTNESS_SCORING.md for the calculation rules.

Step 6: Substances of concern

Each substance of concern goes into a SubstanceOfConcern block:

  • SubstanceOfConcernTypeSoCTypeA, SoCTypeB, SoCTypeC, SoCTypeD (regulatory bucket).
  • CLPHazardCategory, CMR, EndocrineDisruptor, PMT, Sensitizer — hazard classifications attached to the substance.
  • chemicalPurpose — what role the substance played (dyeing, finishing, …).
  • concentrationRange — concentration band, mapped to the same controlled set the regulation uses.
  • safeUseInstructions — guidance for handling residuals.

REACH SVHC and the ZDHC MRSL are referenced via standard certification / verification records.

Step 7: Microplastic shedding (synthetic blends)

For synthetic-fibre-containing products, capture a MicroplasticInfo block with:

  • MicroplasticRiskLevelLowShedding, MediumShedding, HighShedding.
  • microplasticMitigationMeasures — what the product / instructions do to reduce shedding (low-friction finishes, washing-bag recommendations, etc.).

Step 8: Recycled content and chain of custody

Use RecycledContentDeclaration to capture the recycled-content claim and how it was traced:

  • recycledContentSource — narrative describing the source.
  • RecycledSourceTypePreConsumer, PostConsumer, PostIndustrial.
  • ChainOfCustodyMethodMassBalance, Segregation, IdentityPreserved.

A WasteOriginType qualifier covers waste-stream origin claims when relevant.

Step 9: End-of-life

End-of-life pathways combine a TakeBackProgram (the brand's program), takeBackIncentive (e.g. discount or store credit), endOfLifeDestination (FiberToFiber, OpenLoop, recycler, charity, …), and RecyclingTechnology (MechanicalRecycling, ChemicalRecyclingCotton, ChemicalRecyclingPA6, ThermoMechanicalRecycling, ThermoChemicalRecycling, FiberToFiber). The recyclability score from Step 5 ties this back to the durability/recyclability assessments.

Step 10: Publish the textile linkset

The textile passport is served from an IETF application/linkset+json document (RFC 9264). One object per anchor, GS1 link relations as full-IRI keys, link descriptors as values. For a serialised garment a typical linkset covers the consumer PIP, the EPCIS history (supply chain, take-back), the sustainability declaration, the consumer-handling/care instructions and the certification dossier:

{
  "linkset": [
    {
      "anchor": "https://id.gs1.org/01/09521234000011/21/WJ-2025-00142",
      "itemDescription": "Wool jacket, classic cut",
      "https://ref.gs1.org/voc/defaultLink": [
        { "href": "https://dpp.example.com/textile/09521234000011/WJ-2025-00142",
          "title": "Textile passport" }
      ],
      "https://ref.gs1.org/voc/pip": [
        { "href": "https://dpp.example.com/textile/09521234000011/WJ-2025-00142",
          "title": "Textile passport (consumer view)",
          "type": "text/html",
          "context": ["ALL"], "public": true }
      ],
      "https://ref.gs1.org/voc/epcis": [
        { "href": "https://api.example.com/events?MATCH_anyEPC=https%3A%2F%2Fid.gs1.org%2F01%2F09521234000011%2F21%2FWJ-2025-00142",
          "title": "EPCIS event history (supply chain, take-back)",
          "type": "application/ld+json",
          "context": ["ALL"], "public": true }
      ],
      "https://ref.gs1.org/voc/consumerHandlingStorageInstructions": [
        { "href": "https://dpp.example.com/care/09521234000011/WJ-2025-00142",
          "title": "Care instructions (ISO 3758)",
          "type": "text/html",
          "context": ["ALL"], "public": true }
      ],
      "https://ref.gs1.org/voc/productSustainabilityInfo": [
        { "href": "https://dpp.example.com/sustainability/09521234000011/WJ-2025-00142",
          "title": "Fibre composition, microplastic risk, circularity claims",
          "type": "application/ld+json",
          "context": ["ALL"], "public": true }
      ],
      "https://ref.gs1.org/voc/certificationInfo": [
        { "href": "https://dpp.example.com/certs/09521234000011/WJ-2025-00142",
          "title": "OEKO-TEX, GOTS and other conformity certificates",
          "type": "application/ld+json",
          "context": ["business", "authority"] }
      ]
    }
  ]
}

The ?linkType= parameter on a resolver URL takes the bare relation name (pip, productSustainabilityInfo, consumerHandlingStorageInstructions, …). See Resolver Setup for hosting options.

Validation

A complete textile DPP should pass three kinds of check:

  • JSON-LD shape — normalises against the textile context (no unresolved terms, no @context collisions).
  • SHACL — instance data satisfies the textile shapes published with the vocabulary.
  • JSON Schema — the payload validates against the textile DPP schema.

Tooling: any JSON-LD 1.1 processor for normalisation; any SHACL engine (pySHACL, Apache Jena, TopBraid SHACL); any JSON Schema validator.

Next steps