Статьи

Сравнение OpenDDR с WURFL

Веб-контент, доставляемый на мобильные устройства, обычно выигрывает от необходимости учитывать ряд факторов, таких как размер экрана, поддержка языка разметки и поддержка формата изображения. Такая информация хранится в «Репозитариях описания устройств» (DDR).

Оба проекта WURFL и OpenDDR предоставляют API для доступа к DDR, чтобы упростить и продвинуть разработку веб-контента, адаптирующегося к контексту доставки.

WURFL недавно изменил свою лицензию на AGPL (Affero GPL) v3 . Это означает, что это не может свободно использовать в коммерческих целях больше. Следовательно, недавно начали появляться некоторые бесплатные альтернативы с открытым исходным кодом. OpenDDR является одним из них.

В этой статье я поделюсь своими выводами о том, как API OpenDDR Java сравнивается с WURFL.

Добавить зависимости в проект

В этом разделе описывается, как добавить WURFL и OpenDDR в проект Maven. WURFL

WURFL действительно прост, поскольку он доступен в центральном репозитории Maven. Все, что вам нужно сделать, это включить зависимость от вашего проекта:

1
2
3
4
5
<dependency>
    <groupId>net.sourceforge.wurfl</groupId>
    <artifactId>wurfl</artifactId>
    <version>1.2.2</version><!-- the last free version -->
</dependency>

OpenDDR

С другой стороны, OpenDDR довольно сложно настроить. Выполните следующие действия, чтобы включить OpenDDR в ваш проект:

  1. Загрузите zip-архив OpenDDR-Simple-API .
  2. Разархивируйте его и создайте новый проект Java на Eclipse на основе полученной папки.
  3. Экспортируйте JAR-файл OpenDDR-Simple-API с помощью Eclipse File >> Export... , включайте только содержимое папки src исключая файл oddr.properties .
  4. Установите полученный JAR и DDR-Simple-API.jar из папки lib в локальный репозиторий Maven.
    1
    2
    mvn install:install-file -DgroupId=org.w3c.ddr.simple -DartifactId=DDR-Simple-API -Dversion=2008-03-30 -Dpackaging=jar -Dfile=DDR-Simple-API.jar -DgeneratePom=true -DcreateChecksum=true
    mvn install:install-file -DgroupId=org.openddr.simpleapi.oddr -DartifactId=OpenDDR -Dversion=1.0.0.6 -Dpackaging=jar -Dfile=OpenDDR-1.0.0.6.jar -DgeneratePom=true -DcreateChecksum=true
  5. Добавьте зависимости в ваш файл pom.xml вашего проекта:
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <dependency>
        <groupId>org.w3c.ddr.simple</groupId>
        <artifactId>DDR-Simple-API</artifactId>
        <version>2008-03-30</version>
    </dependency>
    <dependency>
        <groupId>org.openddr.simpleapi.oddr</groupId>
        <artifactId>OpenDDR</artifactId>
        <version>1.0.0.6</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-jexl</artifactId>
        <version>2.1.1</version>
    </dependency>
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>

Загрузить репозиторий / файл возможностей

В этом разделе описывается, как загрузить файлы репозитория WURFL и OpenDDR и импортировать их в ваш проект. WURFL

Скопируйте wurfl-2.1.1.xml.gz (последняя бесплатная версия) в папку src/main/resources вашего проекта и импортируйте его, используя:

1
WURFLHolder wurflHolder = new CustomWURFLHolder(getClass().getResource("/wurfl-2.1.1.xml.gz").toString());

OpenDDR

Скопируйте oddr.properties из папки src OpenDDR-Simple-API и всех файлов в папке resources OpenDDR-Simple-API в папку вашего проекта src/main/resources . Импортируйте их, используя:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
Service identificationService = null;
try {
    Properties initializationProperties = new Properties();
    initializationProperties.load(getClass().getResourceAsStream("/oddr.properties"));
    identificationService = ServiceFactory
            .newService("org.openddr.simpleapi.oddr.ODDRService",
                    initializationProperties.getProperty(ODDRService.ODDR_VOCABULARY_IRI),
                    initializationProperties);
} catch (IOException e) {
    LOGGER.error(e.getMessage(), e);
} catch (InitializationException e) {
    LOGGER.error(e.getMessage(), e);
} catch (NameException e) {
    LOGGER.error(e.getMessage(), e);
}

