【xmlschema】targetNamespaceのせいでValidationがうまくいかなかった。

Python

概要

  • xmlschemaを使ったvalidationがうまく通らなかった。
  • 原因はxml側にxsdで指定したnamespaceが適用されていなかった?ため

Notes

  • xsd(xmlのスキーマ)はこんな感じ
"""<?xml version="1.0" encoding="utf-8"?>  
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
         xmlns="http://www.hogehoge/edi/schemas/fuga"  
         targetNamespace="http://www.hogehoge/edi/schemas/fuga"  
         elementFormDefault="qualified" attributeFormDefault="unqualified">         

     <!--ヘッダ:メッセージ固有部分-->  
     <xsd:include schemaLocation="../sample/xmlSchema/CommonData_type.xsd"/
     <xsd:include schemaLocation="../sample/xmlSchema/CommonCode.xsd"/>

     <!--ヘッダ:メッセージ固有部分-->
     <xsd:element name="SBD-MSG" type="TypeSBD-MSG" />
     <xsd:complexType name="TypeSBD-MSG">      
         <!-- A機関コード -->      
         <xsd:attribute name="BPID"       use="required" />      
         <!-- B機関コード -->      
         <xsd:attribute name="BPIDSUB"     use="required" />      
         <!-- 標準の版 -->      
         <xsd:attribute name="BPIDVER"    use="required" />      
         <!-- 情報区分コード -->      
         <xsd:attribute name="MSGID"         use="required" />      
         <!-- マッピング規則の版 -->      
         <xsd:attribute name="MAPVER"     use="required" />   
     </xsd:complexType>
</xsd:schema>"""
  • 下記だと、namespaceというか、xmlnsが設定されていないからvalidationが通らない。
pprint.pprint(schema.to_dict('<SBD-MSG BPID="AA" BPIDSUB="W6" BPIDVER="3A" MSGID="0150" MAPVER="1.1-1A">''</SBD-MSG>))
  • こんなエラーがでる。スキーマに要素がありません(定義されてない?)ですよみたいなかんじ。
XMLSchemaValidationError: failed validating <Element 'SBD-MSG' at 0x0000020D924AD220> with XMLSchema10(name='fuga', namespace='http://www.hogehoge/edi/schemas/fuga'):

Reason: <Element 'SBD-MSG' at 0x0000020D924AD220> is not an element of the schema

Instance:

  <SBD-MSG BPID="AA" BPIDSUB="W6" BPIDVER="3A" MSGID="0150" MAPVER="1.1-1A" />

Path: /SBD-MSG
  • こうするとうまくいく。
pprint.pprint(schema.to_dict('<SBD-MSG xmlns="http://www.hogehoge/edi/schemas/fuga" BPID="AA" BPIDSUB="W6" BPIDVER="3A" MSGID="0150" MAPVER="1.1-1A">''</SBD-MSG>'))
  • 参考
    https://stackoverflow.com/questions/57836823/element-is-not-an-element-of-the-schema

コメント

タイトルとURLをコピーしました