Roadmap¶
go-ruby-xslt/xslt is grown test-first, each capability validated against
golden vectors from the XSLT 1.0 spec and, where Ruby is present, differentially
against Nokogiri::XSLT (libxslt) — rather than built in isolation. The XSLT 1.0
processor is complete.
| Stage | What | Status |
|---|---|---|
| Stylesheet parsing & compile | xsl:stylesheet / xsl:transform and literal-result-element stylesheets parsed and compiled once with ParseString, ready to apply to any number of source documents. |
Done |
| Template rules & conflict resolution | Template rules by match / name / priority / mode, resolved by import precedence → priority → document order, with the built-in default templates for every node kind and xsl:apply-imports. |
Done |
| Instructions | xsl:apply-templates (select, mode), xsl:call-template / xsl:with-param, xsl:value-of, xsl:for-each, xsl:if, xsl:choose / when / otherwise. |
Done |
| Sorting, copy & number | xsl:sort (data-type, order, multiple keys), xsl:copy / xsl:copy-of (deep node-set and RTF copy), and xsl:number (single / any level; 1, 01, a, A, i, I). |
Done |
| Variables, params & keys | xsl:variable and xsl:param (top-level and local, caller-overridable), xsl:key + key(), xsl:decimal-format + format-number(), resolved through go-ruby-nokogiri's XPath extension seam. |
Done |
| Result construction & output | xsl:element / attribute / text / comment / processing-instruction, attribute-value templates and use-attribute-sets; xsl:output (method xml / html / text, indent, encoding, doctype, omit-xml-declaration, cdata-section-elements). |
Done |
| Function library | key, format-number, current, generate-id, system-property, element-available, function-available, unparsed-entity-uri. |
Done |
| Golden vectors & differential oracle | Deterministic golden vectors from the XSLT 1.0 spec hold coverage with no Ruby present; a differential oracle against Nokogiri::XSLT (libxslt) runs where a new-enough Ruby is available. 100% coverage, gofmt + go vet clean, green across all six 64-bit Go arches and three OSes. |
Done |
Documented out-of-scope boundaries¶
These are deliberate, recorded so the module's surface is unambiguous:
- XSLT 1.0 only. XSLT 2.0 / XPath 2.0 (sequences,
xsl:function,xsl:for-each-group, schema awareness, tunnel params) is out of scope. - No external URI resolver.
document()of an external URI and multi-documentxsl:import/xsl:includeare deferred — they compile to no-ops so stylesheets that reference them still load.disable-output-escapingis accepted but emits normally. - Built on go-ruby-nokogiri, not a second XPath engine. The XPath 1.0 engine is go-ruby-nokogiri's, driven through its extension seam — not reimplemented here.
- A reusable library, not the interpreter. The module implements the
deterministic transform; anything that needs a live Ruby binding is the
consumer's job — that is why
rbgobinds this module rather than the reverse.
See Usage & API for the surface and Why pure Go for the libxslt-replacement rationale.