Eu estou com um problema ao especificar namespaces. Quando eu defino um namespace somente para o elemento pai, o código não gera erro. Porém, quando coloco o mesmo namespace para os elementos descendentes, aparece o erro do assunto e não sei o porquê.
Bem, o que sei é que se eu especifico um namespace para o elemento pai e não especifico para os descendentes, estes herdam o namespace do pai.
Por que gera-se o erro cvc-complex-type.2.4.a: Invalid content was found starting with element ‘fa:avós’. One of ‘{avós}’ is expected., linha 4 do XML ?
<?xml version="1.0" encoding="ISO-8859-1"?>
<fa:familia xmlns:fa = "FAMILIA-NAMESPACE" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "FAMILIA-NAMESPACE familia.xsd">
<fa:avós parte = "paterno">
<fa:filho nome = "José">
<fa:neto sexo = "M">Sérgio</fa:neto>
<fa:neto sexo = "M">Carlos</fa:neto>
</fa:filho>
<fa:filho nome = "Maria"/>
</fa:avós>
<fa:avós parte = "materno">
<fa:filho nome = "Serena">
<fa:neto sexo = "M">Sérgio</fa:neto>
<fa:neto sexo = "M">Mário</fa:neto>
</fa:filho>
</fa:avós>
</fa:familia>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fa="FAMILIA-NAMESPACE"
targetNamespace="FAMILIA-NAMESPACE">
<xs:element name = "familia" type = "fa:familia"/>
<xs:complexType name = "familia">
<xs:sequence>
<xs:element name = "avós" type = "fa:avós"
minOccurs = "1" maxOccurs = "unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name = "avós_">
<xs:sequence>
<xs:element name = "filho" type = "fa:filho"
minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name = "avós">
<xs:complexContent>
<xs:extension base = "fa:avós_">
<xs:attribute name = "parte">
<xs:simpleType>
<xs:restriction base = "xs:string">
<xs:enumeration value = "paterno"/>
<xs:enumeration value = "materno"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name = "filho_">
<xs:sequence>
<xs:element name = "neto" type = "fa:neto" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name = "filho">
<xs:complexContent>
<xs:extension base = "fa:filho_">
<xs:attribute name = "nome">
<xs:simpleType>
<xs:restriction base = "xs:string"/>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name = "neto">
<xs:simpleContent>
<xs:extension base = "xs:string">
<xs:attribute name = "sexo">
<xs:simpleType>
<xs:restriction base = "xs:string">
<xs:enumeration value = "M"/>
<xs:enumeration value = "F"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>