Pergunta

Eu sou um pouco novato no esquema XML. Eu ficaria grato se alguém me ajudasse a entender por que meu XML não está sendo validado com o esquema:

Aqui está meu esquema:

<?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>

Aqui está o meu teste xml:

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

Estou recebendo o seguinte erro pelo Eclipse XML Editor/Validador:

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

Eu não conseguia entender o que há de errado com este esquema ou meu XML.

Foi útil?

Solução

Tudo o que você precisa fazer é adicionar eletFormDefault = "qualificado" e você ficará bem. Para entender esse comportamento, leia "Você está qualificado?" seção @ http://msdn.microsoft.com/en-us/library/ms950796.aspx

Outras dicas

Basta adicionar o elementFormDefault = "qualificado" aos atributos do esquema.

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

E seu original vai funcionar

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

Parece que você está deixando de especificar como validar o FirstName e LastName elementos; Dê as especificações do elemento para aquelas type="xsd:string" (Onde xsd Precisa ser mapeado para o espaço de nome de dados do esquema XML, é claro) e tudo deve estar bem.

Mas é melhor você não aninhar esses elementos tão profundos. Coloque todos eles no mesmo nível e use ref="Name" para vincular todos eles; Isso torna seu esquema muito mais flexível e utilizável.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top