7
votes

Pourquoi Xsd.exe crée-t-il deux fichiers .xsd et comment les utiliser?

J'utilise la commande suivante pour générer un fichier XSD associé à partir de mon fichier XML d'entrée - Response.xml, ma confusion est (1) pourquoi il y a deux sorties de fichier XSD (réponse.xsd et réponse_app1.xsd), je pense Il ne devrait y avoir qu'un seul d'entre eux généré? (2) Si je dois générer un fichier de classe C # en utilisant XSD / Classes, quel fichier XSD dois-je utiliser?

Mon environnement: VSTS 2008 + C # + .NET 3.5. P>

D:\>xsd response.xsd /classes
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 2.0.50727.3038]
Copyright (C) Microsoft Corporation. All rights reserved.
Schema validation warning: The 'http://www.mycorp.com/Order/2009/05/mex:Items' e
lement is not declared. Line 10, position 16.

Warning: Schema could not be validated. Class generation may fail or may produce
 incorrect results.

Error: Error generating classes for schema 'response'.
  - The element 'http://www.mycorp.com/Order/2009/05/mex:Items' is missing.

If you would like more help, please type "xsd /?".


0 commentaires

4 Réponses :


1
votes

IIRC, vous utilisez les deux, on fera probablement référence à l'autre.


1 commentaires

@Leppie, 1. Lorsque j'exécute une réponse XSD.xsd pour générer une classe C # associée, il y a des messages d'erreur. J'ai posté dans mon article d'origine Modifier 1 section. Des idées ce qui ne va pas? 2. "On va probablement faire référence à l'autre" - comment prouvez-vous cela?



2
votes

La raison pour laquelle deux fichiers sont générés est parce que votre XML contient deux espaces de noms XML; Chaque XSD généré correspond à un espace de noms. L'un pour l'espace de noms d'enveloppe SOAP importe l'espace de noms Mycorp (que vous pouvez voir à partir de l'élément XS: importation).


10 commentaires

Ma confusion est pourquoi un fichier XSD ne pouvait contenir qu'un espace de noms?


Une autre confusion est qu'il y a 4 espaces de noms, ils sont xmlns: soprenv = " schemas.xmlsoap.org/soap/ enveloppe "xmlns: xsd =" w3.org/2001/xmlschema "xmlns : xsi = " w3.org/2001/XMLSchema-Instance Espace de noms Mycorp, Pourquoi avez-vous dit qu'il n'y a que 2 espaces de noms?


Bien que ces autres espaces de noms soient déclarés dans votre document XML, aucun élément ne les utilise réellement.


En réponse à votre première question, un espace de noms XML mappe généralement et identifie un schéma. Cela a du sens ce que l'outil XSD fait. Êtes-vous sûr de vous avoir besoin de générer un schéma pour le tout? Le schéma de l'enveloppe SOAP est déjà défini ( w3.org/tr/2000/note-soap-20000508/envelope-2000-04-18.xml ). Vous pouvez simplement vouloir exécuter XSD sur un document contenant la charge utile du savon.


Merci Jacob, 1. Je veux confirmer avec vous que vous voulez dire seulement mycorp (espace de noms par défaut) et SOPENV sont utilisés dans le document XML, les XSI / XSD ne sont pas utilisés, ils sont donc ignorés dans le fichier XSD généré? 2. Je pense toujours que tout générer dans un fichier schéma (.xsd) est plus pratique, pourquoi vous pensez générer des fichiers distincts sont meilleurs?


1. Oui. 2. Différents espaces de noms signifient généralement différentes applications. Par exemple, XHTML peut inclure MathML via l'utilisation de différents espaces de noms. Cependant, comme ils existent de manière indépendante, cela n'aurait pas de sens pour un fichier de définition de schéma XML d'inclure les deux.


@Jacob, j'ai lu plus de détails dans les fichiers XSD générés et ils se réfèrent réellement mutuellement, alors je suis confus sur la raison pour laquelle vous avez dit qu'ils existent de manière indépendante? Et je ne sais pas non plus (depuis la référence croisée), qu'ils puissent être utilisés de manière indépendante sans l'existence des autres. Des commentaires? BTW: Référence croisée Je veux dire dans chaque fichier XSD, il existe un espace de noms cibles pour les éléments définis à l'intérieur de l'espace de noms lui-même, mais il contient également l'espace de noms de référence d'autre, ce que je veux dire référence croisé.


Ce que je dis, c'est que les espaces de noms XML peuvent exister de manière indépendante, ils résident donc généralement dans des XSDS séparés. Dans le cas de vos schémas générés, ils sont liés, il est donc importé dans l'autre. Toute la chose XSD distincte était simplement un choix d'organisation de fichiers fabriqué par le créateur de l'outil.


"Toute la chose XSD distincte était simplement un choix d'organisation de fichiers fabriqué par le Créateur de l'outil" - Pourriez-vous expliquer vos mots indiqués dans d'autres mots s'il vous plaît? Désolé mon anglais n'est pas très bon. :-)


Ce que je veux dire, c'est que l'outil XSD génère deux fichiers de schéma non par nécessité, mais parce que c'est une pratique courante d'organiser des schémas.



6
votes

George,

pour générer des cours à partir de ces fichiers, vous devez énumérer les deux sur la ligne de commande: xxx


Il a déjà été correctement dit que le Deux fichiers .xsd sont parce qu'il y avait deux espaces de noms XML dans votre fichier XML d'origine. BTW, je suppose un peu ici parce que vous n'avez pas publié le fichier XML.


2 commentaires

Merci, pourquoi il y a deux fichiers XSD générés autres qu'un? Et quelles sont les différentes fonctions des deux fichiers?


BTW: Votre solution fonctionne. Des commentaires ou des idées à ma question ci-dessus? :-)



-2
votes

Oui, supprimez les espaces de noms du fichier XML et générez-le, vous obtiendrez un fichier XSD unique


0 commentaires