Как правильно использовать тип Guid в файле XSD?

У меня есть .xsd-файл, который я использую для генерации кода с xsd.exe инструмент из Visual Studio. Некоторые члены класса-это GUID и xsd.exe tool выдает 2 предупреждения:

пространство имен'http://microsoft.com/wsdl/types/ ' недоступно для ссылки в этой схеме. Тип 'http://microsoft.com/wsdl/types/:guid Не заявил.

тип Guid распознается, поскольку созданный файл C# является допустимым и работает. Кто-нибудь знает, как избавиться об этих предупреждениях?

каков правильный синтаксис для проверки XSD и создания членов класса как системы.Идентификатор GUID?

3 ответов


спасибо всем, Я нашел, как удалить предупреждения.

As sysrqb сказал, пространство имен wsdl либо было удалено, либо никогда не существовало. Кажется, что xsd.exe инструмент знает определение Guid внутренне, но он не может проверить схему xsd.

As boj указал, что единственный способ проверить схему с GUID в ней - (re)определить этот тип в схеме. Трюк здесь состоит в том, чтобы добавить тип Guid к тому же "http://microsoft.com/wsdl/types" пространство имен. Таким образом, xsd.exe сделает правильную ассоциацию междуhttp://microsoft.com/wsdl/types:Guid и система.Guid

Я сделал новый xsd-файл для типа 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>

затем я запускаю xsd.exe с моим исходным файлом xsd и этим новым файлом xsd:

xsd.exe myschema.xsd guid.xsd /c

цитата из здесь:

   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/");

похоже, что страница расширения пространства имен wsdl была удалена, поэтому она не может найти необходимую информацию о типе.