w3c-xml-validator
Version:
A library for programmatically submitting XML for online validation using W3C's Markup Validation Service (https://validator.w3.org/check).
85 lines (54 loc) • 4.22 kB
Markdown
[](https://travis-ci.org/DPassarelli/w3c-xml-validator)
[](https://ci.appveyor.com/project/DPassarelli/w3c-xml-validator?branch=master)
[](https://coveralls.io/github/DPassarelli/w3c-xml-validator?branch=master)
**A Node.js library for programmatically confirming whether a given XML document is both well-formed and valid according to the specified DTD.**
This project adheres to the `standard` coding style (click below for more information):
[](https://github.com/feross/standard#javascript-standard-style)
## Why?
I was frustrated by the lack of programmatic options for validating XML with JavaScript...in particular, for validating against a public DTD. I realize that there may not be a big need for this across the Node.js community as a whole, but nonetheless it is something I required, so I built this.
## W3C
This library relies on the [online validator provided by W3C](https://validator.w3.org). **Please consider donating to the W3C if you find this library useful, because without their tools, this one wouldn't exist.** Click on the logo below:
[](http://w3.org/support/donate/)
## Programmatic Use
This module exports a function that accepts a single value: the XML to be validated. **The XML must contain a `!DOCTYPE` element with an publicly-accessible DTD.** The return value is a `Promise` that will be fulfilled or rejected with the values described below.
_Example:_
```javascript
const validate = require('w3c-xml-validator')
const xml = '<?xml version="1.0" encoding="utf-8"?>...'
validate(xml)
.then(function (response) {
// the response will contain a basic is/is not valid flag, plus warnings and errors (if present)
})
.catch(function (err) {
// the promise may be rejected for any of the reasons listed below
})
```
When the promise is fulfilled, the returned value will be a plain object with the following properties:
| Key | Data type | Notes |
|-----|-----------|-------|
| `doctype` | {String} | The DTD that the validator used. |
| `isValid` | {Boolean} | A simple yes/no based on the results from the W3C validation tool. |
| `warnings` | {Array} of {String} | This is a list of the entries under "Notes and Potential Issues". Each value is the entry title, not the verbose description. |
| `errors` | {Array} of {String} | This is a list of the entries under "Validation Output: # Error(s)". Each value is the entry title that appears in bold, not the verbose description. |
`isValid` will have the same value as `(errors.length === 0)`. `warnings` may have entries, even if the validation is successful.
The promise may be rejected for any of the following reasons:
* The input parameter is `undefined`, `null`, or an empty string.
* The W3C web site is not reachable.
* The W3C web site is not functioning (for example, returns a 5xx HTTP status code).
* The code in this library has a bug that causes the W3C web site to return a 3xx or 4xx HTTP status code.
Check the `message` property of the error object to find out more information about the source of the problem. If you feel there is an issue with the code in this project, please [submit a ticket on GitHub](https://github.com/DPassarelli/w3c-xml-validator/issues) for help.
## Command Line Use
This library can also be called from the command line. The XML to validate can either be piped into the library:
```bash
$ cat file-to-validate.xml | w3c-xml-validator
```
or the file name provided as an argument:
```bash
$ w3c-xml-validator file-to-validate.xml
```
The exit code will be non-zero if `isValid === false`. Any rejections will be output to `stderr`.
Please refer to `LICENSE`.