从FHIR模式生成C#类

jlo*_*ail 3 c# xsd hl7-fhir

我正在尝试从FHIR项目提供的架构中生成c#类:http : //hl7.org/implement/standards/fhir/ 我已经下载了架构:http : //hl7.org/documentcenter/public/standards/FHIR /fhir-all-xsd.zip 我已经“ 取消阻止 ”了zip文件,并将xsd文件解压缩到了一个文件夹中。尝试使用xsd.exe创建c#类时,我不断收到表示架构问题的错误。除了其他元素之外,未始终声明获取xhtml:div元素。文件fhir-all.xsd似乎列出了顶级对象。我可以使用简单的架构tombstone.xsd来与xsd.exe一起使用,但是可以使用更复杂的项目,如valueset.xsd或alert.xsd 惨败。我看不到这些文件有什么问题。任何有关如何修复这些架构的帮助将不胜感激。

Ewo*_*mer 5

然而,从XSD生成POCO会给出较少的最优类。由于FHIR的序列化避免了多态性的使用,因此呈现选择的元素(例如,observation.value)将在XSD中表示为名称相同的元素集(valueNumber,valueString,valueCodeableConcept等)。

同样,很难使用相同的POCO进行json序列化。

在用于FHIR的.NET NuGet程序包中,您将找到一组为FHIR资源生成的类,它们的重量尽可能轻。此外,还有Validation属性来验证其内容,该软件包包含用于json和xsd的序列化器和解析器,以及用于调用服务器上其余操作的REST客户端。

如果您需要将解析器和序列化器与WebAPI集成在一起,我已经在此处发布了相关内容:在ASP.NET Web API中将HL7 FHIR序列化为json


jlo*_*ail 2

到目前为止,我已经能够生成类并反序列化提供给按所述生成的原始类以及 SOAP 服务从原始类生成的类的许多病人*.xml 示例。

编辑 xhtml1-strict.xsd 来解决这个问题并不那么简单。我使用 xsd.exe 尝试从该文件创建类,然后使用错误消息作为起点。经过一些实验,我想出了这个文件。它解决了 div 元素的问题,只要包含的 HTML 保持简单即可。我正在分享差异报告供其他人使用。数字代表行号。(由于大小限制,我只是共享更改,我尝试共享整个文件)。

XSD\xhtml1-strict.xsd(413):      <!--<xs:group ref="inline"/>-->
XSD\xhtml1-strict.xsd(441):      <!--<xs:element ref="pre"/>-->
XSD\xhtml1-strict.xsd(443):      <!--<xs:element ref="blockquote"/>-->
XSD\xhtml1-strict.xsd(462):      <!--<xs:group ref="misc"/>-->
XSD\xhtml1-strict.xsd(519):      <!--<xs:group ref="block"/>-->
XSD\xhtml1-strict.xsd(520):      <!--<xs:group ref="misc"/>-->
XSD\xhtml1-strict.xsd(539):      <!--<xs:group ref="misc"/>-->
XSD\xhtml1-strict.xsd(1349):        <!--<xs:group ref="block"/>-->
XSD\xhtml1-strict.xsd(1351):        <!--<xs:group ref="inline"/>-->
XSD\xhtml1-strict.xsd(1352):        <!--<xs:group ref="misc"/>-->
XSD\xhtml1-strict.xsd(1450):          <!--<xs:group ref="block"/>-->
XSD\xhtml1-strict.xsd(1452):          <!--<xs:group ref="misc"/>-->
XSD\xhtml1-strict.xsd(1718):          <!--<xs:group ref="block"/>-->
XSD\xhtml1-strict.xsd(1720):          <!--<xs:group ref="inline"/>-->
XSD\xhtml1-strict.xsd(1721):          <!--<xs:group ref="misc"/>-->
Run Code Online (Sandbox Code Playgroud)

我还分享了迄今为止有关所需手动编辑的笔记,以解决生成的类中的问题。

Generate entities with Xsd2Code add-in from www.codeplex.com\Xsd2Code

Use fhir-atom-single.xsd as the source XSD
Use Parms:
    Serilization.GenerateXMLAttributes = true
    Code.Namespace = Hl7.Fhir.Validation.SchematronOutput
    Collection.CollectionObjectType=Array

!!! Do not open Schema in Designer, or classes will change.

Manual updates:

    public partial class boolean : Element
    ...
        [System.Xml.Serialization.XmlAttributeAttribute("value")]
        public bool Value
        {


    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = false, Namespace = "http://www.w3.org/1999/xhtml")]
    public partial class div : Flow


    Refactor:
    public partial class FeedType
    to
    public partial class feed
Run Code Online (Sandbox Code Playgroud)