xsd type = "anySimpleType" для атрибута - PullRequest
2 голосов
/ 15 февраля 2012

Извиняюсь, если это глупый вопрос, я до сих пор ничего не делал с xml.

Я хочу иметь возможность десериализовать некоторый xml в класс со свойством типа object. Это свойство может быть int, guid или string. В XML я хотел бы, чтобы это свойство было определено как атрибут. Я бы ожидал, что мой xsd будет выглядеть примерно так:

<xsd:complexType name="MyClass">
  <xsd:attribute name="MyProperty" type="xsd:anySimpleType" />
</xsd:complexType>

Однако в Visual Studio intellisense не указан параметр «xsd: anySimpleType». Это проблема с intellisense или я делаю что-то неправильно?

Ответы [ 2 ]

4 голосов
/ 16 февраля 2012

Хотя допустимо иметь атрибут типа xs: anySimpleType, я бы его избегал и использовал вместо него xs: string. Это связано с тем, что в спецификации остается много вопросов о том, как должен вести себя такой атрибут. Невозможно ограничить его с помощью перечисления или регулярного выражения, очень плохо определено, что происходит, если вы используете его в ограничении идентичности и т. Д. Проверка в точности такая же, как для xs: string, но другие аспекты поведения довольно странно и может варьироваться между реализациями.

Можно утверждать, что xs: anySimpleType имеет смысл, если вы хотите позже определить подтипы, такие как string, int и URI. Но это единственный случай, о котором я могу подумать.

3 голосов
/ 15 февраля 2012

xsd: anySimpleType (и xsd: anyType) - это специальные так называемые определения ur-type (первый тип - простой ur-тип); кстати, когда дело доходит до типов данных XSD, я всегда отмечаю эту диаграмму .

Просто то, что я такой особенный, я считаю, что это одна из причин, почему эти типы не отображаются в Intellisense. Я предполагаю, что другая причина также в том, что это тип , назначенный по умолчанию; другими словами, для вашего атрибута, если вы не установите тип, это будет anySimpleType независимо от этого.

Однако я также признаю, что это объяснение не работает с другими редакторами - Eclipse является одним из них; Там вы получите все эти типы в Intellisense, без вопросов ...

...