profile-conceptscheme

CDIF Concept Scheme Profile — Implementation Guide

Purpose and scope

The CDIF Concept Scheme profile ** (cdifConceptScheme) describes a **SKOS concept scheme — a controlled vocabulary of concepts used in CDIF metadata. A typical concept scheme is a community glossary or thesaurus that supplies shared definitions and terms: the concepts used to name variables, classify resources, or qualify measurements in other CDIF profiles.

Related profile. A code list is a concept scheme whose members are controlled values carrying machine notation codes (skos:notation). Code lists are published as the separate profile-codelist profile. Use Concept Scheme for a general vocabulary of meanings; use Codelist when each concept must carry a code.

Table of contents

2. Conformance

↑ Back to TOC

A conforming concept scheme is typed as a skos:ConceptScheme and declares conformance to the Concept Scheme profile identifier:

{
  "@context": { "skos": "http://www.w3.org/2004/02/skos/core#" },
  "@id": "https://example.org/vocab/myscheme",
  "@type": ["skos:ConceptScheme"],
  "skos:prefLabel": {"@value": "My Vocabulary", "@language": "en"},
  "skos:definition": {"@value": "...", "@language": "en"},
  "skos:hasTopConcept": [ { "@id": "https://example.org/vocab/myscheme/top" } ]
}

Required elements for the Concept Scheme:

3. Concepts

↑ Back to TOC

Top concepts (and their narrower concepts) are skos:Concept nodes, given inline or by @id reference. Each concept carries skos:prefLabel and skos:definition. Optional properties include skos:note, skos:inScheme, and the hierarchy relations skos:broader / skos:narrower (themselves inline concepts or @id references).

4. Validation

↑ Back to TOC

python FrameAndValidate.py examples/exampleSkosConceptScheme.json --validate

FrameAndValidate.py frames the document with cdifConceptScheme-frame.jsonld, array-wraps the multi-valued SKOS properties, then validates against the JSON Schema. Validation is open-world: properties beyond the profile are permitted.

Model

↑ Back to TOC

ConceptScheme

↑ Back to TOC

@id

@type

skos:prefLabel

skos:hasTopConcept

schema:identifier

schema:dateModified

schema:license

schema:conditionsOfAccess

Data Types

↑ Back to TOC

LanguageTaggedValue

↑ Back to TOC

@value

@language

Object Reference

↑ Back to TOC

PropertyValue (for schema:identifier)

{
  "@type": ["schema:PropertyValue"],
  "schema:propertyID": "https://registry.identifiers.org/registry/doi",
  "schema:value": "10.5683/SP2/TTJNIU",
  "schema:url": "https://doi.org/10.5683/SP2/TTJNIU"
}

Optional Properties

↑ Back to TOC

schema:url

schema:creator

skos:definition

skos:altLabel

skos:note

cdifConcept

Optional Properties

↑ Back to TOC

skos:inScheme

skos:notation

skos:broader

skos:narrower

skos:altLabel

skos:note

skos:topConceptOf

Required Properties

↑ Back to TOC

@id

@type

skos:prefLabel

skos:definition

Bidirectional Hierarchy

↑ Back to TOC

CDIF guidelines require concept hierarchies to be expressed in both directions:

Any concept that appears as a value of skos:narrower must also declare skos:broader pointing back to its parent. Top concepts (those in skos:hasTopConcept) should not have skos:broader within the scheme.

{
  "@id": "sf:anysampledfeature",
  "@type": ["skos:Concept"],
  "skos:prefLabel": "Any sampled feature",
  "skos:definition": "Top concept",
  "skos:inScheme": {"@id": "sf:sampledfeaturevocabulary"},
  "skos:narrower": [
    {
      "@id": "sf:earthmaterial",
      "@type": ["skos:Concept"],
      "skos:prefLabel": "Natural Solid Material",
      "skos:definition": "A naturally occurring solid material.",
      "skos:inScheme": {"@id": "sf:sampledfeaturevocabulary"},
      "skos:broader": [{"@id": "sf:anysampledfeature"}]
    }
  ]
}

Array Convention

↑ Back to TOC

Unlike other CDIF profiles, the skos profile does not require repeatable properties to always be serialized as arrays. This recognizes standard SKOS practice that allows either a single string or an array for literal values. For example, both of these are valid:

"skos:prefLabel": "Material"
"skos:prefLabel": [
  {"@value": "Material", "@language": "en"},
  {"@value": "Matériau", "@language": "fr"}
]

Consumers of CDIF concept scheme documents should test whether a value is a string or an array before iterating.

5. Provenance of the artifacts

↑ Back to TOC

Generated from the canonical metadataBuildingBlocks register:

The profile schema (_sources/profiles/cdifProfile/cdifConceptScheme/schema.yaml) is self-contained — it inlines the SKOS Concept and language-tagged-value definitions rather than referencing the skosConceptScheme building block — so the SHACL shapes are taken directly from the SKOS concept-scheme building block rather than produced by validate_shacl.py --emit-shapes. Re-sync these artifacts whenever the source register changes.