2012-01-12 4 views
1

J'ai donc analysé un ensemble de fichiers XML pour générer un fichier de schéma géant utilisant trang qui s'est bien passé. Cependant, lorsque je tente de générer des sources en utilisant xjc, je reçois l'erreur suivante,Erreur lors de la tentative de génération de schéma à l'aide de XJC

xjc reutersXMLSchema.xsd 
parsing a schema... 
[ERROR] no-xsi: The {target namespace} of an attribute declaration must not match  'http://www.w3.org/2001/XMLSchema-instance'. 
line 11 of file:/Users/cqin/Downloads/trang-20081028/xsi.xsd 

Failed to parse a schema. 

Le schéma se présente comme suit,

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.w3.org/2001/XMLSchema-instance"  xmlns:filter="http://schemas.reuters.com/ns/2006/04/14/rmds/webservices/news/filter" xmlns:ns0="http://www.reuters.com/ns/2006/05/01/webservices/rkd/News_1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://schemas.reuters.com/ns/2006/04/14/rmds/webservices/news/headlineml" xmlns:cache_1="http://www.reuters.com/ns/2008/03/01/webservices/rkd/Cache_1" xmlns:ns2="http://www.reuters.com/ns/2006/05/01/webservices/rkd/TokenManagement_1" xmlns:global="http://www.reuters.com/ns/2006/05/01/webservices/rkd/Common_1" xmlns:a="http://www.w3.org/2005/08/addressing"> 
<xs:import namespace="http://schemas.reuters.com/ns/2006/04/14/rmds/webservices/news/filter" schemaLocation="filter.xsd"/> 
<xs:import namespace="http://schemas.reuters.com/ns/2006/04/14/rmds/webservices/news/headlineml" schemaLocation="ns1.xsd"/> 
<xs:import namespace="http://www.reuters.com/ns/2006/05/01/webservices/rkd/Common_1" schemaLocation="global.xsd"/> 
<xs:import namespace="http://www.reuters.com/ns/2006/05/01/webservices/rkd/News_1" schemaLocation="reutersXMLSchema.xsd"/> 
<xs:import namespace="http://www.reuters.com/ns/2006/05/01/webservices/rkd/TokenManagement_1" schemaLocation="ns2.xsd"/> 
<xs:import namespace="http://www.reuters.com/ns/2008/03/01/webservices/rkd/Cache_1" schemaLocation="cache_1.xsd"/> 
<xs:import namespace="http://www.w3.org/2003/05/soap-envelope" schemaLocation="s.xsd"/> 
<xs:import namespace="http://www.w3.org/2005/08/addressing" schemaLocation="a.xsd"/> 
<xs:attribute name="type" type="xs:NCName"/> 
</xs:schema> 

Toute idée pourquoi il ne fonctionne pas?

J'ai essayé de changer le targetNameSpace en quelque chose d'unique mais j'ai plus d'erreurs donc je me demande s'il y a quelque chose que je peux faire avec l'erreur originale.

Merci!

Répondre

0

Oui, ce n'est pas juste:

targetNamespace="http://www.w3.org/2001/XMLSchema-instance" 

Ce dit que l'espace de noms cible de votre schéma est en fait l'espace de noms du schéma de définition de schéma lui-même (à savoir le schéma qui définit les choses comme <xs:schema> et <xs:import> signifie réellement). Ce schéma est fixe, vous ne pouvez pas écrire votre propre schéma le ciblant, c'est pourquoi XJC le rejette.

J'ai essayé de changer le TargetNamespace à quelque chose d'unique, mais je reçois plus d'erreurs

continuer à essayer, vous obtiendrez plus loin que ce que vous avez maintenant. Cependant, le fait que trang génère ce mauvais schéma suggère que vous avez fait quelque chose de mal plus loin le long de la ligne. Peut-être que vous lui avez demandé de générer un schéma combiné qui incluait le schéma http://www.w3.org/2001/XMLSchema-instance lui-même, ce qui n'est certainement pas ce que vous voulez faire.

+0

Peut-être que la façon dont j'aborde ma tâche est fausse et peut-être que vous pouvez fournir un peu plus de perspicacité. Fondamentalement, j'ai quelques XML qui consistent en plusieurs requêtes/réponses XML SOAP, environ 6 d'entre elles. J'ai juste essayé d'utiliser trang pour combiner tous les XML dans un schéma géant comme m'a été conseillé par un collègue. Est-ce la bonne façon de s'y prendre en premier lieu? –

+0

@soulesschild: Non, ça ne me semble pas une bonne idée, d'après ce que tu m'as dit. Qu'essayez-vous d'accomplir? – skaffman

+0

Fondamentalement, nous utilisons l'API d'un tiers pour créer notre propre API à usage interne. Le moyen d'appeler leur API est d'utiliser POST pour publier du code XML avec la requête, puis recevoir une réponse au format XML. Il y a environ 5 demandes et réponses différentes. L'ensemble de l'API doit être écrit en Java. –

1

Je classerais cela comme un bug dans trang. Remplacer toutes les instances de la chaîne "www.w3.org/2001/XMLSchema-instance" par quelque chose comme "schemas.reuters.com/ns/2006/04/14/rmds/webservices/news/xsi" dans tous les fichiers, et ça devrait aller.

par exemple.

sed -i -e 's, www.w3.org/2001/XMLSchema instance, schemas.reuters.com/ns/2006/04/14/RMD/webservices/Nouvelles/xsi, g' *

+0

Merci beaucoup @Bill. Pouvez-vous expliquer comment cela fonctionne? –

Questions connexes