2017-03-13 4 views
0

J'ai le main.xsd attaché qui importe les types.xsd. Ouvrez-le dans XmlSpy (ou similaire) et le main.xsd validera très bien. Cependant, si le préfixe d'espace de noms ns0 est supprimé de la déclaration, il ne sera pas validé - même si le préfixe n'est utilisé nulle part.XSD invalide sans préfixe

Bon: <xs:schema xmlns:ns0="http://schemas.asidua.com/CCP/IntegrationServices/2011-11-18/Data"

Bad: <xs:schema xmlns="http://schemas.asidua.com/CCP/IntegrationServices/2011-11-18/Data"

Le message d'erreur de validation: "Cannot resolve declaration or definition 'ArrayOfString' in namespace 'http://schemas.asidua.com/CCP/IntegrationServices/2011-11-18/Data'"

Quelqu'un peut-il s'il vous plaît expliquer pourquoi le préfixe est nécessaire?

Bon fichier: GoodMain.xsd fichier incorrect: BadMain.xsd types importés xsd: Types.xsd

+0

J'ai changé le terme « alias » à « préfixe » comme l'a suggéré –

Répondre

0

En définissant « xmlns = », je dis que tous les éléments non qualifiées appartiennent à cet espace de noms par défaut. Le problème était, parce que je n'avais pas d'attribut "targetNamespace =" pour le schéma, alors l'espace de noms que l'espace de noms par défaut ciblé n'existait pas.

J'ai maintenant défini le XSD comme suit:

<xs:schema targetNamespace="http://schemas.asidua.com/CCP/IntegrationServices/2011-11-18/Data" xmlns="http://schemas.asidua.com/CCP/IntegrationServices/2011-11-18/Data" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:q2="http://microsoft.com/wsdl/types/" elementFormDefault="unqualified" attributeFormDefault="unqualified"> 

fichier complet ici: best.xsd

3

Si le préfixe d'espace de noms ns0 est utilisé nulle part, vous pouvez supprimer en toute sécurité la déclaration d'espace de noms xmlns:ns0="http://schemas.asidua.com/CCP/IntegrationServices/2011-11-18/Data"

Qu'est-ce que vous pouvez » Le faire est de le remplacer par une déclaration d'espace de nom différente, xmlns="http://schemas.asidua.com/CCP/IntegrationServices/2011-11-18/Data". Cela modifie l'espace de noms par défaut, ce qui modifie la signification de tous les noms non préfixés dans le document de schéma.

Mise à jour en réponse aux commentaires: Plus particulièrement, si un espace de noms par défaut D est déclaré dans un schéma, puis déclaré globalement éléments, types, etc. (<element name="x"/>) sera dans le targetNamespace du schéma, tandis que les noms qui font référence à les éléments ou les types (type="x", ref="x") seront dans l'espace de noms D. Ce qui aura tendance à poser problème à moins que D ne soit identique à targetNamespace.

(Soit dit en passant, ce n'est pas appelé un « alias ». Vous serez mieux compris si vous utilisez la bonne terminologie.)

+0

Ainsi, en ajoutant le préfixe ns0, J'étais effectivement –

+0

Merci beaucoup pour votre réponse Michael. Pour clarifier ma compréhension, en ajoutant le préfixe ns0, j'ai effectivement supprimé l'espace de noms par défaut du XSD. Avec l'espace de noms défini en utilisant xmlns = "http: // etc." cela signifiait que l'élément "AdapterItemEntityNames" du type complexe "SchemaAttribute" se trouvait dans l'espace de noms par défaut mais que le type complexe "ArrayOfString" ne l'était pas? Si oui, alors ceci suggère que les éléments de types sont inclus dans les espaces de noms par défaut mais que les types eux-mêmes ne le sont pas? –

+0

Je pense que je l'ai maintenant! En définissant "xmlns =", je disais que tous les éléments non qualifiés appartiendront à cet espace de noms par défaut. Le problème était, parce que je n'avais pas d'attribut "targetNamespace =" pour le schéma, alors l'espace de noms que l'espace de noms par défaut ciblé n'existait pas. –