Почему мой тест XML не сходит с очень простой схемой XSD?

StackOverflow https://stackoverflow.com/questions/2827989

  •  26-09-2019
  •  | 
  •  

Вопрос

Я немного новичок в XML схеме. Буду благодарен, если кто-то поможет мне понять, почему мой XML не проверяется с схемой:

Вот моя схема:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/testSchema" xmlns="http://www.example.org/testSchema">
  <xs:element name="Employee">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Name">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="FirstName" />
              <xs:element name="LastName" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Вот мой тест XML:

<?xml version="1.0" encoding="UTF-8"?>
<Employee xmlns="http://www.example.org/testSchema">
 <Name>
  <FirstName>John</FirstName>
  <LastName>Smith</LastName>
 </Name>
</Employee>

Я получаю после получения ошибки Eclipse XML Editor / Validator:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'Name'. One of '{Name}' is expected.

Я не мог понять, что не так с этой схемой или моим XML.

Это было полезно?

Решение

Все, что вам нужно сделать, это добавить elementformdefault = "квалифицированное", и у вас все будет хорошо. Чтобы понять это поведение, прочитайте «Вы квалифицированы?» раздел @ http://msdn.microsoft.com/en-us/library/ms950796.aspx.

Другие советы

Просто добавьте ElementformDefault = «квалифицировано» к атрибутам схемы.

 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"         
       targetNamespace="http://www.example.org/testSchema"
       elementFormDefault="qualified"
       xmlns="http://www.example.org/testSchema">

И ваш оригинал будет работать

 <?xml version="1.0" encoding="utf-8"?>
   <Employee xmlns="http://www.example.org/testSchema">
     <Name>
      <FirstName>John</FirstName>
      <LastName>Smith</LastName>
   </Name>
 </Employee>

Похоже, вы не будете указывать, как подтвердить FirstName и LastName элементы; дать элемент спецификации для тех type="xsd:string" (куда xsd Необходимо сопоставить с пространством имен типа данных XML схемы XML, конечно), и все должно быть хорошо.

Но вам лучше не вложить эти элементы так глубоко. Положить их все на том же уровне и использовать ref="Name" связывать их все вместе; Это делает вашу схему гораздо более гибкой и полезной.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top