Je souhaite valider un document XML par rapport à un fichier XSD local en utilisant XMLReader sur PHP/5.3.0. Le schéma est appelé test.xsd
et il contient une référence à un second schéma:Validation XML, chemins XSD et UNC imbriqués
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:include schemaLocation="common.xsd"/>
J'ai une copie de tous les fichiers dans le même répertoire. La partie pertinente du code ressemble à ceci:
<?php
define('DIR_XML', dirname(__FILE__) . DIRECTORY_SEPARATOR . 'samples' . DIRECTORY_SEPARATOR);
$oXMLReader = new XMLReader;
$oXMLReader->open('test.xml');
$oXMLReader->setSchema(DIR_XML . 'test.xsd');
while($oXMLReader->read()){
}
$oXMLReader->close();
?>
Mon code fonctionne très bien si le répertoire samples
est local au serveur Web et accessible par une lettre de lecteur , par exemple:
define('DIR_XML', 'C:\samples' . DIRECTORY_SEPARATOR);
Cependant, des données réelles est dans un lecteur réseau accessible par chemin UNC:
\\SERVER\WEB PROJECTS\foo\samples
Et voici le problème: dans ce cas (et seulement dans ce cas) PHP charge test.xsd
très bien, mais il ne peut pas trouver common.xsd
. Je reçois un avertissement:
Attention: XMLReader :: setSchema() [xmlreader.setschema]: Impossible de définir schéma. Cela doit être défini avant la lecture ou le schéma contient des erreurs.
... et les erreurs XML suivantes:
Avertissement 1549 (élément Lancer): Échec chargement entité externe « /SERVER/WEB%20PROJECTS/foo/samples/common.xsd "
erreur 3050 (Démarrer élément): Element '{http://www.w3.org/2001/XMLSchema}include': Impossible de charger le document «/SERVEUR/WEB% 20PROJECTS/foo/samples/common.xsd ' pour l'inclusion.
Il semble que PHP interprète mal le chemin UNC comme une URL: -?
Y at-il une option ou un truc pour résoudre ce problème?
Je me suis finalement fatigué et j'ai simplement symbolisé tous mes chemins réseau importants. Il y a juste trop d'applications qui ne supporteront pas UNC. –