---
title: "Textile DPP Implementation Guide | OpenEPCIS Docs | OpenEPCIS - an open-core, GS1-compliant EPCIS implementation."
canonical_url: "https://openepcis.io/de/docs/digital-product-passport/textile/implementation-guide"
last_updated: "2026-06-28T23:26:15.320Z"
meta:
  author: "benelog GmbH & Co. KG"
  description: "How to assemble a Textile Digital Product Passport against the published openepcis-dpp-ready textile vocabulary"
  keywords: "Textile DPP implementation, fibre composition, ISO 3758 care, durability, recycled content"
  "og:description": "How to assemble a Textile Digital Product Passport against the published openepcis-dpp-ready textile vocabulary"
  "og:title": "Textile DPP Implementation Guide"
  "twitter:description": "How to assemble a Textile Digital Product Passport against the published openepcis-dpp-ready textile vocabulary"
  "twitter:title": "Textile DPP Implementation Guide"
---

</h2>Home

``

# **Textile DPP Implementation Guide** How to assemble a Textile Digital Product Passport against the published openepcis-dpp-ready textile vocabulary [~~textile~~](https://openepcis.io/de/tags/textile)· [~~apparel~~](https://openepcis.io/de/tags/apparel)· [~~footwear~~](https://openepcis.io/de/tags/footwear)· [~~implementation~~](https://openepcis.io/de/tags/implementation)· 5 min read ## 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**`](https://github.com/openepcis/openepcis-dpp-ready/blob/main/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](https://openepcis.io/docs/digital-product-passport/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**`. - `**apparelSubcategory**` — `**TShirts**`, `**ShirtsBlouses**`, `**JacketsCoats**`, `**PantsShorts**`, `**DressesSkirts**`, `**Sweaters**`, `**Underwear**`, `**Swimwear**`, `**Denim**`, `**LeggingsStockingsSocks**` (only applies when `**textileCategory**` is `**TextileApparel**`). - `**fabricType**` — `**Knitted**`, `**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**` (`**DurabilityA**`…`**DurabilityE**`). 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**`](https://github.com/openepcis/openepcis-dpp-ready/blob/main/extensions/eu/textile/docs/RECYCLABILITY_SCORING.md) and [`**ROBUSTNESS_SCORING.md**`](https://github.com/openepcis/openepcis-dpp-ready/blob/main/extensions/eu/textile/docs/ROBUSTNESS_SCORING.md) for the calculation rules. ## Step 6: Substances of concern Each substance of concern goes into a `**SubstanceOfConcern**` block: - `**SubstanceOfConcernType**` — `**SoCTypeA**`, `**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: - `**MicroplasticRiskLevel**` — `**LowShedding**`, `**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. - `**RecycledSourceType**` — `**PreConsumer**`, `**PostConsumer**`, `**PostIndustrial**`. - `**ChainOfCustodyMethod**` — `**MassBalance**`, `**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](https://openepcis.io/docs/digital-product-passport/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 - [Complete examples](https://openepcis.io/docs/digital-product-passport/textile/complete-examples) — links to the canonical garment, footwear and ITIP set passports - [Textile vocabulary browser](https://ref.openepcis.io/extensions/eu/textile/) — full ontology - [EUDR Integration](https://openepcis.io/docs/digital-product-passport/eudr) — for leather and cotton inputs subject to EUDR obligations - [Multi-component example](https://openepcis.io/docs/digital-product-passport/multi-component-example) — for a textile component inside a larger product