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

发布于 2024-08-23 06:01:21 字数 1007 浏览 7 评论 0原文

我正在尝试在跨平台应用程序中使用 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?

谢谢。

I'm trying to do some work with C# and XML in a cross-platform app (most development is in MonoDevelop on Linux, but most users will end up using the WinForms front-end that I make in Visual Studio). Mono is behaving as I'd expect, but .Net isn't and so I'm looking for options and alternatives.

The schemas have various optional elements followed by an "xs:any" element. This works perfectly fine in Mono, but not in Microsoft's .Net as it complains that the occurrence of the optional element is ambiguous between its actual definition in the schema and "xs:any". From a bit of reading up, it appears to be a problem that was resolved in later versions of W3C's Schema definition. Obviously Mono has been kept up to date, but Microsoft are lagging.

The options I can see are:

1) Use RelaxNG - unfortunately the link from the main site to the C# implementation is broken. It is part of Mono, but that isn't much help when running on MS' .Net. The only way I can see to do it is to duplicate and rebuild Mono's version as my own DLL

2) Use Schematron - I found it as a suggestion on making backward and forward compatible XML, but it seems more like a format validator than a 'standard' schema language. I'm not quite sure where the implementation is - all I can find is a command-line validator.

3) Make sure that the MS .Net implementation uses the updated schema standard that Mono uses as well - I don't even know if this is possible.

4) Stick with ugly schemas and put "xs:any" within an optional "extensions" element - it nests it for no good reason other than the official .Net framework doesn't get confused, but it works.

The code is aimed at .Net 2.0, but I've got 3.5 installed on my machine. I'm also working with Mono 2.4, MonoDevelop 2.2 and Visual Studio Express 2005.

Are any of 1-3 possible, or am I stuck with 4?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无所的.畏惧 2024-08-30 06:01:21

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

You may be able to work around the ambiguity problem by setting the XmlSchemaSet.CompilationSettings.EnableUpaCheck to false. UPA stands for the Unique Particle Attribution requirement of the XML Schema standard that you referenced.

暮年 2024-08-30 06:01:21

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

I contributed to a resurrection of an ISO schematron implemented in C#. It's available on github here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文