UJG / Editor's Draft /
GitHub
Table of Contents
  • 1Overview
  • 2Normative Artifacts
  • 3Terminology
  • 4Attachment Model
  • 5Non-Goals
  • 6Ontology
  • 7JSON-LD Context
  • 8Validation
  • 9Minimal Example
W3C Community Group Draft Report

Artifact

incubating

Status of this Document

This report was published by the User Journal Graph Community Group . It is not a W3C Standard nor is it on the W3C Standards Track. Please note that under the W3C Community Contributor License Agreement (CLA) there is a limited opt-out and other conditions apply. Learn more about W3C Community and Business Groups .

Last Update
2026-06-18
Editors
  • Seva Dolgopolov
Group
User Journal Graph Community Group
Repository
View Source
License
W3C-Software-and-Document

1. Overview

This optional module defines a minimal bridge vocabulary for addressable artifacts that are produced, consumed, exchanged, or referenced by UJG nodes.

An artifact is a portable identity for a file, media object, archive, token, invite, report, protocol object, generated document, or other resource that participates in a journey. The module does not define storage backends, transfer protocols, upload widgets, media processing, or artifact lifecycle state. Modules and profiles can specialize Artifact when they need more domain-specific semantics.

Artifact is not the state-binding primitive for UJG. State-like data context or binding identity belongs in the State Data module.

2. Normative Artifacts

This module is published through the following artifacts:

  • artifact.ttl: ontology, published at https://ujg.specs.openuji.org/ed/ns/artifact

  • artifact.context.jsonld: JSON-LD term mappings, published at https://ujg.specs.openuji.org/ed/ns/artifact.context.jsonld

  • artifact.shape.ttl: SHACL validation rules, published at https://ujg.specs.openuji.org/ed/ns/artifact.shape

Examples in this page compose the Core context with the Artifact context.

3. Terminology

  • Artifact: An addressable resource that may be produced, consumed, exchanged, or referenced during a journey.

  • Produced artifact: An artifact created, emitted, prepared, exported, generated, or made available by a UJG node.

  • Consumed artifact: An artifact accepted, imported, read, redeemed, or otherwise used by a UJG node.

4. Attachment Model

The module introduces two interoperable references:

  • artifact:producedArtifactRefs links a Core Node to one or more produced Artifacts.

  • artifact:consumedArtifactRefs links a Core Node to one or more consumed Artifacts.

The references are intentionally generic. Producers SHOULD attach them to the node that owns the artifact-producing or artifact-consuming semantics, such as an Action, a domain operation, or a module-defined metadata node. Producers SHOULD NOT use artifact references to create hidden Graph traversal or to replace Graph Transition semantics.

Artifact and State Data intentionally remain separate. Use Artifact for portable resource identity such as a file, archive, report, invite, media object, token, protocol object, or generated document. Use StateData when a State or CompositeState needs a stable data-context or binding identity. If the same external thing is both the context behind a state and a transferred resource, model separate StateData and Artifact nodes unless a future module defines an explicit relationship between them.

5. Non-Goals

Artifact does not define:

  • upload, download, or preview presentation

  • media-kind taxonomies

  • storage, CDN, filesystem, or database details

  • protocol delivery semantics

  • artifact lifecycle, freshness, or cache policy

  • validation of artifact payload contents

The archived artifact implementation extension remains useful for generator-specific upload and preview hints, but those hints are not part of this module.

6. Ontology

The normative Artifact ontology is defined below and is published at https://ujg.specs.openuji.org/ed/ns/artifact.

turtle
@prefix ujg: <https://ujg.specs.openuji.org/ed/ns/core#> .
@prefix ujgartifact: <https://ujg.specs.openuji.org/ed/ns/artifact#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix dct: <http://purl.org/dc/terms/> .

<https://ujg.specs.openuji.org/ed/ns/artifact#> a owl:Ontology ;
  rdfs:label "UJG Artifact Editor's Draft Vocabulary"@en ;
  dct:description "UJG Artifact ontology declaration" .

### Classes

ujgartifact:Artifact a owl:Class ;
  rdfs:subClassOf ujg:Node .

### Properties

ujgartifact:producedArtifactRefs a owl:ObjectProperty ;
  rdfs:domain ujg:Node ;
  rdfs:range ujgartifact:Artifact .

ujgartifact:consumedArtifactRefs a owl:ObjectProperty ;
  rdfs:domain ujg:Node ;
  rdfs:range ujgartifact:Artifact .
@prefix ujg: <https://ujg.specs.openuji.org/ed/ns/core#> .
@prefix ujgartifact: <https://ujg.specs.openuji.org/ed/ns/artifact#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix dct: <http://purl.org/dc/terms/> .

<https://ujg.specs.openuji.org/ed/ns/artifact#> a owl:Ontology ;
  rdfs:label "UJG Artifact Editor's Draft Vocabulary"@en ;
  dct:description "UJG Artifact ontology declaration" .

### Classes

ujgartifact:Artifact a owl:Class ;
  rdfs:subClassOf ujg:Node .

### Properties

ujgartifact:producedArtifactRefs a owl:ObjectProperty ;
  rdfs:domain ujg:Node ;
  rdfs:range ujgartifact:Artifact .

ujgartifact:consumedArtifactRefs a owl:ObjectProperty ;
  rdfs:domain ujg:Node ;
  rdfs:range ujgartifact:Artifact .

7. JSON-LD Context

The normative Artifact JSON-LD context is defined below and is published at https://ujg.specs.openuji.org/ed/ns/artifact.context.jsonld.

