A VivadoProjectFile and a OSVVMProjectFile represent a project file. They offer a Parse() method, which fills a property called ProjectModel. So currently, each file has it's own project model. I'm not sure how we can define a merge operation an them.
Maybe that would be the case for the parent project:
I believe it would be desirable to have a Merge operation for combining any two projects. I know that many possible combinations will produce conflicts, so I think we don't need a "too clever" approach but just produce meaningful failures when such conflicts arise. Then, it's up to users to understand/know what they can combine and what they cannot.
Particular use cases for combining two projects are: OSVVM and XPR in the context of tsfpga, or OSVVM and VUnit's API in the context of VUnit and OSVB.