2017-02-08 14 views
2

кажется, не имеет значения, как я формирую свой XML, я получаю следующее сообщение об ошибке:XML не соответствует схеме

Schema Violation in message: Element 'message': No matching global declaration available for the validation root. 

Первые две строки XSD выглядеть следующим образом:

<xsd:schema targetNamespace="urn:gtig:/stuff/gunk/v7.9 xmlns:Geek="urn:gtig:/stuff/gunk/7.9 xmlns:xsd="http://www.w3.org/2001/XMLSchema elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xsd:element name="message" type="Geek:Message"/> 

первая строка моего XML выглядит следующим образом:

<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance" xmlns:v7.9="urn:gtig:/stuff/gunk/v7.9 xsi:type="Geek:Message" xsi:schemaLocation="v7.9 /path/to/the/schema"> 

Как следует первая строка сообщения выглядеть?

ответ

2

Фикс два вопроса:

  • xmlns:v7.9="urn:gtig:/stuff/gunk/v7.9 отсутствует завершение двойные кавычки.
  • xsi:schemaLocation Предполагается, что пространство имен URI - пары местоположений схемы, а не префикс пространства имен - пары схем.

В частности, изменить не-хорошо сформированную message элемент из

<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance" 
     xmlns:v7.9="urn:gtig:/stuff/gunk/v7.9 
     xsi:type="Geek:Message" 
     xsi:schemaLocation="v7.9 /path/to/the/schema"> 

в

<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance" 
     xmlns:v7.9="urn:gtig:/stuff/gunk/v7.9" 
     xsi:type="Geek:Message" 
     xsi:schemaLocation="urn:gtig:/stuff/gunk/v7.9 /path/to/the/schema"> 

Update: Как Майкл Кей отмечает в комментариях, есть больше для исправления здесь, потому что message в настоящее время не находится в пространстве имен и therefo re xsi:schemaLocation не поможет связать этот XML с XSD.

Одно исправления можно было бы добавить message в пространство имен целевых на XSD:

<v7.9:message xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance" 
       xmlns:v7.9="urn:gtig:/stuff/gunk/v7.9" 
       xsi:type="Geek:Message" 
       xsi:schemaLocation="urn:gtig:/stuff/gunk/v7.9 /path/to/the/schema"> 
+0

Спасибо! Пропущенная двойная кавычка при наборе моего примера - реальной проблемой был URI пространства имен schemaLocation. – Mike

+0

Но это не похоже на весь ответ, потому что элемент 'message' не имеет пространства имен, тогда как вы загружаете схему для пространства имен' urn: gtig:/stuff/gunk/v7.9' –

+0

Полужирный текст что эквивалентно всем шапкам, и похоже на крики, поэтому используйте его очень экономно. –