在PHP中根据XSD1.1模式验证XML

在PHP中根据XSD1.1模式验证XML,php,xml,xsd,Php,Xml,Xsd,如PHP官方文档所述: 基于模式验证文档。仅支持XML模式1.0 也就是说,我有一个XMLSchema1.1文件,需要根据它来验证我的XML。到目前为止,我对解决方案的搜索没有任何结果,从对类似问题的回答来看,libxml似乎只支持1.0,因此在这种情况下,任何使用libxml的方法都可能行不通 编辑:有关额外信息,架构包含以下内容(仅对XML 1.1有效,不适用于1.0): 您能按下面所说的那样尝试一下,看看它是否正常工作吗 将架构文件转换为字符串 可以大致如下所述(可能是更好的方法) 然后使

如PHP官方文档所述:

基于模式验证文档。仅支持XML模式1.0

也就是说,我有一个XMLSchema1.1文件,需要根据它来验证我的XML。到目前为止,我对解决方案的搜索没有任何结果,从对类似问题的回答来看,libxml似乎只支持1.0,因此在这种情况下,任何使用libxml的方法都可能行不通

编辑:有关额外信息,架构包含以下内容(仅对XML 1.1有效,不适用于1.0):


您能按下面所说的那样尝试一下,看看它是否正常工作吗

将架构文件转换为字符串

可以大致如下所述(可能是更好的方法)

然后使用
DOMDocument::schemaValidateSource
,它将字符串作为输入

根据给定字符串中定义的架构验证文档


您可以尝试Saxon for php:Saxon似乎需要许可证。我正在开发的软件必须是开源的,并且只使用开源库。您可以免费使用Saxon Home Edition(HE)。此外,Xerces是开源的,免费的:Saxon HE不支持XSD。据我所知,XSD1.1的唯一开源实现是Xerces(Java)。因此,恐怕没有任何简单的解决办法。XML领域的大多数开源开发至少在10年前因为缺少志愿者而停滞。这仍然会产生与使用
DOMDocument::schemaValidate
时相同的结果。
  <xs:element name="placeholder_1">
    <xs:complexType>
      <xs:all>
        <xs:element maxOccurs="unbounded" minOccurs="0" name="placeholder_2" type="xs:string"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" name="placeholder_3" type="xs:string"/>
        <xs:element maxOccurs="1" minOccurs="0" name="placehoder_4" type="xs:string"/>
        <xs:element maxOccurs="1" minOccurs="0" name="placeholder_5" type="xs:string"/>
      </xs:all>
    </xs:complexType>
  </xs:element>
$doc->load('schema.xsd');
$doc->save('schema.xml');
$xmlfile = file_get_contents('schema.xml');