7

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

这些模式具有各种可选元素,后跟“xs:any”元素。这在 Mono 中工作得非常好,但在 Microsoft 的 .Net 中却不行,因为它抱怨可选元素的出现在模式中的实际定义和“xs:any”之间是模棱两可的。从一点点阅读来看,这似乎是一个在 W3C 架构定义的后续版本中得到解决的问题。显然 Mono 一直保持最新状态,但微软落后了。

我可以看到的选项是:

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

2) 使用 Schematron - 我发现它是关于制作向后和向前兼容的 XML 的建议,但它似乎更像是一种格式验证器,而不是一种“标准”模式语言。我不太确定实现在哪里——我能找到的只是一个命令行验证器。

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

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

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

1-3个中的任何一个都可能,还是我坚持4个?

谢谢。

4

2 回答 2

5

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

于 2010-02-28T21:12:22.013 回答
0

我为复活用 C# 实现的 ISO schematron 做出了贡献。它可以在 github 上找到

于 2014-07-23T22:34:39.160 回答