Some checks failed
Test Suite / unit-tests (3.11) (push) Has been cancelled
Test Suite / unit-tests (3.12) (push) Has been cancelled
Test Suite / integration-tests (push) Has been cancelled
Test Suite / e2e-tests (push) Has been cancelled
Test Suite / performance-tests (push) Has been cancelled
Test Suite / code-quality (push) Has been cancelled
Test Suite / security-scan (push) Has been cancelled
Test Suite / test-summary (push) Has been cancelled
Updated example documentation to use the new schema-of-schemas standard
with markdown schema format and multi-schema validation commands.
**Manpage Example Updates:**
- Changed schema reference from markdown-manpage-schema.json to manpage-schema-v1.0.md
- Updated all commands to use new multi-schema validation syntax
- Added examples of number-based validation (markitect schema-validate 2)
- Added examples of batch validation (--all, ranges, lists)
- Updated integration examples (CI/CD, pre-commit hooks, Makefile)
- Documented schema registry workflow
**Terminology Example Updates:**
- Changed schema reference from terminology-schema.json to terminology-schema-v1.0.md
- Updated all validation commands to use new CLI syntax
- Added examples of schema-list and numbered selection
- Added batch validation examples
- Updated GitHub Actions and pre-commit hook examples
- Documented schema registry access methods
**Key Changes:**
- All schema filenames now follow {domain}-schema-v{major}.{minor}.md convention
- Commands use schema registry with numbered or filename selection
- Batch validation examples added throughout
- Integration examples updated to new standard
- Documentation reflects markdown-first schema format
All schemas validated successfully against metaschema.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
388 lines
11 KiB
Markdown
388 lines
11 KiB
Markdown
# Unix Manpage Schema Validation Example
|
|
|
|
This example demonstrates MarkiTect's schema validation system by creating a self-validating documentation set: a schema that defines Unix manpage structure and a comprehensive manual about schema validation that validates against its own schema definition.
|
|
|
|
## Overview
|
|
|
|
This example showcases the "dogfooding" principle - using MarkiTect's schema validation to document schema validation itself. It demonstrates:
|
|
|
|
- **Schema-driven documentation** - Defining document structure with JSON Schema
|
|
- **Self-validation** - The manual validates against the manpage schema it demonstrates
|
|
- **Reusable patterns** - The manpage schema can validate any Unix-style manual page
|
|
- **Complete workflow** - From schema creation through validation and refinement
|
|
|
|
## Files in This Example
|
|
|
|
### Schema File
|
|
|
|
The manpage schema is now managed in MarkiTect's schema registry:
|
|
- **Schema Name**: `manpage-schema-v1.0.md`
|
|
- **Location**: `markitect/schemas/manpage-schema-v1.0.md`
|
|
- **Format**: Markdown with embedded JSON (following schema-of-schemas standard)
|
|
|
|
This schema defines the structure of Unix-style manual pages written in Markdown.
|
|
|
|
**Key Features:**
|
|
- Validates H1 title format: `command(section) - description`
|
|
- Requires SYNOPSIS and DESCRIPTION sections
|
|
- Validates heading hierarchy (H1, H2, H3, H4)
|
|
- Ensures presence of code examples, paragraphs, and emphasis
|
|
- Includes custom `x-markitect-*` extensions for manpage conventions
|
|
|
|
**Schema Requirements:**
|
|
- Exactly 1 H1 heading (document title)
|
|
- 3-30 H2 headings (major sections)
|
|
- 0-50 H3 headings (subsections)
|
|
- 5-500 paragraphs (content)
|
|
- 1-50 code blocks (examples)
|
|
- 10-500 emphasis elements (commands/arguments)
|
|
|
|
### `markdown-schema-validation.1.md`
|
|
|
|
A comprehensive manual page (section 7) documenting MarkiTect's markdown schema validation system.
|
|
|
|
**Sections Include:**
|
|
- SYNOPSIS - Command syntax reference
|
|
- DESCRIPTION - How schema validation works
|
|
- SCHEMA STRUCTURE - JSON Schema format details
|
|
- COMMANDS - Schema management and validation commands
|
|
- WORKFLOW - Step-by-step validation workflows
|
|
- VALIDATION RULES - What schemas validate
|
|
- ERROR HANDLING - Understanding validation errors
|
|
- SCHEMA DESIGN - Best practices and anti-patterns
|
|
- INTEGRATION - CI/CD, git hooks, build systems
|
|
- EXAMPLES - Practical usage demonstrations
|
|
- Plus standard manpage sections: FILES, EXIT STATUS, ENVIRONMENT, SEE ALSO, etc.
|
|
|
|
**Statistics:**
|
|
- 19 H2 sections
|
|
- 24 H3 subsections
|
|
- 147 paragraphs
|
|
- 23 code examples
|
|
- 105 emphasis markers
|
|
|
|
## Running the Example
|
|
|
|
### 1. List Available Schemas
|
|
|
|
View all registered schemas (including the manpage schema):
|
|
|
|
```bash
|
|
markitect schema-list
|
|
```
|
|
|
|
You should see `manpage-schema-v1.0.md` listed with a number.
|
|
|
|
### 2. Validate the Manual Against the Schema
|
|
|
|
Verify that the manual conforms to the manpage schema using the new multi-schema validation:
|
|
|
|
```bash
|
|
cd examples/manpages
|
|
|
|
# Validate by schema filename (from registry)
|
|
markitect schema-validate manpage-schema-v1.0.md
|
|
|
|
# Or validate by number (if schema is #2 in the list)
|
|
markitect schema-validate 2
|
|
|
|
# Or validate a specific document file
|
|
markitect validate markdown-schema-validation.1.md \
|
|
--schema manpage-schema-v1.0.md
|
|
```
|
|
|
|
Expected output: ✅ **VALID** - Document structure matches schema requirements
|
|
|
|
### 3. Show Detailed Validation
|
|
|
|
See detailed validation information:
|
|
|
|
```bash
|
|
markitect schema-validate manpage-schema-v1.0.md --detailed-errors
|
|
```
|
|
|
|
### 4. Validate Multiple Schemas
|
|
|
|
Validate all registered schemas at once:
|
|
|
|
```bash
|
|
# Validate all schemas
|
|
markitect schema-validate --all
|
|
|
|
# Validate a range of schemas
|
|
markitect schema-validate 1-3
|
|
|
|
# Validate specific schemas
|
|
markitect schema-validate 1,3,5
|
|
```
|
|
|
|
### 5. Examine the Schema
|
|
|
|
View the manpage schema in markdown format:
|
|
|
|
```bash
|
|
markitect schema-get manpage-schema-v1.0.md
|
|
|
|
# Or view the file directly
|
|
cat ../../markitect/schemas/manpage-schema-v1.0.md
|
|
```
|
|
|
|
### 6. Validate Other Manpages
|
|
|
|
Use the schema to validate other manual pages in the project:
|
|
|
|
```bash
|
|
# Validate using schema name from registry
|
|
markitect validate ../../docs/manuals/markitect.1.md \
|
|
--schema manpage-schema-v1.0.md
|
|
```
|
|
|
|
## What This Example Demonstrates
|
|
|
|
### 1. Schema-Driven Documentation
|
|
|
|
The manpage schema defines what a valid Unix manual page looks like:
|
|
|
|
- Required structural elements (title, synopsis, description)
|
|
- Heading hierarchy constraints
|
|
- Content density requirements (minimum paragraphs, code examples)
|
|
- Formatting conventions (bold commands, italic arguments)
|
|
|
|
### 2. Self-Validating System
|
|
|
|
The schema validation manual validates against the manpage schema, proving:
|
|
|
|
- The schema is practical and usable
|
|
- The manual follows manpage conventions
|
|
- Schema validation works as documented
|
|
- The system is reliable enough to document itself
|
|
|
|
### 3. Structural vs Semantic Validation
|
|
|
|
The schema validates **structure**, not **content**:
|
|
|
|
- ✅ Validates: Correct number of sections, heading levels, code examples present
|
|
- ❌ Does not validate: Grammar, code correctness, factual accuracy, logical flow
|
|
|
|
This distinction is crucial for understanding what schemas can and cannot do.
|
|
|
|
### 4. Reusable Patterns
|
|
|
|
The manpage schema is a reusable pattern that can:
|
|
|
|
- Validate any Unix-style manual page
|
|
- Enforce documentation consistency across a project
|
|
- Generate templates for new documentation
|
|
- Integrate into CI/CD pipelines for quality checks
|
|
|
|
### 5. Custom Schema Extensions
|
|
|
|
The schema demonstrates MarkiTect's custom extensions:
|
|
|
|
```json
|
|
"x-markitect-required-sections": [
|
|
"SYNOPSIS",
|
|
"DESCRIPTION"
|
|
],
|
|
"x-markitect-recommended-sections": [
|
|
"OPTIONS",
|
|
"EXAMPLES",
|
|
"SEE ALSO"
|
|
],
|
|
"x-markitect-conventions": {
|
|
"heading_case": "UPPERCASE for H2 sections",
|
|
"command_format": "Bold with **command**",
|
|
"argument_format": "Italic with *ARG*"
|
|
}
|
|
```
|
|
|
|
These extensions provide metadata about schema intent and conventions beyond structural validation.
|
|
|
|
## Validation Workflow Demonstrated
|
|
|
|
This example shows the complete schema validation workflow:
|
|
|
|
### Step 1: Schema Creation
|
|
- Analyze existing manpages (markitect.1.md, issue.1.md)
|
|
- Identify common structural patterns
|
|
- Generate base schema from example document
|
|
- Refine schema to be flexible yet meaningful
|
|
|
|
### Step 2: Schema Refinement
|
|
- Adjust minItems/maxItems for appropriate ranges
|
|
- Add custom MarkiTect extensions
|
|
- Include heading patterns and conventions
|
|
- Balance strictness with flexibility
|
|
|
|
### Step 3: Document Creation
|
|
- Write document following schema structure
|
|
- Use template generated from schema as starting point
|
|
- Ensure all required sections present
|
|
- Include appropriate code examples and formatting
|
|
|
|
### Step 4: Validation
|
|
- Validate document against schema
|
|
- Review validation errors if any
|
|
- Fix structural issues
|
|
- Re-validate until passing
|
|
|
|
### Step 5: Iteration
|
|
- Refine schema based on validation experience
|
|
- Adjust constraints for real-world use cases
|
|
- Document lessons learned
|
|
- Share schema for reuse
|
|
|
|
## Integration Examples
|
|
|
|
### CI/CD Integration
|
|
|
|
Add to `.github/workflows/docs.yml` or similar:
|
|
|
|
```yaml
|
|
- name: Validate Manpages
|
|
run: |
|
|
for manpage in docs/manuals/*.md; do
|
|
markitect validate "$manpage" \
|
|
--schema manpage-schema-v1.0.md \
|
|
|| exit 1
|
|
done
|
|
```
|
|
|
|
### Pre-commit Hook
|
|
|
|
Add to `.git/hooks/pre-commit`:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
changed_manpages=$(git diff --cached --name-only --diff-filter=ACM | grep 'docs/manuals/.*\.md$')
|
|
|
|
for manpage in $changed_manpages; do
|
|
markitect validate "$manpage" \
|
|
--schema manpage-schema-v1.0.md \
|
|
--quiet || {
|
|
echo "Manpage validation failed: $manpage"
|
|
markitect validate "$manpage" \
|
|
--schema manpage-schema-v1.0.md \
|
|
--detailed-errors
|
|
exit 1
|
|
}
|
|
done
|
|
```
|
|
|
|
### Makefile Integration
|
|
|
|
Add to project `Makefile`:
|
|
|
|
```makefile
|
|
.PHONY: validate-manpages
|
|
validate-manpages:
|
|
@echo "Validating manual pages..."
|
|
@for manpage in docs/manuals/*.md; do \
|
|
markitect validate "$$manpage" \
|
|
--schema manpage-schema-v1.0.md \
|
|
|| exit 1; \
|
|
done
|
|
@echo "✅ All manpages valid"
|
|
|
|
.PHONY: docs
|
|
docs: validate-manpages
|
|
# Continue with doc generation...
|
|
```
|
|
|
|
## Key Lessons from This Example
|
|
|
|
### 1. Start with Real Documents
|
|
|
|
The manpage schema was created by analyzing existing manpages (markitect.1.md, issue.1.md), not designed in isolation. This ensures the schema reflects real-world usage.
|
|
|
|
### 2. Use Ranges, Not Exact Counts
|
|
|
|
The schema uses ranges like `5-500 paragraphs` instead of exact counts. This provides flexibility while still enforcing quality standards.
|
|
|
|
### 3. Required vs Recommended
|
|
|
|
The schema distinguishes between required sections (SYNOPSIS, DESCRIPTION) and recommended sections (EXAMPLES, SEE ALSO), allowing flexibility where appropriate.
|
|
|
|
### 4. Validate Structure, Not Semantics
|
|
|
|
Schemas validate document structure, not content quality. Grammar checking, code correctness, and factual accuracy require other tools.
|
|
|
|
### 5. Progressive Refinement
|
|
|
|
Schemas should evolve based on validation experience. Start loose, tighten based on actual needs, never over-specify.
|
|
|
|
### 6. Documentation is Essential
|
|
|
|
The schema includes extensive metadata about conventions and intent through custom extensions, making it self-documenting.
|
|
|
|
## Extending This Example
|
|
|
|
### Create Schema Variants
|
|
|
|
Create specialized schemas for different manpage types:
|
|
|
|
```bash
|
|
# For command manpages (section 1)
|
|
cp markitect/schemas/manpage-schema-v1.0.md command-manpage-schema-v1.0.md
|
|
# Edit to require COMMANDS section
|
|
markitect schema-validate ./command-manpage-schema-v1.0.md
|
|
markitect schema-ingest ./command-manpage-schema-v1.0.md
|
|
|
|
# For format manpages (section 5)
|
|
cp markitect/schemas/manpage-schema-v1.0.md format-manpage-schema-v1.0.md
|
|
# Edit to require FORMAT section
|
|
|
|
# For convention manpages (section 7)
|
|
cp markitect/schemas/manpage-schema-v1.0.md convention-manpage-schema-v1.0.md
|
|
# Edit to be more flexible
|
|
```
|
|
|
|
### Validate Your Own Documentation
|
|
|
|
Apply the manpage schema to your project:
|
|
|
|
```bash
|
|
# Validate README (if it follows manpage structure)
|
|
markitect validate README.md \
|
|
--schema manpage-schema-v1.0.md
|
|
|
|
# May need adjustments for non-manpage docs
|
|
```
|
|
|
|
### Generate Schema Family
|
|
|
|
Create schemas for related document types:
|
|
|
|
- API documentation schema
|
|
- Tutorial schema
|
|
- RFC/specification schema
|
|
- Architecture decision record (ADR) schema
|
|
|
|
Each can follow similar validation principles while enforcing type-specific structure.
|
|
|
|
## Further Reading
|
|
|
|
- **markdown-schema-validation.1.md** - Complete reference for schema validation
|
|
- **../../docs/manuals/markitect.1.md** - MarkiTect command reference
|
|
- **JSON Schema Specification** - https://json-schema.org/
|
|
- **Unix Manual Page Conventions** - `man 7 man-pages` on Unix systems
|
|
|
|
## Validation Results
|
|
|
|
This example has been validated to confirm:
|
|
|
|
✅ Manual validates against manpage schema
|
|
✅ Schema is well-formed JSON Schema draft-07
|
|
✅ All required sections present in manual
|
|
✅ Heading hierarchy follows Unix conventions
|
|
✅ Code examples demonstrate actual usage
|
|
✅ Structure matches defined constraints
|
|
|
|
## License
|
|
|
|
Part of the MarkiTect project. Licensed under MIT License.
|
|
|
|
---
|
|
|
|
**Note**: This example represents a complete, production-ready use case of MarkiTect's schema validation system. The files can be used as-is or adapted for your own documentation requirements.
|