# Mps Lang Core XML

> Use when authoring XML documents as MPS root nodes or building XML-generating generator templates with jetbrains.mps.core.xml — covers XmlFile, XmlDocument, prolog (XML declaration, DOCTYPE, processing instructions, comments), elements, attributes, CDATA, entity references, and macro attachment via the smodelAttribute role for templates that emit XML output.

- Skill: `jetbrains/mps-lang-core-xml` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add jetbrains/mps-lang-core-xml`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jetbrains/mps-lang-core-xml/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: jetbrains (https://skillmd.com/u/jetbrains)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/jetbrains/mps-lang-core-xml

---


# jetbrains.mps.core.xml Language

`jetbrains.mps.core.xml` is an MPS language for authoring and generating XML documents inside MPS models. It is used either for **direct XML authoring** (an `XmlFile` root holds a complete document) or for **generator templates** (an `XmlFile` carries `RootTemplateAnnotation` and macros via `smodelAttribute` child roles).

**Language reference:** `l:479c7a8c-02f9-43b5-9139-d910cb22f298:jetbrains.mps.core.xml`

## Critical Directives

- **Wrap everything in `XmlFile → XmlDocument`.** `XmlFile` is the only rootable concept. `XmlDocument.rootElement` has cardinality 1 — put the root there, not in `content`.
- **`XmlProlog` is optional (`0..1`).** Omit it entirely when no prolog is needed.
- **Attribute values are lists of `XmlValuePart`.** A plain string is a single `XmlTextValue`. An attribute with no `value` children renders as a valueless (boolean) attribute.
- **Property name asymmetry:** `XmlText` / `XmlSingleLineText` use the property `value`. `XmlTextValue` (attribute value part) uses the property `text`. Do not swap them.
- **In generators, macros go in the `smodelAttribute` child role** of the node they annotate — not as siblings in `content` or `attributes`.
- **Subclass the base types.** Extend `XmlBaseAttribute` (not `XmlAttribute`) and `XmlBaseElement` (not `XmlElement`) when defining custom concepts for derived languages.
- **Do not hand-edit serialized `.mps` files.** Use MPS MCP node tools for all changes.

## Common-Path Workflow

1. Add `jetbrains.mps.core.xml` as a used language on the target model. For generator templates, also add `jetbrains.mps.lang.generator`.
2. Create an `XmlFile` root node with a `name`. The `name` is the template/document identifier, not the output filename.
3. Add an `XmlDocument` child in role `document`. Optionally add an `XmlProlog` for declarations/comments/PIs.
4. Build the document tree under `XmlDocument.rootElement` and the inner `content` lists.
5. For generator templates, attach `RootTemplateAnnotation` to the `XmlFile` via `smodelAttribute`, and attach macros (`PropertyMacro`, `LoopMacro`, `CopySrcNodeMacro`, …) to inner nodes via their `smodelAttribute` role.
6. Validate with `mps_mcp_check_root_node_problems`.

## Related Skills

- `mps-aspect-generator` — for generator-side macro design that produces these XML templates.
- `mps-aspect-textgen` — for the text-serialization layer that turns these XML trees into output files.
- `mps-node-editing` — generic JSON-blueprint node creation/replacement workflow.

## Reference Index

- Concept catalog — open when you need exact concept names, properties, cardinalities, or aliases for any document, prolog, element, attribute, or content node. See [references/concept-catalog.md](references/concept-catalog.md).
- JSON blueprint patterns — open when constructing or editing concrete XML trees as JSON for `mps_mcp_insert_root_node_from_json`, `mps_mcp_update_node`. Includes minimal files, prolog with declarations, DOCTYPE, comments, attributes, mixed values, CDATA, processing instructions, and a full generator-template example. See [references/json-blueprints.md](references/json-blueprints.md).
- Rules and pitfalls — open when a node validates but the rendered XML is wrong, when attribute/value naming feels inconsistent, or before subclassing element/attribute concepts. See [references/rules-and-pitfalls.md](references/rules-and-pitfalls.md).
- Language dependencies — open when setting up a new model that uses XML concepts, or when wiring generator templates that mix XML with generator macros. See [references/language-dependencies.md](references/language-dependencies.md).

