This patch is my first experience playing with nested grammars, as documented in http://relaxng.org/tutorial-20011203.html#IDA3PZR. I plan on doing more overrides in order to make the RelaxNG grammar mirror the C code refactoring into a common virStorageSource, but where different clients of that source do not support the same subset of functionality. By starting with something fairly easy to validate, I can make sure my later patches will be possible. This patch adds a use of the no-op <ref name='sourceStartupPolicy'/> to the disksnapshot definition, so that the snapshot version of a type='file' <source> more closely resembles the version in domaincommon. A future patch will merge the two files into using a common define, but this patch is sufficient for testing that adding <source startupPolicy='optional'/> in any of the tests/domainsnapshotxml2xmlin/*.xml files still gets rejected unless it occurs within the <domain> subelement, because the definition of startupPolicy is empty outside of domain.rng. * docs/schemas/storagecommon.rng (storageStartupPolicy) (storageSourceExtra): Create no-op defaults. * docs/schemas/domainsnapshot.rng (domain): Use nested grammar to avoid restricting <domain>. (storageSourceExtra): Create new override. (disksnapshot): Access overrides through common names. * docs/schemas/domaincommon.rng (disk): Access overrides through common names. * docs/schemas/domain.rng (storageStartupPolicy) (storageSourceExtra): Create new overrides. Signed-off-by: Eric Blake <eblake@xxxxxxxxxx> --- docs/schemas/domain.rng | 14 +++++++++++++- docs/schemas/domaincommon.rng | 11 ++++++----- docs/schemas/domainsnapshot.rng | 21 +++++++++++++++++---- docs/schemas/storagecommon.rng | 14 ++++++++++++++ 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng index cf0be68..114b87e 100644 --- a/docs/schemas/domain.rng +++ b/docs/schemas/domain.rng @@ -1,9 +1,21 @@ <?xml version="1.0"?> <grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> - <!-- We handle only document defining a domain --> + <!-- Grammar for accepting a domain element, both as top level, and + also suitable for inclusion in domainsnapshot.rng --> <start> <ref name="domain"/> </start> <include href='domaincommon.rng'/> + + <define name='storageStartupPolicy' combine='choice'> + <!-- overrides the no-op version in storagecommon.rng --> + <ref name='startupPolicy'/> + </define> + + <define name='storageSourceExtra' combine='choice'> + <!-- overrides the no-op version in storagecommon.rng --> + <ref name='diskspec'/> + </define> + </grammar> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 59f3fdd..df2c839 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -1213,7 +1213,7 @@ </attribute> </optional> <optional> - <ref name="startupPolicy"/> + <ref name="storageStartupPolicy"/> </optional> <optional> <ref name='devSeclabel'/> @@ -1235,7 +1235,7 @@ </attribute> </optional> <optional> - <ref name="startupPolicy"/> + <ref name="storageStartupPolicy"/> </optional> <optional> <ref name='devSeclabel'/> @@ -1255,7 +1255,7 @@ <ref name="absFilePath"/> </attribute> <optional> - <ref name="startupPolicy"/> + <ref name="storageStartupPolicy"/> </optional> <empty/> </element> @@ -1296,7 +1296,7 @@ </attribute> </optional> <optional> - <ref name="startupPolicy"/> + <ref name="storageStartupPolicy"/> </optional> <optional> <ref name='devSeclabel'/> @@ -1306,10 +1306,11 @@ </interleave> </group> </choice> - <ref name="diskspec"/> + <ref name="storageSourceExtra"/> </interleave> </element> </define> + <define name="diskSourceNetwork"> <attribute name="protocol"> <choice> diff --git a/docs/schemas/domainsnapshot.rng b/docs/schemas/domainsnapshot.rng index 644da90..bec12db 100644 --- a/docs/schemas/domainsnapshot.rng +++ b/docs/schemas/domainsnapshot.rng @@ -75,7 +75,12 @@ <ref name="UUID"/> </element> </element> - <ref name='domain'/> + <!-- Nested grammar ensures that any of our overrides of + storagecommon/domaincommon defines do not conflict + with any domain.rng overrides. --> + <grammar> + <include href='domain.rng'/> + </grammar> </choice> </optional> <optional> @@ -102,6 +107,11 @@ </choice> </define> + <define name='storageSourceExtra' combine='choice'> + <!-- overrides the no-op version in storagecommon.rng --> + <ref name='disksnapshotdriver'/> + </define> + <define name='disksnapshot'> <element name='disk'> <attribute name='name'> @@ -138,10 +148,13 @@ <ref name='absFilePath'/> </attribute> </optional> + <optional> + <ref name='storageStartupPolicy'/> + </optional> <empty/> </element> </optional> - <ref name='disksnapshotdriver'/> + <ref name='storageSourceExtra'/> </interleave> </group> <group> @@ -157,7 +170,7 @@ <empty/> </element> </optional> - <ref name='disksnapshotdriver'/> + <ref name='storageSourceExtra'/> </interleave> </group> <group> @@ -170,7 +183,7 @@ <ref name='diskSourceNetwork'/> </element> </optional> - <ref name='disksnapshotdriver'/> + <ref name='storageSourceExtra'/> </interleave> </group> </choice> diff --git a/docs/schemas/storagecommon.rng b/docs/schemas/storagecommon.rng index 2d61abc..372832d 100644 --- a/docs/schemas/storagecommon.rng +++ b/docs/schemas/storagecommon.rng @@ -79,4 +79,18 @@ </choice> </define> + <define name='storageStartupPolicy'> + <!-- Use a combine='choice' override in client files that want to + add additional attributes to a <source> sub-element + associated with a storage source --> + <notAllowed/> + </define> + + <define name='storageSourceExtra'> + <!-- Use a combine='choice' override in client files that want to + add additional elements as siblings of a <source> sub-element + associated with a storage source --> + <notAllowed/> + </define> + </grammar> -- 1.9.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list