1

PHPでXSDを使用してXMLファイルを検証しようとしていますDOMDocument. このtranslation要素は XML に表示されてはなりませんがschemaValidate、エラーは返されません。別の検証ツールを使用して検証をテストしたところ、エラーが返されました。schemaValidateが不正な XML を検証する理由がわかりません。

XSDの一部

<xs:complexType name="CV">
  <xs:complexContent>
     <xs:restriction base="CE">
        <xs:sequence>
           <xs:element name="originalText" type="ED" minOccurs="0" maxOccurs="1">
              <xs:annotation>
                 <xs:documentation>
                    The text or phrase used as the basis for the coding.
                 </xs:documentation>
              </xs:annotation>
           </xs:element>
           <xs:element name="translation" type="CD" minOccurs="0" maxOccurs="0"/>
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>

私のXML

<?xml version="1.0"?>
<CV><translation/></CV>

私のコード

$dom = new DOMDocument("1.0","UTF-8");
$dom->loadXML("<?xml version=\"1.0\"?>
<CV><translation></translation></CV>");
echo $dom->schemaValidate("TestClasses.xsd");

完全な XSD TestClasses.xsdの場合

お手伝いありがとうございます。

4

1 に答える 1

2

一見すると、これはスキーマ バリデータのバグのように見えます。PHPのマニュアルでは、schemaValidate() が libxml を使用することを提案しています (明示的には述べていません)。また、libxml の XSD サポートはまだ完全ではありません。

価値があるのは、行をコメントアウトすることに注意してください

<xs:element name="translation" type="CD" 
            minOccurs="0" maxOccurs="0"/>

スキーマを無効にすることなく、ここでlibxmlが正しい結果を生成できるようにします(SaxonとXerces Jによる簡単なテストからわかる限り)。

于 2013-03-06T16:55:16.507 に答える