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

标签 c# .net xml schema relaxng

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

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

我可以看到的选项是:

1) 使用 RelaxNG - 不幸的是,从主站点到 C# 实现的链接已断开。它是 Mono 的一部分,但在 MS 的 .Net 上运行时没有太大帮助。我能看到的唯一方法是复制和重建 Mono's version作为我自己的 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?

谢谢。

最佳答案

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

关于c# - 我如何在 .Net 中使用其他/更现代的模式验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2352615/

相关文章:

c# - 在 C# 中实现可序列化类的首选方法是什么

javascript - 是否有一个 JS 库来为 IE 提供 xpath 能力

c# - 使用 Controller 返回的值填充图表

.net - 您如何显示 .Net T4 生成的代码(不是输出)?

java - 如何从xml文件中提取字符串列表?

c# - 是一对一的关系糟糕的策略

c# - 在不同线程中使用mshtml接口(interface)

c# - 从子控件检测 ViewDidUnload

c# - Amazon S3 中的并发

c# - LINQ to Sql,无法对包含聚合或子查询的表达式执行聚合函数