Инструмент, который может объединить много файлов XSD в один?
Мне нужно создать классы XML-сериализатора для примерно 65 файлов XSD, для которых я использую Microsoft XSD.EXE для генерации кода C#...
Однако я продолжаю сталкиваться с ограничением символов в Window CMD в результирующем выходном файле (в котором XSD.EXE объединяет имя каждого включенного XSD): "Указанный путь, имя файла или оба слишком длинные. Полное имя файла должно должно быть не более 260 символов, а имя каталога должно быть не более 248 символов."
Короче говоря, кажется, что единственный способ, которым я могу заставить все это проверить и сгенерировать вместе, - это объединить все XSD (отменив ссылку на include /import, который XSD.EXE не разрешает schemaLocation). во всяком случае) в один большой.
Пожалуйста, скажите мне, что существует инструмент для этого...
5 ответов
Что вы можете сделать, это создать еще один новый файл с именем file.xsd, содержащий все имена схем в нем, а затем уловка заключается в том, чтобы назвать последний файл схемы с префиксом.\.
File.xsd
<xsd xmlns='http://microsoft.com/dotnet/tools/xsd/'>
<generateClasses language='CS' namespace='MyNamespace'>
<schema>First.xsd</schema>
<schema>Second.xsd</schema>
<!-- more schema files here -->
<schema>.\Third.xsd</schema>
</generateClasses>
</xsd>
Теперь запустите команду "xsd.exe /p:file.xsd /classes", и вы получите сгенерированный файл классов:)
Для будущих ссылок еще одним инструментом, предназначенным для рефакторинга XML-схемы, является QTAssistant - я с ним связан.
Чтобы прояснить ваш вопрос и, надеюсь, помочь другим... Одна вещь, которую вы не можете выполнить в соответствии с вашей просьбой, состоит в том, что нельзя отменять ссылки на импорт: файл XSD связан с одной схемой XML, которая не допускает более одного целевого пространства имен на xsd: элемент схемы.
Xsd:include может быть "встроенным"; Поскольку файлы должны иметь одно и то же целевое пространство имен или соответствовать подходу к проектированию пространства имен "хамелеон", можно объединить содержимое файла с другим.
Xsd:import не может быть "встроенным"... если только вы не рефакторинге целевых пространств имен. Однако это не приведет к созданию эквивалентного набора схем.
Если у вас есть полностью определенный набор XML-схем, созданный для 65 файлов XSD, например, с 10 пространствами имен, то в "каноническом" наборе перефакторизованных файлов XML-схем должно быть не менее 10 файлов.
Просто добавьте префикс.\ К имени последнего файла.xsd(схема) и заключите его в запятую, например, ".\ Last.xsd". Выходной класс будет создан с последним именем файла схемы.
Я нашел инструмент (в основном, XSLT) для таких вещей: инструмент уплощения XML-схем Пола Киля, но я еще не получил его.
Другие источники говорят, что такие инструменты, как Oxygen XML Editor и XMLSpy, тоже могут это делать, но я не могу понять, как это сделать.
-> http://www.oxygenxml.com/xml_schema_editor.html
В моем случае я решил проблему с помощью другого обходного пути: укоротил имя каждого входного XSD, чтобы объединенное выходное имя XSD.EXE, которое вы не можете выбрать, было ниже предела в 260 символов.
Я только начал использовать Altova XML Spy ( 1 день)
Чтобы свести схему.xsd в один документ... который все еще будет проверен, и предоставить ссылки для щелчка в затмении...
- откройте.xsd, о котором вы говорите...
- Элемент меню под названием (Схема проектирования) имеет элемент под названием (Свести схему).
- Нажмите на это. (он спросит вас, где сохранить новый файл... Я просто создаю выходную папку или что-то.
Кажется, работает просто отлично.