Pourquoi mon test xml échoue avec très simple schéma XSD?
-
26-09-2019 - |
Question
Je suis un peu novice dans le schéma XML. Je serais reconnaissant de bien vouloir aider quelqu'un me chercher à comprendre pourquoi mon xml n'est pas validée avec le schéma:
Voici mon schéma:
<?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>
Voici mon xml test:
<?xml version="1.0" encoding="UTF-8"?>
<Employee xmlns="http://www.example.org/testSchema">
<Name>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
</Name>
</Employee>
J'obtiens l'erreur suivante Eclipse XML Editor / validateur:
cvc-complex-type.2.4.a: Invalid content was found starting with element 'Name'. One of '{Name}' is expected.
Je ne pouvais pas comprendre ce qui ne va pas avec ce schéma ou mon xml.
La solution
u tous ont à faire est d'ajouter elementFormDefault = « qualifié » et u ira bien. de comprendre ce comportement, lisez « êtes-vous qualifié? » @ section http://msdn.microsoft.com/en-us/library/ ms950796.aspx
Autres conseils
Il suffit d'ajouter le elementFormDefault = "qualifié" au schéma attribues.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/testSchema"
elementFormDefault="qualified"
xmlns="http://www.example.org/testSchema">
Et votre travail de testament original
<?xml version="1.0" encoding="utf-8"?>
<Employee xmlns="http://www.example.org/testSchema">
<Name>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
</Name>
</Employee>
On dirait que vous êtes ne pas préciser comment valider les éléments de FirstName
et LastName
; donner les spécifications d'éléments pour les type="xsd:string"
(où les besoins de xsd
à mapper sur l'espace de noms XML Schema Datatypes, bien sûr) et tout devrait bien.
Mais vous êtes mieux de ne pas nichait ces éléments si profond. Mettez tous au même niveau ref="Name"
et utiliser pour les relier tous ensemble au lieu; il rend votre schéma beaucoup plus flexible et utilisable.