如何在.Net中使用其他/更现代的模式验证?

IBB*_*ard 7 .net c# xml schema relaxng

我正在尝试在跨平台应用程序中使用C#和XML(大多数开发都在Linux上的MonoDevelop中,但大多数用户最终将使用我在Visual Studio中创建的WinForms前端).Mono表现得像我期望的那样,但.Net不是,所以我正在寻找选择和替代方案.

模式具有各种可选元素,后跟"xs:any"元素.这在Mono中完全正常,但在微软的.Net中却没有,因为它抱怨可选元素的出现在它在模式中的实际定义和"xs:any"之间是模糊的.从一点阅读开始,它似乎是在W3C的Schema定义的更高版本中解决的问题.显然,Mono一直保持最新状态,但微软却落后了.

我能看到的选项是:

1)使用RelaxNG - 遗憾的是,从主站点到C#实现的链接被破坏了.它是Mono的一部分,但在MS'.Net上运行时没有多大帮助.我能看到的唯一方法是复制和重建Mono的版本作为我自己的DLL

2)使用Schematron - 我发现它是关于制作向后和向前兼容XML的建议,但它看起来更像是格式验证器而不是"标准"模式语言.我不太确定实现的位置 - 我能找到的只是一个命令行验证器.

3)确保MS .Net实现使用Mono使用的更新架构标准 - 我甚至不知道这是否可行.

4)坚持使用丑陋的模式,并将"xs:any"放在可选的"扩展"元素中 - 除了官方的.Net框架之外没有任何其他理由它不会混淆,但它可以工作.

该代码针对.Net 2.0,但我的机器上安装了3.5.我也在使用Mono 2.4,MonoDevelop 2.2和Visual Studio Express 2005.

是1-3中的任何一种,还是我坚持4?

谢谢.

Jas*_*aty 5

您可以通过将 设为XmlSchemaSet.CompilationSettings.EnableUpaCheckfalse 来解决歧义问题。UPA代表您引用的 XML 架构标准的唯一粒子属性要求。