On Thu, Feb 23, 2012 at 05:19:59PM +0000, Daniel P. Berrange wrote: > From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> > > Create an RNG schema that will be installed into > /usr/share/libosinfo/schemas/libosinfo.rng and can > be used to validate XML files > --- > configure.ac | 1 + > data/Makefile.am | 2 +- > data/schemas/Makefile.am | 5 + > data/schemas/libosinfo.rng | 417 ++++++++++++++++++++++++++++++++++++++++++++ > libosinfo.spec.in | 2 + > mingw32-libosinfo.spec.in | 4 + > 6 files changed, 430 insertions(+), 1 deletions(-) > create mode 100644 data/schemas/Makefile.am > create mode 100644 data/schemas/libosinfo.rng > > diff --git a/configure.ac b/configure.ac > index 1980fc1..359fc6d 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -158,6 +158,7 @@ AC_CONFIG_FILES([ > data/devices/Makefile > data/hypervisors/Makefile > data/oses/Makefile > + data/schemas/Makefile > tools/Makefile > scripts/Makefile > test/Makefile > diff --git a/data/Makefile.am b/data/Makefile.am > index 28dbf5a..b5547cf 100644 > --- a/data/Makefile.am > +++ b/data/Makefile.am > @@ -1,5 +1,5 @@ > > -SUBDIRS = devices oses hypervisors > +SUBDIRS = devices oses hypervisors schemas > > EXTRA_DIST = usb.ids pci.ids 95-osinfo.rules.in > > diff --git a/data/schemas/Makefile.am b/data/schemas/Makefile.am > new file mode 100644 > index 0000000..b24852d > --- /dev/null > +++ b/data/schemas/Makefile.am > @@ -0,0 +1,5 @@ > + > +schemadir = $(pkgdatadir)/schemas > +schema_DATA = libosinfo.rng > + > +EXTRA_DIST = $(schema_DATA) > diff --git a/data/schemas/libosinfo.rng b/data/schemas/libosinfo.rng > new file mode 100644 > index 0000000..c4ad08b > --- /dev/null > +++ b/data/schemas/libosinfo.rng > @@ -0,0 +1,417 @@ > +<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> > + <start> > + <ref name='libosinfo'/> > + </start> > + > + <define name='libosinfo'> > + <element name='libosinfo'> > + <attribute name='version'> > + <choice> > + <value>0.0.1</value> > + </choice> > + </attribute> > + > + <zeroOrMore> > + <choice> > + <ref name='device'/> > + <ref name='os'/> > + <ref name='platform'/> > + <ref name='deployment'/> > + </choice> > + </zeroOrMore> > + </element> > + </define> > + > + <define name='device'> > + <element name='device'> > + <attribute name='id'> > + <ref name='url'/> > + </attribute> > + <interleave> > + <element name='name'> > + <text/> > + </element> > + <element name='bus-type'> > + <choice> > + <value>isa</value> > + <value>pci</value> > + <value>usb</value> > + <value>xen</value> > + <value>ps2</value> > + </choice> > + </element> > + <optional> > + <element name='class'> > + <choice> > + <value>audio</value> > + <value>block</value> > + <value>console</value> > + <value>filesystem</value> > + <value>input</value> > + <value>memory.balloon</value> > + <value>net</value> > + <value>video</value> > + <value>watchdog</value> > + </choice> > + </element> > + </optional> > + <optional> > + <element name='vendor'> > + <text/> > + </element> > + </optional> > + <optional> > + <element name='vendor-id'> > + <ref name='hexid'/> > + </element> > + </optional> > + <optional> > + <element name='device'> > + <text/> > + </element> > + </optional> > + <optional> > + <element name='device-id'> > + <ref name='hexid'/> > + </element> > + </optional> > + </interleave> > + </element> > + </define> > + > + <define name="product-attr"> > + <attribute name='id'> > + <ref name='url'/> > + </attribute> > + </define> > + > + <define name="product-content"> > + <interleave> > + <element name='vendor'> > + <text/> hum do you really want tabs ? > + </element> > + <element name='name'> > + <text/> > + </element> > + <element name='short-id'> > + <text/> > + </element> > + <optional> > + <element name='version'> > + <text/> > + </element> > + </optional> > + <optional> > + <element name='codename'> > + <text/> > + </element> > + </optional> > + <optional> > + <element name='family'> > + <text/> > + </element> > + </optional> > + </interleave> > + </define> > + > + <define name="product-dates"> > + <interleave> > + <optional> > + <element name='release-date'> > + <ref name='date'/> > + </element> > + </optional> > + <optional> > + <element name='eol-date'> > + <ref name='date'/> > + </element> > + </optional> > + </interleave> > + </define> > + > + <define name="product-rel"> > + <interleave> > + <optional> > + <element name="upgrades"> > + <attribute name='id'> > + <ref name="url"/> > + </attribute> > + </element> > + </optional> > + <optional> > + <element name="derives-from"> > + <attribute name='id'> > + <ref name="url"/> > + </attribute> > + </element> > + </optional> > + <optional> > + <element name="clones"> > + <attribute name='id'> > + <ref name="url"/> > + </attribute> > + </element> > + </optional> > + </interleave> > + </define> > + > + <define name='devices-rel'> > + <element name='devices'> > + <zeroOrMore> > + <element name='device'> > + <attribute name='id'> > + <ref name='url'/> > + </attribute> > + </element> > + </zeroOrMore> > + </element> > + </define> > + > + <define name='resource-attr'> > + <interleave> > + <optional> > + <element name='cpu'> > + <ref name='num'/> > + </element> > + </optional> > + <optional> > + <element name='n-cpus'> > + <ref name='num'/> > + </element> > + </optional> > + <optional> > + <element name='ram'> > + <ref name='num'/> > + </element> > + </optional> > + <optional> > + <element name='storage'> > + <ref name='num'/> > + </element> > + </optional> > + </interleave> > + </define> > + > + <define name='resources'> > + <element name='resources'> > + <attribute name='arch'> > + <text/> > + </attribute> > + <interleave> > + <optional> > + <element name='minimum'> > + <ref name='resource-attr'/> > + </element> > + </optional> > + <optional> > + <element name='recommended'> > + <ref name='resource-attr'/> > + </element> > + </optional> > + </interleave> > + </element> > + </define> > + > + <define name='iso'> > + <element name='iso'> > + <interleave> > + <optional> > + <element name='volume-id'> > + <text/> > + </element> > + </optional> > + <optional> > + <element name='publisher-id'> > + <text/> > + </element> > + </optional> > + <optional> > + <element name='application-id'> > + <text/> > + </element> > + </optional> > + <optional> > + <element name='system-id'> > + <text/> > + </element> > + </optional> > + </interleave> > + </element> > + </define> > + > + <define name='media'> > + <element name='media'> > + <attribute name='arch'> > + <text/> > + </attribute> > + <optional> > + <attribute name="live"> > + <ref name='bool'/> > + </attribute> > + </optional> > + <optional> > + <attribute name="installer"> > + <ref name='bool'/> > + </attribute> > + </optional> > + <optional> > + <element name='url'> > + <ref name='url'/> > + </element> > + </optional> > + <optional> > + <ref name='iso'/> > + </optional> > + <interleave> > + <optional> > + <element name='initrd'> > + <text/> > + </element> > + </optional> > + <optional> > + <element name='kernel'> > + <text/> > + </element> > + </optional> > + </interleave> > + </element> > + </define> > + > + <define name='treeinfo'> > + <element name='treeinfo'> > + <interleave> > + <optional> > + <element name='family'> > + <text/> > + </element> > + </optional> > + <optional> > + <element name='variant'> > + <text/> > + </element> > + </optional> > + <optional> > + <element name='version'> > + <text/> > + </element> > + </optional> > + <optional> > + <element name='arch'> > + <text/> > + </element> > + </optional> > + </interleave> > + </element> > + </define> > + > + <define name='tree'> > + <element name='tree'> > + <attribute name='arch'> > + <text/> > + </attribute> > + <optional> > + <element name='url'> > + <ref name='url'/> > + </element> > + </optional> > + <optional> > + <ref name='treeinfo'/> > + </optional> > + <interleave> > + <optional> > + <element name='initrd'> > + <text/> > + </element> > + </optional> > + <optional> > + <element name='kernel'> > + <text/> > + </element> > + </optional> > + <optional> > + <element name='boot-iso'> > + <text/> > + </element> > + </optional> > + </interleave> > + </element> > + </define> > + > + <define name='os'> > + <element name='os'> > + <ref name='product-attr'/> > + <ref name='product-content'/> > + <optional> > + <element name='family'> > + <text/> > + </element> > + </optional> > + <interleave> > + <ref name='product-dates'/> > + <ref name='product-rel'/> > + <optional> > + <ref name='devices-rel'/> > + </optional> > + <zeroOrMore> > + <ref name='resources'/> > + </zeroOrMore> > + <zeroOrMore> > + <ref name='media'/> > + </zeroOrMore> > + <zeroOrMore> > + <ref name='tree'/> > + </zeroOrMore> > + </interleave> > + </element> > + </define> > + > + <define name='platform'> > + <element name='platform'> > + <ref name='product-attr'/> > + <ref name='product-content'/> > + <interleave> > + <ref name='product-dates'/> > + <ref name='product-rel'/> > + <optional> > + <ref name='devices-rel'/> > + </optional> > + </interleave> > + </element> > + </define> > + > + <define name='deployment'> > + <element name='deployment'> > + <empty/> > + </element> > + </define> > + > + <define name='date'> > + <data type="string"> > + <param name="pattern">[0-9]{4}-[0-9]{2}-[0-9]{2}</param> > + </data> > + </define> > + > + <define name='hexid'> > + <data type="string"> > + <param name="pattern">[0-9a-fA-F]+</param> > + </data> > + </define> > + > + <define name='bool'> > + <data type='string'> > + <param name='pattern'>true|false</param> > + </data> > + </define> > + > + <define name='num'> > + <data type="string"> > + <param name="pattern">[0-9]+</param> > + </data> > + </define> > + > + <define name='url'> > + <data type="string"> > + <param name="pattern">\w+://.*</param> > + </data> > + </define> > +</grammar> > \ No newline at end of file > diff --git a/libosinfo.spec.in b/libosinfo.spec.in > index 8b98be0..192b660 100644 > --- a/libosinfo.spec.in > +++ b/libosinfo.spec.in > @@ -101,11 +101,13 @@ rm -fr %{buildroot} > %{_bindir}/osinfo-detect > %dir %{_datadir}/libosinfo/ > %dir %{_datadir}/libosinfo/data/ > +%dir %{_datadir}/libosinfo/schemas/ > %{_datadir}/libosinfo/data/usb.ids > %{_datadir}/libosinfo/data/pci.ids > %{_datadir}/libosinfo/data/devices > %{_datadir}/libosinfo/data/oses > %{_datadir}/libosinfo/data/hypervisors > +%{_datadir}/libosinfo/schemas/libosinfo.rng > %{_libdir}/%{name}-1.0.so.* > /lib/udev/rules.d/95-osinfo.rules > %if %{with_gir} > diff --git a/mingw32-libosinfo.spec.in b/mingw32-libosinfo.spec.in > index 2a0379a..4287271 100644 > --- a/mingw32-libosinfo.spec.in > +++ b/mingw32-libosinfo.spec.in > @@ -69,11 +69,15 @@ rm -rf $RPM_BUILD_ROOT > %dir %{_mingw32_includedir}/libosinfo-1.0/ > %dir %{_mingw32_includedir}/libosinfo-1.0/osinfo > %{_mingw32_includedir}/libosinfo-1.0/osinfo/*.h > +%dir %{_mingw32_datadir}/libosinfo > +%dir %{_mingw32_datadir}/libosinfo/data > +%dir %{_mingw32_datadir}/libosinfo/schemas > %{_mingw32_datadir}/libosinfo/data/usb.ids > %{_mingw32_datadir}/libosinfo/data/pci.ids > %{_mingw32_datadir}/libosinfo/data/devices > %{_mingw32_datadir}/libosinfo/data/oses > %{_mingw32_datadir}/libosinfo/data/hypervisors > +%{_mingw32_datadir}/libosinfo/schemas/libosinfo.rng Except for the minor tab issue, looks fine to me, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/