Как проверить файл XMLSchema.xsd моего собственного Schema XSD, используя MS XML? - PullRequest
0 голосов
/ 16 марта 2020
  1. Я использую библиотеку Windows и MS XML (msxml6.dll).
  2. Также я использую JS для примера в текущей топи c.
  3. Как я могу проверить свои собственные схемы (XSD-файл) по XMLSchema.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...

}

1 Ответ

0 голосов
/ 16 марта 2020

Во-первых, схема W3 C для документов схемы (S4SD) выполняет некоторые действия, которые не допускаются в пользовательской схеме, например, определение новых типов примитивов, поэтому нет гарантии, что каждый процессор схемы будет считать ее действительная схема. Я понятия не имею, есть ли проблемы с MS XML (хотя он довольно старый и почтенный ...)

Специфическая проблема c, с которой вы столкнулись, заключается в том, что S4SD импортирует схему для XML пространства имен

и вы, похоже, выбираете версию этой схемы, которая не объявляет xml: lang. Я не знаю, почему это должно происходить; возможно, стоит установить какой-то вид мониторинга, чтобы увидеть, действительно ли схема для пространства имен XML загружается из этого места. Возможно, у MS XML есть «встроенная» версия схемы для пространства имен XML, которая не включает этот атрибут? Но я бы подумал, что это слишком сильно сломалось бы, чтобы это стало возможным.

Я знаю, что это не полное разрешение, но я надеюсь, что это продвинет вас вперед.

...