rvp man page

rvp — Relax NG validation pipe

Synopsis

rvp {-q|-s|-v|-h} {schema.rnc}

Options

-q
returns only error numbers, suppresses messages
-s
takes less memory and runs slower
-v
prints current version
-h
displays usage summary and exits

Description

RVP is abbreviation for Relax NG Validation Pipe. It reads validation primitives from the standard input and reports result to the standard output; it's main purpose is to ease embedding of a Relax NG validator into various languages and environment. An application would launch RVP as a parallel process and use a simple protocol to perform validation. The protocol, in BNF, is:

query ::= (
quit
| start
| start-tag-open
| attribute
| start-tag-close
| text
| end-tag) z.
quit ::= "quit".
start ::= "start" [gramno].
start-tag-open ::= "start-tag-open" patno name.
attribute ::= "attribute" patno name value.
start-tag-close :: = "start-tag-close" patno name.
text ::= ("text"|"mixed") patno text.
end-tag ::= "end-tag" patno name.
response ::= (ok | er | error) z.
ok ::= "ok" patno.
er ::= "er" patno erno.
error ::= "error" patno erno error.
z ::= "\0" .

RVP assumes that the last colon in a name separates the local partfrom the namespace URI (it is what one gets if specifies `:' as namespace separator to Expat).

Error codes can be grabbed from rvp sources by grep _ER_.h and OR-ing them with corresponding masks from erbit.h. Additionally, error 0 is the protocol format error.

Either er or error responses are returned, not both; -q chooses between concise and verbose forms (invocation syntax described later).

Start passes the index of a grammar (first grammar in the list of command-line arguments has number 0); if the number is omitted, 0 is assumed.

Quit is not opposite of start; instead, it quits RVP.

Examples

To assist embedding RVP, samples in Perl and Python are provided. The scripts use Expat wrappers for each of the languages to parse documents; they take a Relax NG grammar (in the compact syntax) as the command line argument and read the XML from the standard input. For example, the following commands validate rnv.dbx against docbook.rnc:

perl rvp.pl docbook.rnc < rnv.dbx
python rvp.py docbook.rnc < rnv.dbx

The scripts are kept simple and unobscured to illustrate the technique, rather than being designed as general-purpose modules. Programmers using Perl, Python, Ruby and other languages are encouraged to implement and share reusable RVP-based components for their languages of choice.

Homepage

http://sourceforge.net/projects/rnv/

Author

Michael Simacek <msimacek@redhat.com>. This man page was made from the readme written by RNV's author David Tolpin <dvd@davidashen.net>.

See Also

rnv(1), arx(1), xmllint(1), xmlstarlet(1), trang(1)

Referenced By

arx(1), xsdck(1).

2013-8-12