Мы используем XML для определения схемы управления содержимым, которое может отображаться в инструменте построения диаграмм. Файл схемы указывает, какие типы объектов могут быть размещены на диаграмме, как они могут быть связаны друг с другом и какими свойствами обладают эти объекты (то есть, какие настраиваемые свойства появляются в редакторе).
Когда требуется новый тип схемы, записывается новая схема, которая проверяется на соответствие с XSD. Чтобы сделать файл схемы более модульным и простым в обслуживании, мы используем объявления <!ENTITY> для включения отдельных файлов. Списки свойств и т. д., которые относятся к определенному элементу диаграммы, но могут появляться в нескольких местах схемы, записываются в отдельный XML-файл, а затем включаются в соответствующее место. Сказать:
<!-- Nameing etc. just as an example -->
<!ENTITY CommonProerties1 SYSTEM "file:../CommonProperties1.xml">
<!ENTITY CommonProerties2 SYSTEM "file:../CommonProperties2.xml">
а потом где-то в схеме:
<Node shape="Square">
&CommonProperties1;
<!-- Specific properties go here -->
</Node>
Это предотвращает множество копий и вставок, которые затрудняют обслуживание, а также позволяет совместно использовать общие свойства с несколькими схемами.
Проблема в том, что теперь некоторые из общих свойств также имеют базовые элементы, такие как группы флагов и перечислений и т. д. Я хотел бы, чтобы каждый файл (например, "CommonProperties1.xml") мог включать из другого базового набора, например как «CommonEnums.xml», но я не думаю, что это возможно с помощью объявлений !ENTITY.
Вы не можете объявить !ENTITY вне заголовка !DOCTYPE, и если вы добавите заголовок, это сделает файл XML верхнего уровня недействительным, поскольку он получает объявление заголовка 1.2 через файл.
Кто-нибудь когда-нибудь пытался делать подобные вещи, и что вы сделали, чтобы обойти/решить проблему? Есть ли лучший вариант, который мне не хватает?