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

我试图在跨平台的应用程序中使用C#和XML进行一些工作(大多数开发都在Linux上的MonoDevelop上,但大多数用户最终将使用我在Visual Studio中制作的WinForms前端)。 Mono的行为和我所期望的一样,但.Net并不是,所以我正在寻找选择和替代方案。

模式具有各种可选元素,后跟“xs:any”元素。 这在Mono中工作得很好,但在Microsoft的.Net中却没有,因为它抱怨可选元素的出现在其架构中的实际定义和“xs:any”之间是不明确的。 从阅读的角度来看,这似乎是在W3C的Schema定义的更高版本中解决的问题。 很显然,Mono一直保持最新状态,但微软落后。

我可以看到的选项是:

1)使用RelaxNG--不幸的是,从主站点到C#实现的链接被中断。 它是Mono的一部分,但在MS'.Net上运行时没有多大帮助。 我能看到的唯一方法就是将Mono的版本复制并重建为我自己的DLL

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

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

4)坚持使用丑陋的模式,并在可选的“extensions”元素中放置“xs:any” - 除了官方的.Net框架之外,它没有任何理由嵌套它。但它不起作用。

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

1-3是可能的,还是我坚持4?

谢谢。


您可以通过将XmlSchemaSet.CompilationSettings.EnableUpaCheck设置为false来解决模糊问题。 UPA代表您引用的XML模式标准的唯一粒子归因要求。


我促成了在C#中实现的ISO schematron的复活。 它在github上可用。

链接地址: http://www.djcxy.com/p/44983.html

上一篇: How can I use other/more modern schema validation with .Net?

下一篇: Xcode organizer has crashes from unsupported devices