Я делаю файл карты XML для категорий. Мне было интересно, какой правильный подход будет рассматривать два варианта, которые я имею в виду.
Моя главная проблема — скорость / эффективность кода php, который может понадобиться для чтения файла XML.
Итак, вот мой первый подход
<?xml version="1.0" encoding="utf-8"?>
<category-map lang="en_US" reader="Candor Framework">
<for-her url="/content/syl/tags/for-her">
<women-tops url="/content/syl/category/15/women-tops">
<women-longsleeve-tops url="/content/syl/tags/women-longsleeve-tops">Longsleeve Tops</women-longsleeve-tops>
<women-shortsleeve-tops url="/content/syl/tags/women-shortsleeve-tops">Shortsleeve Tops</women-shortsleeve-tops>
</women-tops>
<women-gowns url="/content/syl/category/18/women-gowns/">
<short-gowns url="/content/syl/tags/short-gowns">Short Gowns</short-gowns>
<evening-gowns url="/content/syl/tags/evening-gowns">Evening Gowns</evening-gowns>
</women-gowns>
<women-shoes url="/content/syl/category/19/women-shoes/">
<women-highheel-shoes url="/content/syl/tags/women-highheel-shoes">High Heel Shoes</women-highheel-shoes>
<women-wedge-shoes url="/content/syl/tags/women-wedge-shoes">Wedge Shoes</women-wedge-shoes>
</women-shoes>
</for-her>
<for-him url="/content/syl/tags/for-him">
<men-shirt url="/content/syl/category/20/men-shirt">
<men-lonsleeve-shirt url="/content/syl/tags/men-longsleeve-shirt">Longsleeve Shirt</women-longsleeve-tops>
</men-shirt>
</for-him>
</category-map>
при таком подходе все теги XML имеют уникальные имена. Теперь сравните с этим вторым подходом.
<?xml version="1.0" encoding="utf-8"?>
<category-map lang="en_US" reader="Candor Framework">
<target name="for-her" url="/content/syl/tags/for-her">
<category name="women-tops" url="/content/syl/category/15/women-tops">
<tag name="women-longsleeve-tops" url="/content/syl/tags/women-longsleeve-tops">Longsleeve Tops</tag>
<tag name="women-shortsleeve-tops" url="/content/syl/tags/women-shortsleeve-tops">Shortsleeve Tops</tag>
</category>
<category name="women-gowns" url="/content/syl/category/18/women-gowns/">
<tag name="short-gowns" url="/content/syl/tags/short-gowns">Short Gowns</tag>
<tag name="evening-gowns" url="/content/syl/tags/evening-gowns">Evening Gowns</tag>
</category>
<category name="women-shoes" url="/content/syl/category/19/women-shoes/">
<tag name="women-highheel-shoes" url="/content/syl/tags/women-highheel-shoes">High Heel Shoes</tag>
<tag name="women-wedge-shoes" url="/content/syl/tags/women-wedge-shoes">Wedge Shoes</tag>
</category>
</target>
<target name="for-him" url="/content/syl/tags/for-him">
<category name="men-shirt" url="/content/syl/category/20/men-shirt">
<tag name="men-lonsleeve-shirt" url="/content/syl/tags/men-longsleeve-shirt">Longsleeve Shirt</tag>
</category>
</target>
</category-map>
Это короткая версия файла XML. Всего контента довольно много. Какой из этих подходов к проектированию быстрее ?, какой требует меньше циклов и условных выражений? что посоветуете следовать и почему?
Очень признателен!
На мой взгляд, я бы сказал, что второе лучше, просто потому, что оно более общее и, следовательно, расширяемое без каких-либо обновлений.
Я рассматриваю XML как механизм взаимодействия кода с другими блоками кода, поэтому структура должна отражать то, что лучше для кода, и не обязательно иметь какую-либо структуру, облегчающую чтение человеком. Для меня первый XML выглядит так, как будто он был написан для человека, а не для компьютера, а второй более соответствует тому, как база данных будет хранить информацию: т.е. выберите строки, где target == for-him и catagory == men -Рубашка.
С точки зрения производительности, я бы предположил, что они эквивалентны, так как вы можете обнаружить, что ваш код работает одинаково, поскольку первый XML действительно использует имена элементов вместо атрибутов имени. Это особенно актуально, если ваш код будет расширяемым и готов к добавлению новых элементов в вашем первом случае.
Если у вас много данных, рассмотрите возможность их хранения в базе данных, например, в sqlite, используя схему, которая отражает ваш второй XML. Затем вы можете экспортировать в XML или JSON для любых клиентов результаты запросов.
Других решений пока нет …