2009-03-26 6 views
24

J'ai un fichier .xsd que j'utilise pour générer du code avec l'outil xsd.exe à partir de Visual Studio. Certains membres de la classe sont Guids et l'outil xsd.exe donne 2 avertissements:Quelle est la bonne façon d'utiliser le type Guid dans un fichier XSD?

L'espace de noms 'http://microsoft.com/wsdl/types/' n'est pas disponible pour être référencé dans ce schéma. Le type 'http://microsoft.com/wsdl/types/:guid' n'est pas déclaré.

Le type Guid est reconnu car le fichier C# généré est valide et fonctionne. Quelqu'un sait comment se débarrasser de ces avertissements?

Quelle est la syntaxe correcte pour que les XSD à valider ET les membres de la classe soient générés en tant que System.Guid?

Répondre

40

Merci à tous, je trouvé comment supprimer les avertissements.

En tant que sysrqb, l'espace de noms wsdl a été supprimé ou n'a jamais existé. Il semble que l'outil xsd.exe connaisse la définition guid en interne, mais il ne peut pas valider le schéma xsd.

Comme l'a souligné boj, la seule façon de valider le schéma avec Guids est de (re) définir ce type dans un schéma. L'astuce consiste ici à ajouter le type Guid au même espace de noms "http://microsoft.com/wsdl/types". De cette façon, le xsd.exe fera l'association appropriée entre http://microsoft.com/wsdl/types:Guid et System.Guid

J'ai fait un nouveau fichier XSD pour le type de guid:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://microsoft.com/wsdl/types/" > 
    <xs:simpleType name="guid"> 
     <xs:annotation> 
      <xs:documentation xml:lang="en"> 
       The representation of a GUID, generally the id of an element. 
      </xs:documentation> 
     </xs:annotation> 
     <xs:restriction base="xs:string"> 
      <xs:pattern value="\{[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\}"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

Ensuite, je lance xsd.exe avec mes deux fichier XSD d'origine et ce nouveau fichier xsd:

xsd.exe myschema.xsd guid.xsd /c 
+2

Je devais utiliser '' ' Sense545

+0

J'ai frappé 'Erreur: Type référencé {http://microsoft.com/wsdl/types/}guid n'a pas été trouvé' en essayant d'utiliser scalaxb.org/online pour générer une équipe wsdl .Net dans Scala. J'ai juste ajouté le xsd dans cette réponse dans la solution et il a généré toutes les classes de scala très bien. Merci! – simbo1905

1

Il semble que la page d'extension de l'espace de noms wsdl ait été supprimée, il ne peut donc pas trouver les informations de type dont vous avez besoin.

3

Citation de here:

XmlSchema guidSchema = new XmlSchema(); 
    guidSchema.TargetNamespace = "http://microsoft.com/wsdl/types/"; 

    XmlSchemaSimpleTypeRestriction guidRestriction = new XmlSchemaSimpleTypeRestriction(); 
    guidRestriction.BaseTypeName = new XmlQualifiedName("string", XmlSchema.Namespace); 

    XmlSchemaPatternFacet guidPattern = new XmlSchemaPatternFacet(); 
    guidPattern.Value = @"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"; 
    guidRestriction.Facets.Add(guidPattern); 

    XmlSchemaSimpleType guidType = new XmlSchemaSimpleType(); 
    guidType.Name = "guid"; 
    guidType.Content = guidRestriction; 
    guidSchema.Items.Add(guidType); 

    schemaSet.Add(guidSchema); 

    XmlSchema speakerSchema = new XmlSchema(); 
    speakerSchema.TargetNamespace = "http://www.microsoft.com/events/teched2005/"; 

    // ... 

    XmlSchemaElement idElement = new XmlSchemaElement(); 
    idElement.Name = "ID"; 

    // Here's where the magic happens... 

    idElement.SchemaTypeName = new XmlQualifiedName("guid", "http://microsoft.com/wsdl/types/"); 
+1

Merci, je comprends bien, je dois rouler mon propre schéma pour le type Guid pour reproduire ce que l'espace de noms wsdl fait. Ceci est du code C# cependant, comment puis-je mettre ceci dans mon fichier XSD afin que xsd.exe puisse le lire? – erbi

+0

Je pense que vous ne pouvez pas étendre xsd.exe de cette façon. Mais pouvez-vous être en mesure de générer un schéma avec .NET, sans xsd.exe basé sur cet extrait de code. Ou, d'autres alternatives xsd.exe: http://www.hitsw.com/xml_utilites/ Je vais google pour l'implémentation complète de .NET. – boj

Questions connexes