我有一个 XSD 架构,但我需要它位于两个可能的位置 - 一个用于开发(即我的 PC 和一个用于生产。
是否有一个简单的机制来做到这一点。例如开发 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" />
能够拾取正确的文件。
附录
让我们做一个例子
假设我使用 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
文件。我有两个架构副本。一个用于生产,另一个用于添加额外的东西。