0
  1. 我使用 Windows 和 MSXML 库 (msxml6.dll)。
  2. 我也在当前主题中使用 JS 作为示例。
  3. 如何针对 XMLSchema.xsd 验证我自己的方案(XSD 文件)?
  4. 在下面的示例代码中有关于我遇到的问题的评论。
var xs, xd;

main();

function main() 
{
  try {
    xs = new ActiveXObject("MSXML2.XMLSchemaCache.6.0");
    xd = new ActiveXObject("MSXML2.DOMDocument.6.0");
  }
  catch (e) {
    WScript.Echo("Mirosoft XML Core Services (MSXML) 6.0 is not installed.\n"
          +"Download and install MSXML 6.0 from http://msdn.microsoft.com/xml\n"
          +"before continuing.");
    return;
  }

  try {
    xd.async = false;
    xd.validateOnParse = false;
    xd.setProperty('ResolveExternals', false);
    xd.setProperty('ProhibitDTD', false);
    xd.setProperty('UseInlineSchema', false);
    xd.setProperty('MultipleErrorMessages', true);
    xd.load("e:\\Temp\\__SuperTemp\\XMLSchema.xsd") // just loaded from here http://www.w3.org/2001/XMLSchema.xsd
  }
  catch (e) {
    WScript.Echo("Failed to load schema cache: "+e.description);
    return;
  }

  if (xd.parseError.errorCode != 0) {
     WScript.Echo("Failed to parse schema cache: "+xd.parseError.reason);
    return;
  }

  try {
    // Here the error occured:
    //    XMLSchema.xsd#/schema/element[1][@name = 'schema']/complexType[1]/complexContent[1]/extension[1]/attribute[8]
    //    The 'http://www.w3.org/XML/1998/namespace:lang' attribute is not declared.
    // I really dont know what to do around it :((

    xs.add("http://www.w3.org/2001/XMLSchema", xd);
  }
  catch (e) {
    WScript.Echo("Failed to add schema cache: "+e.description);
    return;
  }

  // Next I wanted to validate my own XSD against XMLSchema.xsd.
  // But the error above occured. Soo, the further code is skipped...

}
4

1 回答 1

0

首先,用于模式文档的 W3C 模式 (S4SD) 做了一些用户模式中不允许的事情,比如定义新的原始类型,因此不能保证每个模式处理器都会认为它是一个有效的模式。我不知道 MSXML 是否存在问题(尽管它相当古老且令人尊敬......)

您遇到的具体问题似乎是 S4SD 导入 XML 命名空间的架构

而且您似乎正在选择未声明 xml:lang 的该模式的版本。我不知道为什么会这样。可能值得进行某种监视,以查看 XML 名称空间的模式是否实际上是从该位置加载的。也许 MSXML 有一个不包含此属性的 XML 命名空间的“内置”架构版本?但我会认为这会破坏太多,以至于不可能。

我知道这不是一个完整的解决方案,但我希望它能带你前进。

于 2020-03-16T12:56:16.890 回答