--- title: The Article model set description: Four complete models show reusable authors, embedded SEO metadata and ordered relationships between pages and articles. editUrl: https://github.com/cmmf-project/cmmf-docs-web/edit/main/src/content/owned/examples/article.md pagefind: false --- An article links to a reusable Person and embeds SEO Metadata. A Page can link to an ordered list of related Articles. These are model definitions, rather than sample authored content. ## Included models | Model | Kind | Main relationships | | :--- | :--- | :--- | | Article | `entry` | Links to Person; embeds SEO Metadata; permits Person embeds in rich text | | Person | `entry` | Reusable profile for authorship | | SEO Metadata | `object` | Embedded structure with article-specific or page-specific values | | Page | `entry` | Embeds SEO Metadata; links to an ordered list of Articles | ## Download the complete set [Download the complete Article project ZIP](/downloads/examples/1.2.0/article.zip). It includes the manifest, all four models, the pinned schema, a local validator and a Studio import JSON file. After extracting, use Node 22.12+ to run `npm ci` and `npm run validate` in that folder. Individual canonical files are also available below. Preserve this structure and download all five files into a model project: ```text manifest.yaml models/ article.yaml person.yaml seo-metadata.yaml page.yaml ``` - [manifest.yaml](/downloads/examples/1.2.0/manifest.yaml) - [models/article.yaml](/downloads/examples/1.2.0/models/article.yaml) - [models/person.yaml](/downloads/examples/1.2.0/models/person.yaml) - [models/seo-metadata.yaml](/downloads/examples/1.2.0/models/seo-metadata.yaml) - [models/page.yaml](/downloads/examples/1.2.0/models/page.yaml) The site checks the complete set against the pinned 1.2.0 schema, its manifest version and relationship targets during every production build. These checks do not validate authored content or a particular CMS implementation. ## The manifest ```yaml title="examples/manifest.yaml" specVersion: "1.2.0" namespace: headlessco.content-model-master modelsPath: ./models defaults: required: false localisation: false ``` ## The Article definition The author is linked because their profile has separate identity. SEO values are embedded because they belong to the article, even though their structure can be reused. ```yaml title="examples/models/article.yaml" id: article name: Article kind: entry description: Editorial article content type. tags: - editorial fields: - id: title name: Title type: string required: true validations: minLength: 5 maxLength: 100 - id: slug name: Slug type: slug required: true editorial: helpText: Used in URLs. - id: summary name: Summary type: text validations: maxLength: 250 - id: body name: Body type: richText required: true richTextConfig: marks: - bold - italic - link blocks: - paragraph - heading-2 - heading-3 - unordered-list - ordered-list - quote embeds: - kind: asset - kind: reference targets: - person - id: hero_image name: Hero Image type: asset validations: mimeTypes: - image/jpeg - image/png - id: author name: Author type: reference targets: - person relation: ownership: linked - id: seo name: SEO type: object objectType: seo-metadata translationHints: preferredRepresentation: embedded editorial: labelField: title preview: title: title description: summary image: hero_image governance: owner: platform-team status: active maturity: stable ``` ## Try the model visually Download [article.models.json](/downloads/examples/1.2.0/article.models.json) and follow the [Studio import walkthrough](/tools/studio/#import-the-complete-model-set). Studio accepts individual model YAML or JSON, and a JSON/YAML `{ models: [...] }` bundle. Import replaces the current board and can be undone. Importing a model by itself can leave its related targets unresolved; use the complete set in a bundle when inspecting the whole graph. Studio exports model YAML in a ZIP but does **not** import ZIP files or a directory of files. Save a Studio workspace JSON backup for a complete layout round trip. [Read the tool boundaries](/tools/).