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

Reply via email to