2017-09-14 131 views
1

沒有匹配的全局聲明我有我試圖使用CDA架構基礎設施,以驗證XML文件。XML - XSD驗證錯誤:可用於驗證的根

$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提供的錯誤消息是這樣:

Error 1845: Line: 1 Col: 0: Element '{urn:hl7-org:v3}ClinicalDocument': No matching global declaration available for the validation root.

我已經看了這個錯誤消息的其他例子出現了,這是一個非常模糊的錯誤,在我的搜索中,這意味着大約15種不同的,完全矛盾的事情 - 但是我縮小了它的頭或者頭中的錯誤爲XSD。我不認爲我在PHP中加載或驗證它不正確,但我可能會誤解。

我被告知使用此文件(及其包含的所有文件)作爲我正在使用的XML文檔的XSD驗證程序,所以我不確定如果我做錯了什麼(下載在XSD文件,將它們上傳到服務器,指着他們使用的DOMDocument schemavalidate),或者如果我的XML文件頭是錯誤的(不可能的,因爲我所提供的測試用例應該按照他們的標準正常工作),或者是XSD錯誤的(也許我抓住了錯誤的?)

謝謝您可以提供任何幫助!

回答

0

不知道我應該要回答我的問題,但我在這裏把它留在萬一有人跑進了同樣的問題。

分析這一些之後,我環顧四周,不同版本的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文件(當它不應該不驗證!)