Интерпретация DTD из спецификаций - PullRequest
0 голосов
/ 02 июня 2018

Мне даны следующие спецификации:

• существует один корневой элемент с именем products

• элемент products содержит последовательность подэлементов product, по одному для каждого продукта в базе данных

• каждый элемент товара содержит одно имя, одну цену и один подэлемент описания, а также последовательность подэлементов магазина, по одному для каждого магазина, продающего этот товар:

• каждый элемент магазина содержит одно имя, один телефон и одна разметка.

До сих пор я придумал это:

<?xml version="1.0"?>
<!DOCTYPE exercise 3 [
<!ELEMENT products (pid, name, price, description, stores)>
<!ELEMENT pid (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT stores (store_name, phone, markup)>
<!ELEMENT store_name (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT markup (#PCDATA)>

Как вы думаете, этот DTD соответствует спецификациям?

1 Ответ

0 голосов
/ 04 июня 2018

Пара комментирует ваш DTD:

  1. В объявлении doctype <!DOCTYPE exercise 3 [ имя должно совпадать с корневым элементом, поэтому вместо exercise 3 оно должно быть products.Однако вам не нужно указывать тип документа, если это DTD является внешним файлом.Вы хотели бы использовать его, если ваши DTD и XML объединены.Подробнее см. https://stackoverflow.com/a/5455469/317052.
  2. Имена элементов не обязательно должны быть уникальными, поэтому вы можете иметь один элемент name, который можно использовать как в product, так и store..

Вот что я бы сделал на основе спецификации ...

• есть один корневой элемент, называемый products

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

<!ELEMENT products (product*)>

• каждый элемент продукта содержит одно подэлемент имени, одной цены и одного описания, а также последовательностьПодэлементы магазина, по одному на каждый магазин, в котором продается этот продукт:

<!ELEMENT product (name, price, description, store*)>

• каждый элемент магазина содержит одно имя, один телефон и одну разметку.

<!ELEMENT store (name, phone, markup)>

Вот полное DTD с добавленными пробелами для удобства чтения ...

<!ELEMENT products      (product*)                         >
<!ELEMENT product       (name, price, description, store*) >
<!ELEMENT store         (name, phone, markup)              >
<!ELEMENT name          (#PCDATA)                          >
<!ELEMENT price         (#PCDATA)                          >
<!ELEMENT description   (#PCDATA)                          >
<!ELEMENT phone         (#PCDATA)                          >
<!ELEMENT markup        (#PCDATA)                          >
...