【问题标题】:XML - XSD validation error: No matching global declaration available for the validation rootXML - XSD 验证错误:没有可用于验证根的匹配全局声明
【发布时间】:2017-09-14 18:04:44
【问题描述】:

我有一个 XML 文件,我正在尝试使用 CDA 架构基础结构进行验证。

$domxml = new DOMdocument();
$domxml->load($fil);
if($domxml->SchemaValidate('filepath/cda/POCD_MT000040_SDTC.xsd')) {
//do stuff
} else {
     print_recursive(libxml_get_errors())
}

我的 XML 文件具有以下标题:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="ccda.xsl"?>
<ClinicalDocument 
  xsi:schemaLocation="urn:hl7-org:v3 
      http://xreg2.nist.gov:8080/hitspValidation/schema/cdar2c32/infrastructure/cda/C32_CDA.xsd" 
  xmlns="urn:hl7-org:v3" 
  xmlns:sdtc="urn:hl7-org:sdtc" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <realmCode code="US"/>
  <typeId root="2.16.840.1.113883.1.3" extension="POCD_HD000040"/>

我的 XSD 文件有以下标题:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema targetNamespace="urn:hl7-org:v3" 
  xmlns:mif="urn:hl7-org:v3/mif" 
  xmlns="urn:hl7-org:v3" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  elementFormDefault="qualified" 
  xmlns:sdtc="urn:hl7-org:sdtc">

libxml 提供的错误信息如下:

错误 1845:行:1 列:0:元素 '{urn:hl7-org:v3}ClinicalDocument':没有可用于验证根的匹配全局声明。

我查看了出现此错误消息的其他示例,这是一个非常模棱两可的错误,在我的搜索中,它意味着大约 15 个不同的、完全矛盾的事情 - 但我已将其缩小为XML 的标头或 XSD 的标头。我不认为我在 PHP 中错误地加载或验证了它,但我可能弄错了。

有人告诉我使用这个文件(以及它包含的所有文件,它们都存在)作为我正在使用的 XML 文档的 XSD 验证器,所以我不确定我是否做错了什么(下载XSD 文件,将它们上传到服务器,使用 domdocument schemavalidate 指向它们),或者如果我的 XML 文件头错误(不太可能,因为我提供的测试用例应该按照他们的标准正确运行),或者如果 XSD 错误(也许我抓错了?)

感谢您提供的任何帮助!

【问题讨论】:

    标签: php xml validation xsd


    【解决方案1】:

    不确定我是否应该回答我自己的问题,但我把它留在这里以防有人遇到同样的问题。

    在进一步分析之后,我四处寻找不同版本的 CDA XSD - 最后找到一个包含以下行的文件 (CDA_SDTC.xsd):

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by Bob Dolin (HL7 CDA TC) -->
    <xs:schema targetNamespace="urn:hl7-org:v3" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sdtc="urn:hl7-org:sdtc" xmlns="urn:hl7-org:v3" xmlns:mif="urn:hl7-org:v3/mif"
      elementFormDefault="qualified">
      <xs:annotation>
        <xs:documentation>Manually edited to add SDTC Schema Extension (authenticator/signatureText, legalAuthenticator/signatureText), 14 July 2013</xs:documentation>
        <xs:documentation>Manually edited to add SDTC Schema Extensions, July 2012</xs:documentation>
      </xs:annotation>
      <xs:include schemaLocation="POCD_MT000040_SDTC.xsd"/>
      <xs:element name="ClinicalDocument" type="POCD_MT000040.ClinicalDocument"/>
    </xs:schema>
    

    这个包含的文件(POCD_MT000040_SDTC.xsd)是我粘贴上面的标题的XSD,关键是这个文件包含行

    <xs:element name="ClinicalDocument" type="POCD_MT000040.ClinicalDocument"/>
    

    这是我实际开始处理 XSD 所需的类型声明。它现在可以完美地验证这个新的 CDA_SDTC.xsd 文件(并且在不应该验证的时候不验证!)

    【讨论】:

      猜你喜欢
      • 2012-04-19
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 2022-01-10
      相关资源
      最近更新 更多