Вопрос

Я создаю личный органайзер для учебных целей и никогда не работал с XML, поэтому не уверен, что мое решение лучшее.Вот базовая структура XML-файла, с которым я пришел:

<calendar>
    <year value="2008">
        <month value="october">
            <day value="16">
                <activity name="mike's birthday" time="21:00" address="mike's apartment" urgency="10">
                     activity description.
                </activity>
            </day>
        </month>
    </year>
</calendar>

Атрибут срочности должен иметь шкалу от 1 до 10.
Я сделал быстрый поиск в Google и не смог найти хорошего примера.Возможно, это не лучшее решение, и я хотел бы знать, адекватно ли оно.Я делаю приложение на PHP, если это имеет какое-либо значение.

Это было полезно?

Решение

Ваш путь мне вполне адекватен.Однако я предпочитаю дочерние теги атрибутам, поэтому мой путь будет больше похож на:

<activity>
  <name>Mike's Birthday</name>
  <time>2100</time>
  <address>Mike's Place</address>
  <urgency>10</urgency>
  <description>activity description</description>
</activity>

Но, как я уже сказал, ваш путь вполне хорош.

Однако быстрый вопрос: почему не база данных?

Другие советы

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

Выполнение этого шаблона XPath:

/calendar/year[@value='2008']/month[@value='10']/day[@value='7']/activity

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

/calendar/activity[@year='2008' and @month='10' and @day='7']

который по сути должен просматривать каждый узел в документе.

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

Также важно, чтобы вы единообразно хранили числовые данные в этих атрибутах.(Если вы хотите выглядеть умным на собраниях, вы можете сказать, что вы устанавливаете канонические представления ваших типов данных.) Если вы, например, используете ведущие нули несколько раз, а не другие, ни один из этих шаблонов XPath не будет работать надежно, потому что @day='7' не будет соответствовать day атрибут установлен на "07".(Это можно обойти, преобразовав атрибуты в числа в XPath, используя команду number() функция, но лучше вообще избегать проблемы.)

Вы можете сгладить эту иерархию до:

<calendar>
    <activity
        id="123456"
        name="mike's birthday" 
        year="2008"
        month="10"
        day="16"
        time="21:00" 
        address="mike's apartment" 
        urgency="10">
            activity description.
        </activity>
</calendar>

или..

<calendar>
    <activity id="12345">
        <name>mike's birthday</name>
        <year>2008</year>
        <month>10<month>
        <day>16</day>
        <time>21:00</time>
              <urgency>10</urgency>
        <address>mike's apartment<address>
        <description>activity description.</description>
    </activity>
</calendar>

Выполнение запросов XPath сделало бы жизнь немного менее болезненной.Я также добавил атрибут id, чтобы вы могли однозначно идентифицировать действие.

Я думаю, ваша структура подойдет для того, что вы делаете.

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

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

Возможно, стоит посмотреть xCal, XML-совместимое представление iCalendar стандартный, для некоторых потенциально хорошо продуманных идей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top