XML验证问题

时间:2014-04-11 03:29:24

标签: xml validation xsd

我正在针对FIXML的fixml-partiesreference-impl-5-0-SP2.xsd验证xml文件,并且它发出错误消息“验证错误:未声明'http://www.fixprotocol.org/FIXML-5-0-SP2:PtyDetlDefReq'元素。” 但是“PtyDetlDefReq”已经在xsd文件中被decalred了。那么有人可以解释我如何解决这个问题。非常感谢。

FIXML-partiesreference-IMPL-5-0-SP2.xsd

<?xml version="1.0" encoding="utf-8"?>
<!-- Generated:2013-12-08T19:18:30.094-05:00 Revision: FIXML Schema
     Version FIX.5.0SP2 Copyright(c) FIX Protocol Limited. All rights
     reserved. Comments and errors should be posted on the FIX protocol web-site
     http://www.fixprotocol.org -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="http://www.fixprotocol.org/FIXML-5-0-SP2"
           xmlns:fm="http://www.fixprotocol.org/FIXML-5-0-SP2/METADATA"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.fixprotocol.org/FIXML-5-0-SP2/METADATA 
                               fixml-metadata-5-0-SP2.xsd"
           targetNamespace="http://www.fixprotocol.org/FIXML-5-0-SP2"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">
   <xs:include schemaLocation="fixml-partiesreference-base-5-0-SP2.xsd"/>
</xs:schema>

fixml-partiesreference-base-5-0-SP2.xsd文件的代码

 <xs:element name="PtyDetlDefReq" 
             type="PartyDetailsDefinitionRequest_message_t"
             substitutionGroup="Message"
             final="#all"/>

 <xs:complexType name="PartyDetailsDefinitionRequest_message_t" 
                 final="#all">
      <xs:annotation>
         <xs:documentation xml:lang="en">
           PartyDetailsDefinitionRequest can be found in Volume 3 of the
           specification</xs:documentation>
         <xs:appinfo>
           <fm:Xref Protocol="FIX" 
                    name="PartyDetailsDefinitionRequest" 
                    ComponentType="Message"
                    MsgID="134"
                    Section="PreTrade"
                    Category="PartiesReferenceData"/>
         </xs:appinfo>
      </xs:annotation>
      <xs:complexContent>
         <xs:extension base="Abstract_message_t">
            <xs:sequence>
               <xs:group ref="PartyDetailsDefinitionRequestElements"/>
            </xs:sequence>
            <xs:attributeGroup ref="PartyDetailsDefinitionRequestAttributes"/>
         </xs:extension>
      </xs:complexContent>
   </xs:complexType>

我的xml文件

<?xml version="1.0" encoding="utf-8"?>
<PtyDetlDefReq ReqID="123" 
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
               xmlns="http://www.fixprotocol.org/FIXML-5-0-SP2">
  <PtyDetlUpd ListUpdActn="A">
    <PtyDetl ID="55" R="38">
      <Sub ID="C" Typ="26" />
      <Sub ID="M" Typ="220" />
      <Sub ID="Test Test" Typ="235" />
      <Sub ID="RC" Typ="203" />
      <Sub ID="ABCDEF" Typ="204" />
      <Sub ID="1" Typ="222" />
      <Sub ID="1" Typ="223" />
      <Sub ID="ABCDEF" Typ="207" />
      <Sub ID="ABCDEF" Typ="208" />
      <Sub ID="abcd" Typ="209" />
      <Sub ID="ABCDEF" Typ="233" />
      <Sub ID="123456" Typ="210" />
      <Sub ID="ABCDEF" Typ="212" />
    </PtyDetl>
  </PtyDetlUpd>
</PtyDetlDefReq>

您可以从http://www.fixtradingcommunity.org/pg/extensions/extension-pack?ExtensionID=EP168

下载完整的xsd文件集

1 个答案:

答案 0 :(得分:0)

根据您提供的架构文档片段判断,您在框架文档fixml-partiesreference-impl-5-0-SP2.xsd描述的架构文档中声明元素{http://www.fixprotocol.org/FIXML-5-0-SP2} PtyDetlDefReq是正确的。

因此,您提供的错误消息的最可能原因是验证程序实际上并未加载该架构文档。

不同的XSD验证程序有不同的方法来查找架构文档。您如何告诉验证器在哪里查找目标命名空间http://www.fixprotocol.org/FIXML-5-0-SP2的模式文档?

如果您的验证器是具有本地模式存储库的基础结构的一部分,那么仅仅给出命名空间就足够了,它可以并且将按命名空间查找模式组件;如果取消引用命名空间名称会生成带有指向合适模式文档的指针的RDDL文档,那么它也足够了。但在其他情况下,您可能需要在调用XSD验证程序时指定一系列namespace-name / schema-document-URI对。 (大多数XSD验证器将从正在验证的XML实例中的xsi:schemaLocation属性获取此信息,但好的验证器也将允许在调用时指定架构,以便不需要信任实例文档来提供正确的架构指针。)