Создать XSD-файл без элементов REF - я просто хочу "буквальный" XSD-файл - PullRequest
0 голосов
/ 24 марта 2009

Когда я использую файл примера XML для генерации XSD, используя и Visual Studio, и Oxygen, он генерирует файл, используя тонны <xs:element ref="ELEMENTNAME" />, где elementname - это фактическое имя элемента. Позже в файле есть элемент <xs:element name="ELEMENTNAME" type="xs:string" />, где он определяет, что это за элемент. Например, вот выдержка:

<xs:element name="Header">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="VersionNumber" /> 
      <xs:element ref="BillerGroupID" /> 
      <xs:element ref="BillerGroupShortName" /> 
      <xs:element ref="BillerID" /> 
      <xs:element ref="BillerShortName" /> 
      <xs:element ref="FileIndicator" /> 
    </xs:sequence>
  </xs:complexType>
</xs:element>
<xs:element name="VersionNumber" type="xs:string" /> 
<xs:element name="BillerGroupID" type="xs:string" /> 
<xs:element name="BillerGroupShortName" type="xs:string" /> 
<xs:element name="BillerID" type="xs:string" /> 
<xs:element name="BillerShortName" type="xs:string" /> 
<xs:element name="FileIndicator" type="xs:string" /> 

Вот в чем проблема - я использую Microsoft Biztalk, и он видит каждый тег «Элемент» в качестве доступной схемы, потому что все они находятся на корневом уровне - заголовке, вместе с каждым дочерним элементом. Я просто хочу сделать одну схему доступной - в данном случае заголовок - и скрыть остальные.

Очевидное решение, похоже, состоит в том, чтобы вручную отредактировать мой файл, чтобы он выглядел следующим образом, вручную удаляя операторы REF:

<xs:element name="Header">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="VersionNumber" type="xs:string" /> 
      <xs:element name="BillerGroupID" type="xs:string" /> 
      <xs:element name="BillerGroupShortName" type="xs:string" /> 
      <xs:element name="BillerID" type="xs:string" /> 
      <xs:element name="BillerShortName" type="xs:string" /> 
      <xs:element name="FileIndicator" type="xs:string" /> 
    </xs:sequence>
  </xs:complexType>
</xs:element>

Однако, поскольку мой файл огромен и содержит тысячи элементов, это не очень возможно. Есть ли способ сообщить моему инструменту о создании файла без использования REF, а вместо этого просто поместить копию элемента там, где он должен быть, а не на корневом уровне?

Ответы [ 3 ]

3 голосов
/ 24 марта 2009

Если у вас есть проект Visual Studio BizTalk, вы можете выбрать «Добавить созданные элементы ..», а затем «Создать схемы».

В раскрывающемся списке выберите «Правильно сформированный xml», если никто не использовал эту опцию, прежде чем запускать скрипт для его активации, см. Ссылку ниже.

VS теперь будет генерировать схему, которую вы хотите. Вам придется корректировать типы данных, если VS угадал неправильно:)

Посмотреть образец этого человека Добавить сгенерированные схемы

0 голосов
/ 24 марта 2009

Какую версию VS вы используете? Я попробовал ваш пример в Visual Studio 2008, и он сгенерировал XSD так, как вы этого хотите:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Header">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="VersionNumber" type="xs:string" />
        <xs:element name="BillerGroupID" type="xs:string" />
        <xs:element name="BillerGroupShortName" type="xs:string" />
        <xs:element name="BillerID" type="xs:string" />
        <xs:element name="BillerShortName" type="xs:string" />
        <xs:element name="FileIndicator" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Похоже, VS 2005 сделает то же самое.

Я просмотрел диалоги параметров VS, но не увидел ничего, что могло бы контролировать генерацию XSD. (Может быть, где-то есть файл конфигурации?)

0 голосов
/ 24 марта 2009

Я подозреваю, что было бы относительно легко написать XSLT, который выполняет это преобразование для вас. Вы можете обнаружить атрибуты ref и использовать значение в XPath, чтобы найти реальное определение, а затем скопировать его в вывод. Не должно быть очень сложно писать.

...