Схема XML - Как я могу изменить имя элемента ref'ed? - PullRequest
7 голосов
/ 10 мая 2011

Я нуб из XML-схемы, и это мой первый вопрос переполнения стека. Пожалуйста, прости меня за незнание стандартов и этикета в обоих.

В файле схемы XML (.xsd) я включаю другую схему (вне моего контроля), которая представляет собой своего рода стандарт де-факто, который использует моя группа. Внутри внешней схемы находится сложный элемент с длинным именем:

<xs:element name="AnnoyingLongElementNameOfSuffering">
    <xs:complexType>
        <xs:sequence>
            ...sub-elements galore...
        </xs:sequence>
    </xs:complexType>
</xs:element>

В моем файле схемы данный элемент был скопирован, что я считаю плохой практикой, и ему было присвоено сокращенное, крошечное имя. Я пытаюсь заменить скопированный код ссылкой на оригинал в другой схеме, но мне нужно сохранить крошечное имя, которое уже используется в существующих файлах экземпляров (также вне моего контроля). Я хотел бы сделать что-то вроде:

<xsd:element name="TinyName" ref="AnnoyingLongElementNameOfSuffering"/>

Однако атрибуты 'name' и 'ref' являются взаимоисключающими. Я не могу переопределить его и перечислить подэлементы, потому что они не объявлены глобально в другой схеме. Я не могу создать производный тип, потому что он определен как элемент в другой схеме, а не как тип. Увы, ни один из моих поисков не дал ничего полезного, предположительно потому, что вы обычно меняете имя элемента или другой файл, но ни один из них не подходит для меня. Вероятно, есть простой ответ, поэтому я с нетерпением жду ваших поучительных ответов.

1 Ответ

6 голосов
/ 16 мая 2011

Попробуйте:

<xsd:element name="TinyName" substitutionGroup="AnnoyingLongElementNameOfSuffering"/>

Кроме того, скажите людям, которые поддерживают стандарт, прекратить использование анонимных сложных типов (определите inline внутри элементов).Существует причина, по которой большинство больших стандартов используют подход, основанный на определении типов, а не элементов: чтобы вы могли наследовать типы или использовать их повторно.Ваш внутренний стандарт может легко перейти на это без потери совместимости: сохраняйте элементы, но назначайте им явные типы.

...