Exalt
A Sublime Text plugin for validating and formatting XML documents
Details
Installs
- Total 15K
- Win 9K
- Mac 4K
- Linux 2K
Nov 21 | Nov 20 | Nov 19 | Nov 18 | Nov 17 | Nov 16 | Nov 15 | Nov 14 | Nov 13 | Nov 12 | Nov 11 | Nov 10 | Nov 9 | Nov 8 | Nov 7 | Nov 6 | Nov 5 | Nov 4 | Nov 3 | Nov 2 | Nov 1 | Oct 31 | Oct 30 | Oct 29 | Oct 28 | Oct 27 | Oct 26 | Oct 25 | Oct 24 | Oct 23 | Oct 22 | Oct 21 | Oct 20 | Oct 19 | Oct 18 | Oct 17 | Oct 16 | Oct 15 | Oct 14 | Oct 13 | Oct 12 | Oct 11 | Oct 10 | Oct 9 | Oct 8 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Windows | 3 | 1 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 3 | 1 | 3 | 1 | 0 | 0 | 0 | 1 | 3 | 4 | 1 | 2 | 2 | 0 | 2 | 2 | 2 | 0 | 2 | 0 | 0 | 1 | 0 | 1 | 2 | 1 | 0 | 0 | 5 | 4 | 10 | 0 |
Mac | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Linux | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
Readme
- Source
- raw.githubusercontent.com
Exalt
Exalt is a Sublime Text plugin for validating and formatting XML documents.
Note: You might also want to check out LSP-lemminx.
The theme in the screenshot is Boxy.
Features
Validate files on the fly
Validate XML, XHTML, and XSLT files on the fly with lxml with these validation mechanisms:
- Document Type Definition (DTD)
- XML schema (XSD)
- RelaxNG schema (RNG)
- Schematron schema
Exalt supports XML catalogs via lxml.
XSLT validation
If the syntax of your current file is set to XSLT, Exalt automatically validates the file against Norman Walsh's Relax NG grammars for XSLT stylesheets.
XSD validation
Exalt uses the xsi:schemaLocation
or the xsi:noNamespaceSchemaLocation
attribute of the root element to validate against the schema defined in that
attribute.
This means Exalt can validate Maven POM files that look like this:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>foobar</groupId>
. . .
</project>
You'll probably want to set up an XML catalog to avoid having to fetch schemas from the internet. See Installing for more information.
xml-model
validation
Exalt also supports the xml-model
processing instruction. That
means that you can have a processing instruction like this before the root
element of your DITA XML 1.2 document (but after the XML declaration,
of course):
<?xml-model href="urn:dita-ng:dita:rng:topic.rng"
schematypens="http://relaxng.org/ns/structure/1.0"?>
Exalt will validate against the schema in the href
pseudo-attribute. It
uses the XML catalog you've set up to resolve the path in the href
pseudo-attribute and the schematypens
pseudo-attribute to determine the the
type of the schema.
You can also use absolute or relative paths in the href
pseudo-attribute:
<?xml-model href="file:///etc/xml/common/schemas/docbook/docbook-5.0/docbook.rng"
schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="../docbook-5.0/xsd/docbook.xsd"
schematypens="http://www.w3.org/2001/XMLSchema"?>
<?xml-model href="file:///etc/xml/common/schemas/dita/schematron/dita-1.2-for-xslt1.sch"
schematypens="http://purl.oclc.org/dsdl/schematron"?>
If your file doesn't validate, you can press ⌘ + Ctrl + E
to jump to the
validation error if it's not already in view.
Format XML & HTML files
Press ⌘ + Ctrl + X
to reformat (pretty-print) an XML or HTML file. If
you have nothing selected, Exalt will format the entire document. If you
have one or more selections, Exalt will format those.
NOTE: When formatting a selection, Exalt assumes the selection is a well-formed XML fragment. It will try to recover, but if your selection isn't well-formed, chances are the result is not what you want.
Exalt tries to format non-well-formed XML files via the libxml2
recover
flag.
Schema caching
Exalt caches the schemas it uses for performance. This is useful if you're working on XML documents that use large schemas or when the schema is stored elsewhere than your computer.
However, this means that if you're developing a schema, the changes in the schema will not take effect until you clear the Exalt schema cache.
To clear the schema cache, run the Exalt: Clear Parser Cache
command via
the Sublime Text command palette. If you need to do it often, you might want
to add a keyboard shortcut for that command in the Sublime Text settings.
Installing
- Install Exalt via Package Control.
- Restart Sublime Text.
(Optional, but recommended.) In
User/Exalt.sublime-settings
, set the path to your XML catalog files.For example:
{ "xml_catalog_files": ["/etc/xml/catalog", "~/.schemas/catalog.xml"] }
By default, the plugin uses the catalog files defined in
Exalt/Exalt.sublime-settings
. Those catalog files might or might not exist on your system.If you want, you can use my
catalogs
repository to install a set of commonly used XML catalogs and schemas. Just set thexml_catalog_files
setting of this plugin to point to thecatalog.xml
file in where you cloned the repo.Alternatively, you can clone
catalogs
into/etc/xml
and create/etc/xml/catalog.xml
with this content:<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"> <nextCatalog catalog="catalogs/catalog.xml"/> </catalog>
If you do that, you don't have to set the
xml_catalog_files
setting.NOTE: If you change XML catalogs in any way, you need to restart Sublime Text 3 for the changes to take effect.
Known issues
- Due to libxml2 issues #573483, #753970, and #753997, none of the available validation methods work for DITA 1.3 files.
- ISO Schematron validation doesn't always report the error position correctly.
Acknowledgements
- Norman Walsh for his RelaxNG grammars for XSLT stylesheets.
- @hoest for SublimeXSLT, where I borrowed
XSLT.tmLanguage
from.