Подтвердить что ты не робот

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

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

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

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

Каков правильный синтаксис для проверки XSD, а члены класса генерируются как System.Guid?

4b9b3361

Ответ 1

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

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

Как отметил boj, единственный способ проверить схему с гидами в ней - это (re) определить этот тип в схеме. Трюк здесь заключается в том, чтобы добавить тип Guid к тому же " http://microsoft.com/wsdl/types" пространство имен. Таким образом, xsd.exe будет выполнять правильную связь между http://microsoft.com/wsdl/types:Guid и System.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

Ответ 2

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

   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 where the magic happens...

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

Ответ 3

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