2016-06-21 75 views
0

我试图根据模式验证“http://xml.ra.se/e-arkiv/METS/CSPackageMETS.xsd”的XML文件,我得到了以下验证错误:架构验证错误CVC-elt.4.2(尽管正确的类型定义?)

CVC-ELT .4.2:无法解析“PREMIS:文件”的类型定义为元素“PREMIS:对象

在XML文件中我有这样的:

<premis:object xmlns:premis="info:lc/xmlns/premis-v2" version="2.2" xsi:schemaLocation="info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd" xsi:type="premis:file"> 

的问题是,只要我能看到,“premis:file”是根据premis定义的类型定义。但是,也许我没有正确地解释这一点,我是模式新手,实际上是一般的XML。

我搜索了一些可以帮助我理解xml文件中发生了什么的信息,以及它如何与模式相关以便了解什么是错误,但是我一直无法找到这个问题的答案。我非常感谢在这方面的帮助。

的xml文件:

<?xml version="1.0" encoding="ASCII" standalone="no"?> 
<mets:mets xmlns:mets="http://www.loc.gov/METS/" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" OBJID="bc198c15-cd31-41e6-98aa-5e85caf97d6c" PROFILE="http://xml.ra.se/e-arkiv/METS/CommonSpecificationSwedenPackageProfile.xml" TYPE="Economics" xsi:schemaLocation="http://www.loc.gov/METS/ http://www.loc.gov/standards/mets/version18/mets.xsd http://xml.ra.se/e-arkiv/METS/CSPackageMETS.xsd"> 
     <mets:metsHdr CREATEDATE="2016-04-22T08:39:09"><mets:agent ROLE="ARCHIVIST" TYPE="ORGANIZATION"><mets:name>arkivbildare</mets:name></mets:agent><mets:agent ROLE="ARCHIVIST" TYPE="ORGANIZATION"><mets:name>nummer</mets:name></mets:agent><mets:agent OTHERTYPE="SOFTWARE" ROLE="ARCHIVIST" TYPE="OTHER"><mets:name>system</mets:name></mets:agent><mets:agent ROLE="CREATOR" TYPE="ORGANIZATION"><mets:name>levorg</mets:name></mets:agent><mets:altRecordID TYPE="SUBMISSIONAGREEMENT">bet;2016-05-31</mets:altRecordID></mets:metsHdr> 
     <mets:amdSec ID="amdSec_1"> 
     <mets:techMD ID="techMD_1"> 
      <mets:mdWrap MDTYPE="PREMIS:OBJECT"> 
      <mets:xmlData> 
       <premis:object xmlns:premis="info:lc/xmlns/premis-v2" version="2.2" xsi:schemaLocation="info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd" xsi:type="premis:file"> some elements </premis:object> 
      </mets:xmlData> 
      </mets:mdWrap> 
     </mets:techMD> 
    some elements 
    </mets:amdSec> 
    some elements 
</mets:mets> 
+0

您是否想使用'schemaLocation'属性中给出的模式'http:// www.loc.gov/standards/premis/v2/premis-v2-2.xsd'? –

+0

整个文件应验证为模式http://xml.ra.se/e-arkiv/METS/CSPackageMETS.xsd,但我认为它是与我的问题相关的schemaLocation属性中的模式? – ostid

+0

即使更新之后,您仍然没有发布*** [mcve] ***。您的XML应该验证除了您的问题的主题单个错误。 (它甚至不是很接近你的根元素上的'schemaLocation'具有奇数个条目,'premis:对象是不完整的等等)**清理你的XML例子,以便清楚地说明你的实际问题,然后更新你的问题。**谢谢。 – kjhughes

回答

1

添加xsi命名空间前缀的声明,

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

premis:object元素,

<premis:object version="2.2" 
       xmlns:premis="info:lc/xmlns/premis-v2" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="info:lc/xmlns/premis-v2 
          http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd" 
       xsi:type="premis:file"/> 

那么你就会得到过去的xsi:schemaLocation问题。

当然,上述premis:object元素是不完整的,所以你会遇到下一个错误将是

[Error] try.xml:6:40: cvc-complex-type.2.4.b: The content of element 'premis:object' is not complete. One of '{"info:lc/xmlns/premis-v2":objectIdentifier}' is expected.

但想必您未发布的XML的其余部分将解决这个问题。

+0

谢谢你的回复。我在根元素中声明了xsi命名空间前缀(抱歉不提),是否还需要向premis:object元素添加声明?那为什么呢? – ostid

+0

不,根元素上的'xsi'声明应该足够了。请发布XML的[mcve],以便我们更轻松地为您提供帮助。谢谢。 – kjhughes

+0

谢谢你指出。现在添加了xml。 – ostid