2014-06-18 3 views
0

весь вопрос в заголовке: возможно ли назначить определенный IDREF конкретному идентификатору в DTD? Я уверен, что это невозможно, но я просто хочу подтвердить это здесь: PНесколько идентификаторов - несколько IDREF - можно ли назначить определенный IDREF для идентификатора в DTD?

E.g. У меня есть клиентские и рабочие элементы с атрибутами идентификатора типа, а элемент «order» с двумя атрибутами, которые должны ссылаться на заказ клиента и на работника, который получает заказ. упрощенный код из DTD:

<!ELEMENT worker (name, salary, employmDate)> 
<!ATTLIST worker worker_id ID #REQUIRED subordinates IDREFS #IMPLIED> 

<!ELEMENT client (name)> 
<!ATTLIST client client_id ID #REQUIRED> 

<!ELEMENT order (price, date)> 
<!ATTLIST order cl_id IDREF #REQUIRED wrkr_id IDREF #REQUIRED> 

код работает правильно, нет никаких ошибок при проверке, я должен использовать значение идентификаторов для работников и клиентов и могу добавить идентификаторы работников в «подчиненные» аргументе для любого работника.

Однако я могу написать идентификатор клиента в качестве подчиненного или в случае элемента заказа, я могу использовать значение идентификатора клиента для «wrkr_id» и идентификатор работника для «cl_id». Есть ли способ ограничить IDREF принимать только идентификаторы одного типа? Или, возможно, существуют ограничения на атрибуты идентификатора, чтобы идентификаторы рабочих начинались с, например. «w», а идентификаторы клиентов начинаются с, например, «c», который решает эту проблему хотя бы частично?

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

Спасибо!

ответ

2

В DTDM SGML и XML пул идентификаторов, по которым проверены идентификаторы IDREF, является плоским и недифференцированным - так что нет, нет способа написать DTD, чтобы гарантировать, что IDREF на «wrkr_id» ссылается на ID на рабочем месте, что «client_id» относится к клиенту и т. Д.

На практике пользователи идентификаторов и IDREFS (и подобных конструкций в TeX и других инструментах обработки документов) часто считают полезным использовать соглашения, такие как начало всех идентификаторов клиентов с «cl» и всеми идентификаторами работников с помощью «wk»; тогда легко проверить с помощью XSLT, XQuery или инструмента обработки документов по вашему выбору, что все идентификаторы и IDREF имеют соответствующие префиксы.

Перемещение этого дополнительного уровня проверки на язык схемы, так что проверка может обеспечить более надежные гарантии правильности, является одной из мотиваций для более сложной структуры ключей и ключей в XSD и (обобщения бит) для утверждения Schematron и XSD 1.1.

Смежные вопросы