[virt-tools-list] [PATCH libosinfo 1/4] Add an RNG schema for the libosinfo XML documents
Daniel Veillard
veillard at redhat.com
Fri Feb 24 07:36:20 UTC 2012
On Thu, Feb 23, 2012 at 05:19:59PM +0000, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
>
> 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 at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the virt-tools-list
mailing list