Экспорт метаданных DataContractSerializer.Связанные схемы - PullRequest
0 голосов
/ 10 ноября 2011

Я экспортирую контракты данных сборки с помощью svcutil.exe.Он генерирует набор файлов xsd, включающих друг друга, например:

<xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
  <xs:import namespace="http://schemas.datacontract.org/2004/07/System.Reflection" />
  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
  <xs:import namespace="http://schemas.datacontract.org/2004/07/System" />
  <xs:import namespace="http://schemas.datacontract.org/2004/07/UBP.Business.Core" />
  <xs:import namespace="http://schemas.datacontract.org/2004/07/UBP.Core" />
  <xs:import namespace="http://schemas.datacontract.org/2004/07/UBP.Collection" />
  <xs:import namespace="http://schemas.datacontract.org/2004/07/System.Data" />

Мне кажется, что эта утилита предполагает, что все схемы передаются на сервер, где каждая схема может быть доступна по указанной гиперссылке.Но если я открою каждую схему отдельно в Altova XMLSpy, например, он сообщит об ошибке, которая не может найти схемы импорта.Поэтому мой вопрос заключается в том, как публиковать сгенерированные схемы, чтобы все они были видны друг для друга?Или, может быть, есть другие варианты?

1 Ответ

1 голос
/ 15 ноября 2011

Сгенерированные схемы ссылаются не друг на друга через гиперссылки, а на относительные пути.Что вы должны найти, так это то, что один из файлов схемы будет «основным» файлом схемы, и пока все файлы схемы присутствуют, при его открытии в XMLSpy все относительные пути к другим схемам будут разрешаться, и схемадолжен открыться нормально.

ОБНОВЛЕНИЕ

Мой первоначальный ответ на самом деле вводит в заблуждение и фактически неверен.В схемах не определен относительный путь.Файлы ссылаются друг на друга ТОЛЬКО по пространству имен.

Таким образом, тип, определенный в одной схеме, можно использовать в другой, включив ссылку на пространство имен типа.

Забудьте все остальное, что я сказал (все относительные пути были дерьмом, и я не думал об этом прямо, когда отвечал - извиняюсь за это).

Поскольку вы сгенерировали эти схемы из сборкикоторые определяли множество взаимозависимых типов, схемы, которые были сгенерированы, чтобы содержать XSD-эквиваленты этих типов, также имеют высокую степень взаимозависимости, следовательно, все операторы импорта.

Однако, ссылаясь на эти пространства имен, вы можете создавать новые схемы XSD, которые используют типы, определенные в этих сгенерированных схемах.

Пространство имен, о котором вы спрашивали (http://schemas.microsoft.com/2003/10/Serialization/) не обращается к ресурсу; скорее, оно позволяет повторно использовать типы, определенные в этом пространстве имен. Возможно, вы увидите соответствующий xmlns атрибут в корне схемы, который будет определять префикс для использования при ссылках на типы из этого пространства имен.

Надеюсь, это понятно.

...