私は XSD スキーマを持っていますが、2 つの可能な場所に配置する必要があります。
これを行う簡単なメカニズムはありますか。開発の例では、XML は次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<Request xmlns="http://www.example.com/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dev.example.com/ Request.xsd\">
<GetLocations />
</Request>
と生産
<?xml version="1.0" encoding="utf-8"?>
<Request xmlns="http://www.example.com/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/ Request.xsd\">
<GetLocations />
</Request>
これは、XSD の行が<xs:include schemaLocation="DataTypes.xsd" />
正しいファイルを取得できるようにするためです。
補遺
for をやってみましょう
PHPfile_get_contents
を使用して XML ファイルを取得するとします。XSD ファイルに対して (HTTP 経由で) チェックしたい。そのファイルには、<xs:include schemaLocation="DataTypes.xdf" />
. PHP スクリプトは、このファイルを取得する場所をどのように認識しますか?
さらにあります
私は次のことをしています
$xml = file_get_contents(<URL FOR XML FILE>);
$xsd = file_get_contents(<URL FOR XSD FILE>);
// The XSD has the include bit in it
$request = new DOMDocument();
$request->loadXML($xml, LIBXML_NOBLANKS);
file_put_contents(<some temporary filename>, $xsd);
if (!$request->schemaValidate(<some temporary filename>))
{
etc...
問題は、XSD ファイルが正しいinclude
ファイルを取得していることを確認する方法です。スキーマのコピーが 2 つあります。1 つは本番用で、もう 1 つは追加のものを追加するためのものです。