I'm no good at reading relax/ng, but I think that this: <group> <ref name='os'/> <optional> <ref name='bootloader'/> </optional> </group> <group> <ref name='bootloader'/> <optional> <ref name='os'/> </optional> </group> means I can specify either os, or bootloader, or both. The latter case makes a lot of sense when using pygrub. However, src/xml.c doesn't implement those semantics: 1219 if (!bootloader) { 1220 if ((node = virXPathNode("/domain/os[1]", ctxt)) != NULL) { 1221 /* Analyze of the os description, based on HVM or PV. */ 1222 str = virXPathString("string(/domain/os/type[1])", ctxt); I think that we should just remove the "if (!bootloader) {" bit here - agree? I'm looking at the schema and I don't see (at least) domain/devices/input, which appears to be used in src/xml.c too - is the schema out of date in 0.3.3 ? The tests don't pass xmllint! thanks john -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list