Я хочу проверить XML-документ по локальному XSD-файлу, используя XMLReader на PHP / 5.3.0. Схема называется test.xsd
и содержит ссылку на вторую схему:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:include schemaLocation="common.xsd"/>
У меня есть копия всех файлов в одном каталоге. Соответствующая часть кода выглядит следующим образом:
<?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();
?>
Мой код отлично работает , если каталог samples
является локальным для веб-сервера и доступен по букве диска , например ::
define('DIR_XML', 'C:\samples' . DIRECTORY_SEPARATOR);
Однако реальные данные находятся на сетевом диске, доступном по пути UNC:
\\SERVER\WEB PROJECTS\foo\samples
И вот в чем проблема: в таком случае (и только в этом случае) PHP загружает test.xsd
просто отлично, но не может найти common.xsd
. Я получаю предупреждение:
Предупреждение: XMLReader :: setSchema ()
[xmlreader.setschema]: невозможно установить
схемы. Это должно быть установлено до
чтение или схема содержит ошибки.
... и следующие ошибки XML:
Предупреждение 1549 (Начальный элемент): ошибка
загрузить внешнюю сущность
«/SERVER/WEB%20PROJECTS/foo/samples/common.xsd"
Ошибка 3050 (начальный элемент): элемент
{http://www.w3.org/2001/XMLSchema}include':
Не удалось загрузить документ
'/SERVER/WEB%20PROJECTS/foo/samples/common.xsd'
для включения.
Похоже, что PHP неправильно интерпретирует путь UNC как URL: -?
Есть ли какая-нибудь опция или хитрость, чтобы это исправить?