Использование HTML для представления структурированных данных - PullRequest
1 голос
/ 12 июня 2009

У меня вопрос о том, как представить некоторые структурированные данные с использованием HTML.

У меня есть некоторые древовидные данные, которые вы обычно можете представить, используя разделы и подразделы (например, <h1>, <h2> и т. Д.) И / или используя вложенные списки (то есть списки, элементы которых содержат списки подпунктов ).

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

Каждое из этих данных также имеет связанные свойства, например:

  • bool completed;
  • DateTime completionDate;
  • Priority priority;

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


Моя первая идея - представить ее в виде таблицы:

  • В одном из столбцов таблицы показана задача или подзадача
  • Другие столбцы в каждой строке показывают значения свойств (например, «завершено» и т. Д.), Связанных с этой задачей

Моя проблема с этим заключается в том, что показ всех задач и подзадач в одном столбце таблицы может привести к потере информации о том, как эти задачи вложены: например, это не показывает, что вторая строка на самом деле является подзадачей первой строки. , Можете ли вы предложить способ обойти эту проблему? Я думал об украшении предметов с переменным числом шевронов, таких как «>», чтобы показать, насколько глубоко вложен каждый предмет, например:

TASK                    COMPLETED

Some major task            No
> A subtask                Yes
> Another subtask          Yes
> > A sub-subtask          Yes
Next major task            No

Некоторые проблемы с этим, однако:

  • Это может выглядеть уродливо, и я не уверен, что это настолько интуитивно понятно и настолько читабельно, насколько это возможно. Может быть, лучше использовать какой-нибудь другой орнамент или просто отступ пробела переменной длины?
  • Я не вижу элегантного способа его кодирования с использованием HTML + CSS; например, вы вставили бы орнамент, используя HTML, или вставили бы его, используя CSS; и если использовать CSS, добавится ли что-то вроде class="level1" через class="level6", чтобы показать уровень вложенности?

Второй способ - представить его в виде текста, который течет вертикально, например ...

<h1>Some major task</h1>
<p>Completed: no.</p>
<h2>A subtask</h2>
...etc...

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


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

Ответы [ 4 ]

3 голосов
/ 12 июня 2009

Требуемый компонент пользовательского интерфейса называется TreeTable (или Tree Table). Существует различных реализаций этого в Javascript / HTML. Вот one , который использует Javascript. Вот еще один это чистый HTML / CSS (но не разворачивается / разворачивается)

1 голос
/ 12 июня 2009

Вы говорите о вложении в иерархическую структуру HTML. По самой своей природе вам вообще не нужно выполнять какую-либо специальную работу.

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

<ul>
  <li>
    <div class="task-group">
      <span class="task-title">Task 1</span>
      <span class="task-status">Complete</span>
      <ul>
        <li>
          <div class="task-group">
            <span class="task-title">Task 1a</span>
            <span class="task-status">Complete</span>
          </div>
        <li>
          <div class="task-group">
            <span class="task-title">Task 1b</span>
            <span class="task-status">Incomplete</span>
          </div>
        </li>
      </ul>
    </div>
  </li>
</ul>

Затем вы просто стилизуете каждую группу задач, чтобы иметь относительный запас по отношению к ее родителю, чтобы вложение стало рекурсивным. Установите причудливые (или нет) маркеры для задач со стилем li и настройте расположение класса task-status так, чтобы он располагался так, как вам нужно.

Вы также можете получить меньшие подзадачи для рекурсивного наследования меньшего размера текста, установив относительный размер текста в CSS. Что-то вроде .75em, так что каждый уровень на три четверти меньше предыдущего уровня.

Примерно так:

.task-group {
   font-size: .75em;
   margin-left: 1em;
}
.task-title {
   text-decoration: underline;
   float: left;
}
.task-status {
   float: right;
}
0 голосов
/ 12 июня 2009

Вопрос не имеет правильного или неправильного ответа. Но я отвечу на этот вопрос в рамках вопроса.

Если использовать CSS, добавим ли это что-то вроде class = "level1" через class = "level6", чтобы показать вложенность уровень

Нет. Вы должны использовать соответствующий селектор в CSS.

li {
  // level one style
}

li li 
{
  // level two style
} 

etc.
0 голосов
/ 12 июня 2009

UL, OL и LI хороши для этой цели. Структурирование его как JSON еще лучше. Вы можете визуализировать HTML из JSON любым удобным для вас способом.

...