Использование API

В этом разделе описывается, как использовать API-интерфейсы Java WURFL и OpenDDR для доступа к возможностям устройства. WURFL

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

1
2
3
Device device = wurflHolder.getWURFLManager().getDeviceForRequest(getContext().getRequest());
int resolutionWidth = Integer.valueOf(device.getCapability("resolution_width"));
int resolutionHeight = Integer.valueOf(device.getCapability("resolution_height"));

Нет необходимости проверять device.getCapability("resolution_width") по null значению, когда данные недоступны.

OpenDDR

OpenDDR совсем наоборот. Очень громоздко и не имеет запасной иерархии, заставляя разработчика проверять каждое значение свойства.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
PropertyRef displayWidthRef;
PropertyRef displayHeightRef;
 
try {
    displayWidthRef = identificationService.newPropertyRef("displayWidth");
    displayHeightRef = identificationService.newPropertyRef("displayHeight");
} catch (NameException ex) {
    throw new RuntimeException(ex);
}
 
PropertyRef[] propertyRefs = new PropertyRef[] { displayWidthRef, displayHeightRef };
Evidence e = new ODDRHTTPEvidence();
e.put("User-Agent", getContext().getRequest().getHeader("User-Agent"));
 
int maxImageWidth = 320; // A default value
int maxImageHeight = 480; // A default value
try {
    PropertyValues propertyValues = identificationService.getPropertyValues(e, propertyRefs);
    PropertyValue displayWidth = propertyValues.getValue(displayWidthRef);
    PropertyValue displayHeight = propertyValues.getValue(displayHeightRef);
 
    if (displayWidth.exists()) {
        maxImageWidth = displayWidth.getInteger();
    }
    if (displayHeight.exists()) {
        maxImageHeight = displayHeight.getInteger();
    }
} catch (Exception ex) {
    throw new RuntimeException(ex);
}

Полученные результаты

В следующей таблице приведены результаты тестов, выполненных для приложения для адаптации образа на стороне сервера с использованием как WURFL, так и OpenDDR.
Эти тесты проводились на реальных устройствах, а страницы обслуживались как XHTML BASIC (так же, как XHTML MP).

Платформа устройство Имущество WURFL max_image_width (1) / max_image_height WURFL resolution_width / resolution_height OpenDDR displayWidth / displayHeight
N / A Firefox рабочий стол ширина 650 640 Не поддерживается
высота 600 480 Не поддерживается
IOS Айфон 4С ширина 320 320 320
высота 480 480 480
Android HTC One V ширина 320 540 Не поддерживается
высота 400 960 Не поддерживается
HTC Hero ширина 300 320 320
высота 460 480 480
Windows Phone 7.5 Nokia Lumia 710 ширина 600 640 480
высота 600 480 800
BlackBerry BlackBerry Bold 9900 ширина 228 480 640
высота 280 640 480
Symbian S60 Nokia E52 (Webkit) ширина 234 240 240
высота 280 320 320
Nokia E52 (Opera Mobile) ширина 240 240 Не поддерживается
высота 280 320 Не поддерживается
Windows Mobile 6.1 HTC Touch HD T8282 ширина 440 480 480
высота 700 800 800

(1) Возможность max_image_width очень удобна:

Ширина видимой (используемой) ширины изображений, выраженная в пикселях. Эта возможность относится к изображению, когда оно используется в «мобильном режиме», т. Е. Когда страница обслуживается как XHTML MP или использует метатеги, такие как «viewport», «handheldfriendly», «mobileoptimised», чтобы отключить «веб-рендеринг» и заставить мобильный пользовательский опыт.

Примечание: цвет # 9f9 выделяет результаты, которые показали лучшие результаты. Плюсы и минусы

Pros Cons
WURFL
  • Иерархия устройств, которая дает высокую вероятность того, что значение возможностей выводится правильно, даже если устройство еще не распознано.
  • Много-много возможностей .
  • Проще настроить.
  • Более чистый API.
OpenDDR
  • Бесплатное использование, даже в коммерческих целях.
  • Растущее сообщество.
  • Ограниченные возможности. OpenDDR, по-видимому, ограничивается W3C DDR Core Vocabulary .

Похожие сообщения

Ссылка: Сравнение репозиториев описания устройств от нашего партнера JCG Самуэля Сантоса в блоге Samaxes .