[rnv] Initial import (#995025)

Michael Šimáček msimacek at fedoraproject.org
Fri Aug 16 15:18:29 UTC 2013


commit 7d0734fc6da45f0702952f2baf22925c26eeab6f
Author: Michael Simacek <msimacek at redhat.com>
Date:   Fri Aug 16 17:17:14 2013 +0200

    Initial import (#995025)

 .gitignore                         |    1 +
 arx.1                              |   75 +++++++++++++
 rnv.arx-conf-with-docbook.patch    |   80 ++++++++++++++
 rnv.rvp-pl-wrong-interpreter.patch |    8 ++
 rnv.spec                           |   91 ++++++++++++++++
 rnv.system-paths-lookup.patch      |  204 ++++++++++++++++++++++++++++++++++++
 rvp.1                              |   74 +++++++++++++
 sources                            |    1 +
 xsdck.1                            |   18 +++
 9 files changed, 552 insertions(+), 0 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index e69de29..27d7e57 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/rnv-1.7.11.tar.xz
diff --git a/arx.1 b/arx.1
new file mode 100644
index 0000000..50faef6
--- /dev/null
+++ b/arx.1
@@ -0,0 +1,75 @@
+.TH ARX 1 "2013-8-12"
+
+.SH NAME
+arx \- automatically determines the type of an XML document
+
+.SH SYNOPSIS
+\fBarx\fP [\fIOPTIONS\fP] \fIdocument.xml\fP {\fIconfig_file.conf\fP ...}
+
+.SH DESCRIPTION
+\fBARX\fP is a tool to automatically determine the type of a document from its name and contents. It is inspired by James Clark's schema location approach for nXML. 
+
+.SH OPTIONS
+ARX either prints a string corresponding to the document's type or nothing if the type cannot be determined. You can specify configuration files to override defaults in /etc/arx.conf. The options are:
+.TP
+.B -n
+turns off prepending base path of the configuration file to the result, even if it looks like a relative path (useful when the configuration file and the grammars are in separate directories, or for association with something that is not a file)
+.TP
+.B -v
+prints current version
+.TP
+.B -h
+displays usage summary and exits
+.SH FILES
+/etc/rnv/arx.conf
+
+The configuration file must conform to the following grammar:
+ arx = grammars route*
+ grammars = "grammars" "{" type2string+ "}"
+ type2string = type "=" literal
+ type = nmtoken
+ route = match|nomatch|valid|invalid
+ match = "=~" regexp "=>" type
+ nomatch = "!~" regexp "=>" type
+ valid = "valid" "{" rng "}" "=>" type
+ invalid = "!valid" "{" rng "}" "=>" type
+
+ literal = string in '"', '"' inside must be prepended by '\'
+ regexp = string in '/', '/' inside must be prepended by '\'
+ rng = Relax NG Compact Syntax
+
+Comments start with # and continue till the end of line.
+
+Rules are processed sequentially, the first matching rule determines the file's type. Relax NG templates are matched against file contents, regular expressions are applied to file names.
+
+.SH EXAMPLES
+The sample configuration below associates documents with grammars for XSLT, DocBook or XSL FO.
+
+ grammars {
+ docbook="docbook.rnc"
+ xslt="xslt.rnc"
+ xslfo="fo.rnc"
+ }
+
+ valid {
+ start = element (book|article|chapter|reference) {any}
+ any = (element * {any}|attribute * {text}|text)*
+ } => docbook
+
+ !valid {
+ default namespace xsl = "http://www.w3.org/1999/XSL/Transform"
+ start = element *-xsl:* {not-xsl}
+ not-xsl = (element *-xsl:* {not-xsl}|attribute * {text}|text)*
+ } => xslt
+
+ =~/.*\.xsl/ => xslt
+ =~/.*\.fo/ => xslfo
+
+.SH HOMEPAGE
+http://sourceforge.net/projects/rnv/
+
+.SH AUTHOR
+Michael\ Simacek\ <msimacek at redhat.com>. This man page was made from the readme written by \fBRNV\fP's author David Tolpin <dvd at davidashen.net>.
+
+.SH "SEE ALSO"
+rnv(1), rvp(1), xmllint(1), xmlstarlet(1), trang(1)
diff --git a/rnv.arx-conf-with-docbook.patch b/rnv.arx-conf-with-docbook.patch
new file mode 100644
index 0000000..8ad6a9b
--- /dev/null
+++ b/rnv.arx-conf-with-docbook.patch
@@ -0,0 +1,80 @@
+Index: tools/arx.conf
+===================================================================
+--- tools/arx.conf	(revision 492)
++++ tools/arx.conf	(working copy)
+@@ -4,46 +4,46 @@
+ # most of them can be obtained from http://relaxng.org/
+ 
+ grammars {
+-#  docbook="docbook.rnc"
++  docbook="/usr/share/xml/docbook5/schema/rng/5.0/docbook.rnc"
+ #  website="website-full.rnc"
+-  xslt="xslt.rnc"
++#  xslt="xslt.rnc"
+ #  xhtml="xhtml.rnc"
+-  xslfo="fo.rnc"
+-  relaxng="relaxng.rnc"
+-  none="none.rnc"
++#  xslfo="fo.rnc"
++#  relaxng="relaxng.rnc"
++#  none="none.rnc"
+ }
+ 
++ valid {
++   start = element (set|setindex|book|part|reference|preface|chapter|appendix|article|bibliography|glossary|index|refentry|sect1|sect2|sect3|sect4|sect5|section) {any}
++   any = (element * {any}|attribute * {text}|text)*
++ } => docbook
++ 
+ # valid {
+-#   start = element (set|setindex|book|part|reference|preface|chapter|appendix|article|bibliography|glossary|index|refentry|sect1|sect2|sect3|sect4|sect5|section) {any}
+-#   any = (element * {any}|attribute * {text}|text)*
+-# } => docbook
+-# 
+-# valid {
+ #   start = element (webpage) {any}
+ #   any = (element * {any}|attribute * {text}|text)*
+ # } => website
+ 
+-valid {
+-  namespace fo="http://www.w3.org/1999/XSL/Format"
+-  start = element fo:root {any}
+-  any = (element * {any}|attribute * {text}|text)*
+-} => xslfo
++#valid {
++#  namespace fo="http://www.w3.org/1999/XSL/Format"
++#  start = element fo:root {any}
++#  any = (element * {any}|attribute * {text}|text)*
++#} => xslfo
+ 
+-valid {
+-  namespace rng = "http://relaxng.org/ns/structure/1.0"
+-  start = element rng:* {any}
+-  any = (element * {any}|attribute * {text}|text)*
+-} => relaxng
++#valid {
++#  namespace rng = "http://relaxng.org/ns/structure/1.0"
++#  start = element rng:* {any}
++#  any = (element * {any}|attribute * {text}|text)*
++#} => relaxng
+ 
+-!valid {
+-  default namespace xsl = "http://www.w3.org/1999/XSL/Transform"
+-  start = element *-xsl:* {not-xsl}
+-  not-xsl = (element *-xsl:* {not-xsl}|attribute * {text}|text)*
+-} => xslt
++#!valid {
++#  default namespace xsl = "http://www.w3.org/1999/XSL/Transform"
++#  start = element *-xsl:* {not-xsl}
++#  not-xsl = (element *-xsl:* {not-xsl}|attribute * {text}|text)*
++#} => xslt
+ 
+ # =~/.*\.x?ht(ml?)?/ => xhtml
+-=~/.*\.xsl/ => xslt
+-# =~/.*\.dbx/ => docbook
++#=~/.*\.xsl/ => xslt
++ =~/.*\.dbx/ => docbook
+ # =~/.*doc\/[^\/]+\.xml/ => docbook
+-=~/.*\.fo/ => xslfo
+-=~/.*/ => none
++#=~/.*\.fo/ => xslfo
++#=~/.*/ => none
diff --git a/rnv.rvp-pl-wrong-interpreter.patch b/rnv.rvp-pl-wrong-interpreter.patch
new file mode 100644
index 0000000..a493073
--- /dev/null
+++ b/rnv.rvp-pl-wrong-interpreter.patch
@@ -0,0 +1,8 @@
+--- tools/rvp.pl.orig	2013-08-14 14:51:51.519762786 +0200
++++ tools/rvp.pl	2013-08-14 14:52:12.238827078 +0200
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/perl
++#!/usr/bin/perl
+ # $Id: rvp.pl 301 2004-01-14 16:42:38Z dvd $
+ 
+ # embedding sample for RVP, a part of RNV, http://davidashen.net/rnv.html
diff --git a/rnv.spec b/rnv.spec
new file mode 100644
index 0000000..2beffae
--- /dev/null
+++ b/rnv.spec
@@ -0,0 +1,91 @@
+Name:           rnv
+Version:        1.7.11
+Release:        5%{?dist}
+Summary:        Implementation of Relax NG Compact Syntax validator in ANSI C
+
+License:        BSD
+URL:            http://sourceforge.net/projects/rnv/
+Source0:        http://downloads.sourceforge.net/project/rnv/Sources/%{version}/%{name}-%{version}.tar.xz
+Source1:        arx.1
+Source2:        xsdck.1
+Source3:        rvp.1
+# Sent upstream via email
+Patch0:    %{name}.system-paths-lookup.patch
+# Adds docbook to arx.conf, because upstream version doesn't ship any useful schemas
+Patch1:    %{name}.arx-conf-with-docbook.patch
+Patch2:    %{name}.rvp-pl-wrong-interpreter.patch
+
+BuildRequires:  expat-devel
+BuildRequires:  autoconf
+BuildRequires:  automake
+Requires:       docbook5-schemas
+
+%package -n vim-rnv
+Summary:        Vim plugin for validating XML files against Relax NG Compact schemas using RNV
+
+Requires:       vim-common
+Requires:       %{name}%{?_isa} = %{version}-%{release}
+BuildArch:      noarch
+
+%description 
+RNV uses Relax NG compact syntax schemas to check if a give XML file is
+valid in respect to the language defined by the Relax NG schema. RNV
+uses Expat for XML parsing.
+
+%description -n vim-rnv
+Vim plugin providing redefined make command that validates
+XML files against Relax NG schemas.
+
+%prep
+%setup -q
+%patch0
+%patch1
+%patch2
+
+cp -p %SOURCE1 .
+cp -p %SOURCE2 .
+cp -p %SOURCE3 .
+
+%build
+autoreconf -i
+%configure --enable-dxl
+make %{?_smp_mflags}
+
+%install
+%make_install
+
+%files
+%{_bindir}/rnv
+%{_bindir}/arx
+%{_bindir}/xsdck
+%{_bindir}/rvp
+%{_mandir}/man1/rnv.1*
+%{_mandir}/man1/rvp.1*
+%{_mandir}/man1/arx.1*
+%{_mandir}/man1/xsdck.1*
+%dir %{_sysconfdir}/rnv
+%config(noreplace) %{_sysconfdir}/rnv/arx.conf
+%doc COPYING ChangeLog readme.txt
+%docdir %{_docdir}/rnv/examples
+%doc %{_docdir}/rnv/examples/rvp.py*
+%doc %{_docdir}/rnv/examples/rvp.pl
+
+%files -n vim-rnv
+%{_datadir}/vim/vimfiles/plugin/rnv.vim
+
+%changelog
+* Fri Aug 16 2013 Michael Simacek <msimacek at redhat.com> - 1.7.11-5
+- Modified subpackages to comply to Package Guidelines
+
+* Fri Aug 16 2013 Michael Simacek <msimacek at redhat.com> - 1.7.11-4
+- Package autoreconf'ed instead of patching Makefile.in
+
+* Thu Aug 15 2013 Michael Simacek <msimacek at redhat.com> - 1.7.11-3
+- Renamed vim plugin subpackage to follow naming guidelines
+
+* Wed Aug 14 2013 Michael Simacek <msimacek at redhat.com> - 1.7.11-2
+- Patched arx, rnv and build to use global config file /etc/arx.conf and global grammars in /usr/shar/rnv/grammars
+- Created man pages for arx, rvp and xsdck
+
+* Thu Aug 08 2013 Michael Simacek <msimacek at redhat.com> - 1.7.11-1
+- Initial version
diff --git a/rnv.system-paths-lookup.patch b/rnv.system-paths-lookup.patch
new file mode 100644
index 0000000..e843832
--- /dev/null
+++ b/rnv.system-paths-lookup.patch
@@ -0,0 +1,204 @@
+diff -ur ../rnv-orig/arx.c ./arx.c
+--- ../rnv-orig/arx.c	2013-08-14 12:49:45.972975194 +0200
++++ ./arx.c	2013-08-14 12:55:36.221042398 +0200
+@@ -42,6 +42,10 @@
+ #include "er.h"
+ #include "ary.h"
+ 
++#ifndef ARX_CONF_PATH
++#define ARX_CONF_PATH "/etc/rnv/arx.conf"
++#endif
++
+ extern int rn_notAllowed;
+ 
+ /* rules */
+@@ -427,6 +431,25 @@
+ static void version(void) {(*er_printf)("arx version %s\n",ARX_VERSION);}
+ static void usage(void) {(*er_printf)("usage: arx {-[nvh?]} document.xml arx.conf {arx.conf}\n");}
+ 
++int process() {
++      int i;
++      int fd;
++      for(i=0;i!=i_r;++i) {
++	switch(rules[i][0]) {
++	case VALID: if((ok=wf)) {validate(rules[i][1],fd=open(xml,O_RDONLY)); close(fd);} break;
++	case INVAL: if((ok=wf)) {validate(rules[i][1],fd=open(xml,O_RDONLY)); close(fd); ok=wf&&!ok;} break;
++	case MATCH: ok=rx_match(string+rules[i][1],xml,strlen(xml)); break;
++	case NOMAT: ok=!rx_match(string+rules[i][1],xml,strlen(xml)); break;
++	default: assert(0);
++	}
++	if(ok) {
++	  printf("%s\n",string+rules[i][2]);
++	  return 1;
++	}
++      }
++      return 0;
++}
++
+ int main(int argc,char **argv) {
+   int fd;
+   init();
+@@ -447,27 +470,18 @@
+     END_OF_OPTIONS:;
+   }
+ 
+-  if(!(*(argv)&&*(argv+1))) {usage(); return 1;}
++  if(!(*(argv))) {usage(); return 1;}
+ 
+   xml=*(argv++); if((wf=(fd=open(xml,O_RDONLY))!=-1)) close(fd);
+-  do {
+-    if(arx(*(argv++))) {
+-      int i;
+-      for(i=0;i!=i_r;++i) {
+-	switch(rules[i][0]) {
+-	case VALID: if((ok=wf)) {validate(rules[i][1],fd=open(xml,O_RDONLY)); close(fd);} break;
+-	case INVAL: if((ok=wf)) {validate(rules[i][1],fd=open(xml,O_RDONLY)); close(fd); ok=wf&&!ok;} break;
+-	case MATCH: ok=rx_match(string+rules[i][1],xml,strlen(xml)); break;
+-	case NOMAT: ok=!rx_match(string+rules[i][1],xml,strlen(xml)); break;
+-	default: assert(0);
+-	}
+-	if(ok) {
+-	  printf("%s\n",string+rules[i][2]);
+-	  return EXIT_SUCCESS;
+-	}
++  if(*argv){
++    do{
++      if(arx(*(argv++))) {
++        if(process()) return EXIT_SUCCESS;
+       }
+-    }
+-    clear();
+-  } while(*argv);
++      clear();
++    }while(*argv);  
++  } else if(arx(ARX_CONF_PATH)) {
++    if(process()) return EXIT_SUCCESS;
++  }
+   return EXIT_FAILURE;
+ }
+diff -ur ../rnv-orig/Makefile.am ./Makefile.am
+--- ../rnv-orig/Makefile.am	2013-08-14 12:49:45.973975194 +0200
++++ ./Makefile.am	2013-08-14 12:56:06.797129486 +0200
+@@ -6,9 +6,12 @@
+ 
+ TESTS = rnvtest
+ 
+-man_MANS = rnv.1
++man_MANS = rnv.1 arx.1 rvp.1 xsdck.1
+ 
++rnvconfdir = $(sysconfdir)/rnv
++rnvconf_DATA = tools/arx.conf
+ 
++grammarsdir = $(datadir)/rnv/grammars
+ 
+ librnv1_a_SOURCES = \
+ 	ary.h ary.c \
+@@ -39,7 +42,7 @@
+ 
+ 
+ 
+-rnv_CPPFLAGS = -DRNV_VERSION=\"@VERSION@\"
++rnv_CPPFLAGS = -DRNV_VERSION=\"@VERSION@\" -DGRAMMAR_PATH=\"$(grammarsdir)/\"
+ rnv_LDADD = librnv1.a librnv2.a
+ 
+ rnv_SOURCES = \
+@@ -48,7 +51,7 @@
+ 
+ 
+ 
+-arx_CPPFLAGS = -DARX_VERSION=\"@VERSION@\"
++arx_CPPFLAGS = -DARX_VERSION=\"@VERSION@\" -DARX_CONF_PATH=\"$(rnvconfdir)/arx.conf\"
+ arx_LDADD = librnv1.a
+ 
+ arx_SOURCES = \
+@@ -76,7 +79,11 @@
+ rnvtest_SOURCES = \
+ 	test.c
+ 
++examplesdir = $(docdir)/examples
++examples_DATA = tools/rvp.pl tools/rvp.py
+ 
++vimplugindir = $(datadir)/vim/vimfiles/plugin
++vimplugin_DATA = tools/rnv.vim
+ 
+ EXTRA_DIST = \
+ 	scm/dsl.scm \
+@@ -105,6 +112,9 @@
+ 	readme.txt \
+ 	readme32.txt \
+ 	rnv.1 \
++	rvp.1 \
++	arx.1 \
++	xsdck.1 \
+ 	src.txt \
+ 	\
+ 	build_vms.com \
+diff -ur ../rnv-orig/tools/rnv.vim ./tools/rnv.vim
+--- ../rnv-orig/tools/rnv.vim	2013-08-16 14:47:08.641993845 +0200
++++ ./tools/rnv.vim	2013-08-14 12:50:51.918190562 +0200
+@@ -6,7 +6,7 @@
+ let s:cpo_save = &cpo
+ set cpo-=C
+ 
+-setlocal makeprg=rnv\ -q\ `arx\ %\ /usr/local/share/rng-c/arx.conf`\ %
++setlocal makeprg=rnv\ -q\ `arx\ -n\ %\ `\ %
+ setlocal errorformat=error\ (%f\\,%l\\,%c):\ %m
+ 
+ let &cpo = s:cpo_save
+diff -ur ../rnv-orig/xcl.c ./xcl.c
+--- ../rnv-orig/xcl.c	2013-08-14 12:49:45.973975194 +0200
++++ ./xcl.c	2013-08-14 12:55:49.893081430 +0200
+@@ -38,6 +38,10 @@
+ #define PIXGFILE "davidashen-net-xg-file"
+ #define PIXGPOS "davidashen-net-xg-pos"
+ 
++#ifndef GRAMMAR_PATH
++#define GRAMMAR_PATH "/usr/share/rnv/grammars/"
++#endif
++
+ static int peipe,verbose,nexp,rnck;
+ static char *xml;
+ static XML_Parser expat=NULL;
+@@ -225,6 +229,8 @@
+ 
+ int main(int argc,char **argv) {
+   init();
++  char *path = 0;
++  int fd;
+ 
+   peipe=0; verbose=1; nexp=NEXP; rnck=0;
+   while(*(++argv)&&**argv=='-') {
+@@ -254,10 +260,24 @@
+ 
+   if(!*(argv)) {usage(); return 1;}
+ 
+-  if((ok=start=rnl_fn(*(argv++)))) {
++  if((fd=open(*argv,O_RDONLY))!=-1){
++    ok=start=rnl_fd(*argv,fd);
++  } else {
++    path=m_alloc(sizeof(GRAMMAR_PATH)+strlen(*argv),sizeof(char));
++    strcpy(path,GRAMMAR_PATH);
++    strcat(path,*argv);
++    if((fd=open(path, O_RDONLY))==-1) {
++      (*er_printf)("File %s not found.", *argv);
++      return -1;
++    }
++    ok=start=rnl_fd(path,fd);
++  }
++
++  argv++;
++  if(ok) {
+     if(*argv) {
+       do {
+-	int fd; xml=*argv;
++	xml=*argv;
+ 	if((fd=open(xml,O_RDONLY))==-1) {
+ 	  (*er_printf)("I/O error (%s): %s\n",xml,strerror(errno));
+ 	  ok=0;
+@@ -279,5 +299,6 @@
+     }
+   }
+ 
++  if(path) m_free(path);
+   return ok?EXIT_SUCCESS:EXIT_FAILURE;
+ }
diff --git a/rvp.1 b/rvp.1
new file mode 100644
index 0000000..6c89022
--- /dev/null
+++ b/rvp.1
@@ -0,0 +1,74 @@
+.TH RVP 1 "2013-8-12"
+
+.SH NAME
+rvp \- Relax NG validation pipe
+
+.SH SYNOPSIS
+\fBrvp\fP {\fB-q\fP|\fB-s\fP|\fB-v\fP|\fB-h\fP} {\fIschema.rnc\fP}
+
+.SH OPTIONS
+.TP
+.B -q
+returns only error numbers, suppresses messages
+.TP
+.B -s
+takes less memory and runs slower
+.TP
+.B -v
+prints current version
+.TP
+.B -h
+displays usage summary and exits
+
+.SH DESCRIPTION
+\fBRVP\fP is abbreviation for \fBRelax NG Validation Pipe\fP. 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" .
+
+.TP
+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).
+.TP
+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.
+.TP
+Either er or error responses are returned, not both; -q chooses between concise and verbose forms (invocation syntax described later).
+.TP
+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.
+.TP
+Quit is not opposite of start; instead, it quits RVP.
+
+.SH 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.
+
+.SH HOMEPAGE
+http://sourceforge.net/projects/rnv/
+
+.SH AUTHOR
+Michael\ Simacek\ <msimacek at redhat.com>. This man page was made from the readme written by \fBRNV\fP's author David Tolpin <dvd at davidashen.net>.
+
+.SH "SEE ALSO"
+rnv(1), arx(1), xmllint(1), xmlstarlet(1), trang(1)
+
diff --git a/sources b/sources
index e69de29..4a3fb11 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+c8e10bf9a5aed35c55fd9f4310168584  rnv-1.7.11.tar.xz
diff --git a/xsdck.1 b/xsdck.1
new file mode 100644
index 0000000..e4a4081
--- /dev/null
+++ b/xsdck.1
@@ -0,0 +1,18 @@
+.TH XSDCK 1 "2013-8-12"
+.SH NAME
+xsdck \- rnv plugin for XSD datatypes
+
+.SH SYNOPSIS
+\fBrnv -d xsdck\fP [\fIRNV_OPTIONS\fP] \fI grammar.rnc\fP [\fIdocument.xml\fP ...]
+
+.SH DESCRIPTION
+Both \fBRNV\fP and \fBRVP\fP can use pluggable datatypes. This module provides support for \fBXSD\fP datatypes.
+
+.SH HOMEPAGE
+http://sourceforge.net/projects/rnv/
+.\"--------------------------------------------------------------
+.SH AUTHOR
+Michael Simacek <msimacek at redhat.com>. This man page was made from the readme written by \fBRNV\fP's author David Tolpin <dvd at davidashen.net>.
+.\"--------------------------------------------------------------
+.SH "SEE ALSO"
+rnv(1), rvp(1), xmllint(1), xmlstarlet(1), trang(1)


More information about the scm-commits mailing list