json-ld
{
  "@context": {
    "@version": 1.1,

    "ujgartifact": "https://ujg.specs.openuji.org/ed/ns/artifact#",
    "artifact": "https://ujg.specs.openuji.org/ed/ns/artifact#",

    "Artifact": "ujgartifact:Artifact",

    "producedArtifactRefs": {
      "@id": "ujgartifact:producedArtifactRefs",
      "@type": "@id",
      "@container": "@set"
    },
    "consumedArtifactRefs": {
      "@id": "ujgartifact:consumedArtifactRefs",
      "@type": "@id",
      "@container": "@set"
    }
  }
}
{
  "@context": {
    "@version": 1.1,

    "ujgartifact": "https://ujg.specs.openuji.org/ed/ns/artifact#",
    "artifact": "https://ujg.specs.openuji.org/ed/ns/artifact#",

    "Artifact": "ujgartifact:Artifact",

    "producedArtifactRefs": {
      "@id": "ujgartifact:producedArtifactRefs",
      "@type": "@id",
      "@container": "@set"
    },
    "consumedArtifactRefs": {
      "@id": "ujgartifact:consumedArtifactRefs",
      "@type": "@id",
      "@container": "@set"
    }
  }
}

8. Validation

The normative Artifact SHACL shape is defined below and is published at https://ujg.specs.openuji.org/ed/ns/artifact.shape.

turtle
@prefix ujgartifact: <https://ujg.specs.openuji.org/ed/ns/artifact#> .
@prefix ujgartifactshape: <https://ujg.specs.openuji.org/ed/ns/artifact.shape#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .

ujgartifactshape:ArtifactShape a sh:NodeShape ;
  sh:targetClass ujgartifact:Artifact ;
  sh:nodeKind sh:IRI .

ujgartifactshape:ArtifactReferenceHostShape a sh:NodeShape ;
  sh:targetSubjectsOf ujgartifact:producedArtifactRefs ;
  sh:targetSubjectsOf ujgartifact:consumedArtifactRefs ;
  sh:nodeKind sh:IRI ;

  sh:property [
    sh:path ujgartifact:producedArtifactRefs ;
    sh:class ujgartifact:Artifact ;
    sh:nodeKind sh:IRI ;
  ] ;

  sh:property [
    sh:path ujgartifact:consumedArtifactRefs ;
    sh:class ujgartifact:Artifact ;
    sh:nodeKind sh:IRI ;
  ] .
@prefix ujgartifact: <https://ujg.specs.openuji.org/ed/ns/artifact#> .
@prefix ujgartifactshape: <https://ujg.specs.openuji.org/ed/ns/artifact.shape#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .

ujgartifactshape:ArtifactShape a sh:NodeShape ;
  sh:targetClass ujgartifact:Artifact ;
  sh:nodeKind sh:IRI .

ujgartifactshape:ArtifactReferenceHostShape a sh:NodeShape ;
  sh:targetSubjectsOf ujgartifact:producedArtifactRefs ;
  sh:targetSubjectsOf ujgartifact:consumedArtifactRefs ;
  sh:nodeKind sh:IRI ;

  sh:property [
    sh:path ujgartifact:producedArtifactRefs ;
    sh:class ujgartifact:Artifact ;
    sh:nodeKind sh:IRI ;
  ] ;

  sh:property [
    sh:path ujgartifact:consumedArtifactRefs ;
    sh:class ujgartifact:Artifact ;
    sh:nodeKind sh:IRI ;
  ] .

The rules below define the remaining module semantics beyond the structural constraints captured by the SHACL shape.

  1. Identity only: Artifact identifies a resource; it does not define transfer, storage, rendering, security, or lifecycle semantics.

  2. Graph preservation: Artifact references MUST NOT create hidden graph edges or change Graph traversal behavior.

  3. Host responsibility: Producers SHOULD attach artifact references to the node that owns the artifact-producing or artifact-consuming meaning.

  4. State Data boundary: Artifact MUST NOT be interpreted as state-like data context or binding identity. Use State Data for state-scoped data binding.

  5. Graceful degradation: Consumers that do not implement this module MAY ignore Artifact semantics, but SHOULD preserve recognized JSON-LD data during read-transform-write when possible.

9. Minimal Example

json
{
  "@context": [
    "https://ujg.specs.openuji.org/ed/ns/core.context.jsonld",
    "https://ujg.specs.openuji.org/ed/ns/action.context.jsonld",
    "https://ujg.specs.openuji.org/ed/ns/artifact.context.jsonld"
  ],
  "@id": "https://example.com/ujg/artifact/export.jsonld",
  "@type": "UJGDocument",
  "nodes": [
    {
      "@id": "urn:action:prepare-export",
      "@type": "Action",
      "producedArtifactRefs": ["urn:artifact:account-archive"]
    },
    {
      "@id": "urn:artifact:account-archive",
      "@type": "Artifact"
    }
  ]
}
{
  "@context": [
    "https://ujg.specs.openuji.org/ed/ns/core.context.jsonld",
    "https://ujg.specs.openuji.org/ed/ns/action.context.jsonld",
    "https://ujg.specs.openuji.org/ed/ns/artifact.context.jsonld"
  ],
  "@id": "https://example.com/ujg/artifact/export.jsonld",
  "@type": "UJGDocument",
  "nodes": [
    {
      "@id": "urn:action:prepare-export",
      "@type": "Action",
      "producedArtifactRefs": ["urn:artifact:account-archive"]
    },
    {
      "@id": "urn:artifact:account-archive",
      "@type": "Artifact"
    }
  ]
}

Copyright © 2026 the Contributors to the ujg/modules/artifact, published by the User Journal Graph Community Group under the W3C Community Contributor License Agreement (CLA) . A human-readable summary is available.

generated by Speculator