【发布时间】:2013-11-16 21:57:25
【问题描述】:
就在最近,我处理了一些交通和旅行信息数据,即Datex2 格式的数据。项目时间不长,现在就结束了,我像往常一样继续使用xsd.exe 工具生成了一堆强类型C# 类,进行了一些序列化、轻量级处理等等。然而,事后看来,我开始怀疑这对于 F# 类型的提供程序是否是一个很好的案例,所以我第一次尝试这个主题。
考虑到这一点,应该如何处理不应该经常更改的complex schema 的情况?由于没有公开可用的类型提供程序可以直接从模式中推断类型,我猜这些选项是:
- 使用XML type provider。
- 使用外部工具生成类型,在本例中为xsd.exe——从WSDL type provider(使用svcutil.exe)中获取线索。
- 手动滚动类型(可能修改xsd.exe的输出)。
- 生成类型(如上一个项目)/使用 XML 类型提供程序并在后台进行持续序列化、反序列化和架构验证。
然后我也开始想知道 C#-F# 的故事(例如生成或删除的类型),如果我想修改类型以更好地检查模式中的 <xs:element name="ilc" type="D2LogicalModel:TpegIlcPointDescriptor" maxOccurs="3"> 等约束,同时还能提供良好的开发人员体验,该怎么办。
滚动自己的类型看起来像是一项相当费力的工作,最后两点似乎是最吸引人的一点,所以采取nos 在另一篇 SO 帖子中描述的here 的路线。我使用了System.Xml 和System.CodeDom 并修改了代码以使用Microsoft.FSharp.Compiler.CodeDom 和FSharpCodeProvider 来生成F# 类型。
唉!生成的 F# 代码无法编译(即使在添加了适当的引用等之后)。此时我想我可以问一些方向。
问题:如果我想按照所述强制实施约束,是否有推荐的、有经验的方法来创建类型提供程序以符合有点复杂的 XML 模式(以 Datex2 为例)在开发周期中尽早使用给定架构?
【问题讨论】:
标签: .net f# xsd type-providers