xsd: определить массив (не предопределенных) атрибутов для данного тега - PullRequest
0 голосов
/ 04 февраля 2020

Мне нужно добавить локализацию на несколько языков в XML. Тег, содержащий текст, называется «saluto», на данный момент он выглядит следующим образом:

<saluto>buon giorno</saluto>

Для добавления новых переводов одним из самых компактных решений, которое я могу себе представить, является использование атрибутов для пропустите различные переводы, поэтому я буду избегать дублирования тегов:

<saluto IT="buon giorno" EO="bonan tagon" EN="good morning" CN="早安" PL="dzień dobry" />

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

1 Ответ

0 голосов
/ 06 февраля 2020

одним из самых компактных решений, которое я могу себе представить, является использование атрибутов для передачи различных переводов, поэтому я буду избегать дублирования тегов

Я бы скромно предположил, что компактность, хотя и приятна иметь, не должно быть вашим главным соображением. Если компактность действительно является наиболее важным критерием, то XML, вероятно, является неправильным выбором формата файла.

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

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

Альтернативный, почти такой же компактный подход:

<saluto lang="EN">Good morning</saluto>

Список допустимых значений для атрибута lang может затем указывается ограничение простого типа с одним <xs:enumeration> для каждого языка. Будущие версии XSD могут просто добавлять новые перечисления.

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