【问题标题】:xsd.exe not finding type declarationsxsd.exe 找不到类型声明
【发布时间】:2017-11-17 13:52:39
【问题描述】:

我正在尝试从 IRS 网站上提供的 XSD 文件生成类文件:

https://www.irs.gov/businesses/corporations/fatca-xml-schemas-and-business-rules-for-form-8966

架构文档可在此处下载:https://www.irs.gov/pub/fatca/fatcaxml_v2.0.zip

(FATCAXML_v2.0 (25KB) - FATCA 报告的主要架构。)

zip 文件包含 4 个文档:

  • FatcaXML_v2.0.xsd
  • isofatcatypes_v1.1.xsd
  • oecdtypes_v4.2.xsd
  • stffatcatypes_v2.0.xsd

在第一个文档 FatcaXML_v2.0.xsd 中,有 3 个 xsd:import 节点似乎引用了其他 3 个 xsd 文档。

当尝试使用 xsd.exe 针对 FatcaXML_v2.0.xsd 生成我的类时,我收到多个关于未声明类型的错误,例如:

Schema validation warning: Type 'urn:oecd:ties:stffatcatypes:v2:StringMax200_Type' is not declared. Line 259, position 5.

但是,我确实在 stffatcatypes_v2.0.xsd 中看到了此类型的声明(已导入到“FatcaXML_v2.0.xsd”的顶部):

<xsd:simpleType name="StringMax200_Type">
  <xsd:annotation>
    <xsd:documentation>Defines a string with maximum length of 200
    </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
        <xsd:minLength value="0"/>
        <xsd:maxLength value="200"/>
    </xsd:restriction>
</xsd:simpleType>

如何让 xsd.exe 识别这些类型定义?

提前致谢

【问题讨论】:

  • &lt;import &gt; 元素中的schemaLocation 属性是什么?
  • :文件都在同一个文件夹
  • 所有模式都位于同一个文件夹中?在这种情况下,请尝试在命令行上指定每个架构文件。
  • 是的,文件都在同一个文件夹中;我将尝试在单个命令中指定所有输入文件
  • 好的,虽然如果他们是我不会认为你需要。不过,如果它有效!

标签: c# xml xsd xsd.exe


【解决方案1】:

为了让 XSD.exe 能够“尊重”使用

导入的架构
<xsd:import namespace="importNamespace" schemaLocation="schema.xsd"/> 

声明,模式需要位于同一文件夹中,您需要在命令行中指定所有模式。它们还应该按照从基本模式到父模式的使用顺序进行指定。因此,如果您有一个架构,parent.xsd 导入 child.xsd 进而导入 base.xsd 那么您的命令行需要如下所示

xsd base.xsd child.xsd parent.xsd [options]

NB 架构可能不需要全部位于同一位置,但如果不是,我怀疑相对位置(相对于您运行 XSD 的位置,它应该位于主架构的文件夹中) 需要在命令行中为每个模式指定,并且可能与 &lt;import schemaLocation 属性匹配,但我目前无法确认这一点。

【讨论】:

    猜你喜欢
    • 2022-01-06
    • 2019-01-04
    • 2017-02-16
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2023-01-31
    • 2015-06-07
    • 1970-01-01
    相关资源
    最近更新 更多