2010-08-23 14 views
4

J'ai un schéma ici où j'essaie d'inclure/importer un autre schéma qui n'a pas d'espace de noms (et cela ne peut pas être changé car il vient d'un autre fournisseur et il ne serait pas valider plus longtemps leur XML). Voici le premier schéma:Comment importer un schéma XML dans le "no namespace"

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:samp="http://sample/namespace" 
targetNamespace="http://sample/namespace" 
elementFormDefault="unqualified" attributeFormDefault="unqualified" 
xmlns:otr1="http://sample/import/namespace1" 
xmlns:otr2="http://sample/import/namespace2"> 

<xs:import namespace="http://sample/import/namespace1" schemaLocation="other1.xsd" /> 
<xs:import namespace="http://sample/import/namespace2" schemaLocation="other2.xsd" /> 
<!-- This one below is having problems, it is valid XML, and I am able to use it 
but I am not meeting the actual requirments I have (explained later) --> 
<xs:include schemaLocation=="NO_NAME_SPACE_PROBLEM.xsd"/> 

... 
<xs:element ref="some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA"/> 
... 


</xs:schema> 

Et le « NO_NAME_SPACE_SHEMA_PROBLEM.xsd » qui peut être changé dans une certaine mesure, mais il ne peut pas avoir l'espace de noms.

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="unqualified" attributeFormDefault="unqualified"> 

<xsd:element name="some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA" 
    type="xsd:string" nillable="true"/> 

</xs:schema> 

Le problème est que le some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA est mis dans l'espace de noms samp. Donc, quand j'essaye de le faire passer en XML, il imprime <samp:some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA><child-elem/></samp:some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA>, ce qui est un gros problème parce que le XML ne va pas valider puisqu'il n'est pas destiné à l'avoir. Mon but est donc simplement d'importer des éléments dans l'espace de noms sans espace de noms.

Mise à jour 1: Désolé pour la confusion, j'étais et j'utilise xs: include, pas xs: import pour le schéma sans espace de noms. La syntaxe de la question a été mise à jour. J'utilise également JiBX codegen pour générer des objets de domaine et une liaison JiBX pour le marshalling. Donc ça doit être compatible avec JiBX aussi.

Mise à jour 2: Selon la réponse de skaffman, j'utiliserai maintenant xs: import. Je pense que je vais brancher ceci dans une nouvelle question.

+0

Vous devez être très clair sur la distinction entre 'import' et' include', ils font des choses follement différentes. – skaffman

+0

Oui, je suis désolé, je voulais y aller plus tôt mais j'ai été retenu avant que je puisse revenir à mon clavier. – Zombies

Répondre

3

Avez-vous essayé

<xs:import namespace="" schemaLocation="NO_NAME_SPACE_PROBLEM.xsd"/> 

Intéressant, la spécification de schéma XML strongly suggests qui

<xs:import schemaLocation="NO_NAME_SPACE_PROBLEM.xsd"/> 

devrait importer NO_NAME_SPACE_PROBLEM.xsd dans "aucun espace de noms". Si votre environnement l'importe à la place dans l'espace de nom du document du schéma englobant, alors je suis à peu près sûr que c'est un bogue dans votre plate-forme.


mise à jour: OK, votre mise à jour dit que vous essayez d'utiliser <xs:include> pour faire référence à des types dans un autre espace de noms. Vous ne pouvez pas faire cela - <xs:include>toujours apporte les éléments inclus dans le même espace de noms que le document de schéma parent. S'ils sont pour un espace de noms différent, vous devez utiliser <xs:import>.

Si vous voulez vous référer à l'une des définitions d'éléments dans le schéma d'espace de noms sans import, alors vous devez trouver un moyen d'assigner un préfixe à l'espace de noms "sans espace de noms". Si elle avait un préfixe, vous pouvez les consulter comme ceci:

<xs:element ref="nn:some-elem-from-NO_NAME_SPACE_PROBLEM_SCHEMA"/> 

Essayez d'ajouter l'attribut xmlns:nn="" au document de schéma parent, voir si cela fonctionne.

+0

@skaffman: J'ai mis à jour ma réponse, désolé pour la confusion. J'ai aussi essayé '' mais maintenant '' ne peuvent pas résoudre l'élément ref . – Zombies

+0

@Zombies: Voir la mise à jour de la réponse. – skaffman

+0

@skaffman: vous avez mis à jour la réponse est très appréciée.Je regarde maintenant dans cette direction. J'ai juste des problèmes JiBX maintenant, peut-être que je vais ramener cela à une nouvelle question. – Zombies

Questions connexes