On 5/15/25 10:42, Kirill Shchetiniuk via Devel wrote:
Hello everyone,
Sometime ago I sent a patch changing the XML schema to add GTK support for libvirt. As
the type for one path argument, I used the <text/> type, simply copying the similar
approach from another place in the XML schema definition. I was told that it's not the
best way to use the <text/> type for paths and that absFilePath, a defined basic
type for paths, should be used instead.
After this, I decided to fix this in a place where I had seen the same approach, too.
After further investigation, I found a lot more places where the <text/> type is
used for paths. Moreover, I found out that we have at least 4 type definitions for paths
(files and directories). Some of these types accept simply everything, others paths
starting with "/" or even Windows-style disk names.
Preface: libxml2 error reporting is horrible. At least wrt schema
validation. It gives a binary result effectively: XML is valid, XML is
not valid (and good luck figuring out why).
<define name="filePath">
<data type="string">
<param name="pattern">.+</param>
</data>
</define>
<define name="dirPath">
<data type="string">
<param name="pattern">.+</param>
</data>
</define>
These two ^^ should be merged into one IMO. Users will never get an
error (from libxml2): "filePath expected, found dirPath" or vice versa.
<define name="absFilePath">
<data type="string">
<param name="pattern">(/|[a-zA-Z]:\\).+</param>
</data>
</define>
<define name="absDirPath">
<data type="string">
<param name="pattern">/.*</param>
</data>
</define>
This one is a bit tricky, because one accepts Windows style of paths
(C:\someDir) the other doesn't. Initially, both were the same and the
former was changed in v6.10.0-rc1~25 so we do want to accept Windows
style of paths too. But then again, I don't see any value in having two
separate rules.
According to this, I have the following questions:
1. Do we allow users to use relative paths, or MUST all paths be absolute?
I think we must keep relative paths, because we once allowed them.
2. Do we have to accept Windows-style paths everywhere?
3. Do we need to have different types for directories? For example, in some places, the
filePath type is used for directory parameters.
And as a last question, do we want to unify the basic types related to paths to maintain
the schemas more consistent?
What you could do is to define "relativePath" data type that would
accept ".+" and then "absolutePath" that would be effectively the
same
as "absFilePath".
Michal