我正在尝试从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 惨败。我看不到这些文件有什么问题。任何有关如何修复这些架构的帮助将不胜感激。
然而,从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
到目前为止,我已经能够生成类并反序列化提供给按所述生成的原始类以及 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)
| 归档时间: |
|
| 查看次数: |
2848 次 |
| 最近记录: |