Xseed: Ruby XSD Documentation Generator
Purpose
Xseed provides comprehensive XSD documentation generation with a single command:
-
Automatic SVG generation - When generating HTML, xseed automatically creates SVG diagrams for all elements using the xsdvi gem
-
HTML documentation - Complete schema reference with embedded SVG diagrams (XS3P port)
-
Single-command workflow - One command generates everything: HTML + all SVG diagrams
Features
-
Single-command generation -
xseed htmlautomatically generates HTML documentation and all SVG diagrams -
Integrated SVG diagrams - Uses xsdvi gem Ruby API to generate diagram for each element
-
Comprehensive HTML - Schema properties, component listings, type hierarchies, XML samples
-
Professional CLI - Thor-based with verbose mode and progress indicators
-
High performance - Generates complete documentation in milliseconds
-
Robust error handling - Graceful degradation with helpful messages
-
21 complete features - All P0, P1, and P2 features implemented
Quick Start
# Install the gem (includes xsdvi for SVG generation)
gem install xseed
# Generate complete documentation (HTML + all SVG diagrams)
xseed html schema.xsd -o docs/index.html
# Result:
# docs/index.html (HTML with embedded SVG references)
# docs/diagrams/*.svg (SVG diagram for each element)
# View schema information
xseed info schema.xsd
# Display help
xseed helpComplete Workflow
Single-command integrated documentation
One command does everything - xseed automatically generates all SVG diagrams when creating HTML:
# This single command generates EVERYTHING:
xseed html schema.xsd -o docs/index.htmlWhat it generates:
-
docs/index.html- Complete HTML documentation -
docs/diagrams/*.svg- SVG diagram for EVERY element (auto-generated using xsdvi) -
Proper
<object>tag integration in HTML
That’s it! No need for separate SVG generation commands.
$ xseed html unitsml-v1.0.xsd -o output/index.html --title "UnitsML Docs" --verbose
→ Creating HTML generator for: unitsml-v1.0.xsd
→ HTML generator initialized
→ Generating HTML documentation...
✓ Complete
✓ HTML documentation generated: output/index.html
→ Generation completed in 0.341s
# Generated files:
# output/index.html (752KB HTML)
# output/diagrams/Unit.svg (54 SVG files, one per element)
# output/diagrams/Quantity.svg
# output/diagrams/Prefix.svg
# ... (and 51 more)
$ open output/index.htmlThe HTML automatically includes all 54 SVG diagrams with proper <object> tags.
</commands>
* -o, --output PATH - Output HTML file path (required)
* -t, --title TEXT - Custom documentation title
* -d, --diagrams-dir DIR - Custom SVG directory name (default: "diagrams")
* --css PATH - External CSS file URL
* -v, --verbose - Show detailed progress
* -f, --force - Overwrite without confirmation
import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction } import@<interface> QPushButton{ {name}: {instruction} } import@<interface> QPushButton{ {name}: {instruction} } import@<interface> QPushButton{ {name}: {instruction} } import@<interface> QPushButton{ {name}: {instruction} } import@<interface> QPushButton{ {name}: {instruction} } import@<interface> QPushButton{ {name}: {instruction} } import@<interface> QPushButton{ {name}: {instruction} } /** * Define a QPushButton class * @class {class_name} * @burnsPanel {bool} * @order {number} * @classname {string} * @compName {string} * @instruction {string} * @defaultValues {any} * @interface {any} */ class ${currentSymbol}(${interface}) { :