2013-02-24 2 views
0

Я начинаю писать в xml, и у меня есть проблема. У меня есть базовый dtd вызываемый человек, и я использую его как сущность как в тренере, так и в компании. У меня также есть учебный корневой элемент, и в этом корневом элементе у меня либо есть тренер, либо компания. Когда я пытаюсь проверить файл xml, я сталкиваюсь с ошибкой «Элемент« человек »уже объявлен». , Как я могу сохранить свою структуру так, как она есть, и проверить мой XML-файл. Кстати, я использовал форму сущности для повторного использования моего person.dtd. Благодарим вас за помощь.Элемент, который уже определил ошибку

Это файл "person.dtd":

<!ELEMENT person (id, name, lastname, 
        telNo, adress, birthday, 
        email)> 
<!ELEMENT id (#PCDATA)> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT lastname (#PCDATA)> 
<!ELEMENT telNo (#PCDATA)> 
<!ELEMENT adress (#PCDATA)> 
<!ELEMENT birthday (#PCDATA)> 
<!ELEMENT email (#PCDATA)> 

Это файл "trainer.dtd":

<!ELEMENT trainer (trainerPerson,proficiency)> 
<!ENTITY % trainerPerson SYSTEM "person.dtd"> 
%trainerPerson; 
<!ELEMENT proficiency (#PCDATA)> 

Это "company.dtd":

<?xml version="1.0" encoding="UTF-8"?> 
<!ELEMENT company (companyId, companyName, 
        companyAdress, telno, contactPerson)> 
<!ELEMENT companyId (#PCDATA)> 
<!ELEMENT companyName (#PCDATA)> 
<!ELEMENT companyAdress (#PCDATA)> 
<!ELEMENT telno (#PCDATA)> 
<!ENTITY % contactPerson SYSTEM "person.dtd"> 
%contactPerson; 

И это DTD для информации о тренинге:

<?xml version="1.0" encoding="UTF-8"?> 
<!ELEMENT trainning (trainningId, cost, date, duration, 
         trainningName, comment, 
         durationtype, (trainer|company))> 
<!ELEMENT trainningId (#PCDATA)> 
<!ELEMENT cost (#PCDATA)> 
<!ELEMENT date (#PCDATA)> 
<!ELEMENT duration (#PCDATA)> 
<!ELEMENT trainningName (#PCDATA)> 
<!ELEMENT durationtype (#PCDATA)> 
<!ENTITY % trainer SYSTEM "trainer.dtd"> 
%trainer; 
<!ENTITY % company SYSTEM "company.dtd"> 
%company; 

ответ

1

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

Здесь стоит отметить две вещи.

Во-первых, файлы DTD не являются документами XML, поэтому вам не нужно (и не следует использовать) объявление XML в начале файла DTD. Вы должны удалить первые строки company.dtd и trainning.dtd.

Во-вторых, XML DTD должны содержать не более одного объявления элемента для любого имени. Поскольку элемент «person» объявлен in person.dtd и включен в trainer.dtd и company.dtd, когда вы вставляете оба файла trainer.dtd и company.dtd в файл trainning.dtd, вы заставите синтаксический анализатор увидеть два объявления для 'человек'.

Если вы действительно хотите создать три различных DTDs здесь, с дублированием контента, то самое простое решение, чтобы сделать один набор файлов, содержащих только объявления элементов, а второй набор файлов драйвера, которые ничего не делают, но декларируют параметр и ссылаться на них. Таким образом, у person.dtd, company.dtd, trainer.dtd и training.dtd будут только объявления элементов, и у вас будет три файла драйверов: один для компаний, один для тренеров и один для обучения, например:

Companies.dtd содержит:

<!ENTITY % company SYSTEM "company.dtd"> 
%company; 
<!ENTITY % person SYSTEM "person.dtd"> 
%person; 

Trainer.dtd содержит:

<!ENTITY % trainer SYSTEM "trainer.dtd"> 
%trainer; 
<!ENTITY % person SYSTEM "person.dtd"> 
%person; 

Training.dtd содержит:

<!ENTITY % company SYSTEM "company.dtd"> 
%company; 
<!ENTITY % person SYSTEM "person.dtd"> 
%person; 
<!ENTITY % trainer SYSTEM "trainer.dtd"> 
%trainer; 

Даже проще, конечно, было бы использовать один файл для всего.

+0

Благодарим вас за ответ, что вы подразумеваете под набором файлов драйверов? – Eneramo

+0

Я имел в виду такие файлы, как файлы Company.dtd, Trainer.dtd, Training.dtd, которые я показываю в своем ответе, которые ничего не делают, кроме встраивания других файлов (и, таким образом, можно думать, что они приводят к созданию эффективного DTD из разных файлы, которые у вас есть). Это файлы, на которые вы ссылаетесь, из ваших документов. Например, документ о тренере может начаться следующим образом: «Трейнер тренера« DOCTYPE ».dtd "> ...' а документ о компании начнется ' ...' –

+0

Спасибо за помощь. Я понимаю вашу точку зрения – Eneramo

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