wurfl_比较OpenDDR与WURFL

wurfl

量身定制的Web内容通常受益于定制,以考虑多种因素,例如屏幕大小,标记语言支持和图像格式支持。 此类信息存储在“设备描述存储库”(DDR)中。

WURFLOpenDDR项目都提供了访问DDR的API,以简化并促进适应其交付上下文的Web内容的开发。

WURFL最近将其许可证更改为AGPL(Affero GPL)v3 。 这就意味着它不再是免费的商业用途。 因此,最近开始出现了一些免费的开源替代方案。 OpenDDR就是其中之一。

在本文中,我将分享有关OpenDDR Java API与WURFL相比的发现。

向项目添加依赖项

本节介绍如何将WURFL和OpenDDR添加到Maven项目。 伍尔夫

WURFL非常简单,因为它在Maven中央存储库中可用。 您要做的就是将对项目的依赖包括在内:

<dependency>
    <groupId>net.sourceforge.wurfl</groupId>
    <artifactId>wurfl</artifactId>
    <version>1.2.2</version><!-- the last free version -->
</dependency>

开放DDR

另一方面,OpenDDR很难配置。 请按照以下步骤在您的项目中包括OpenDDR:

  1. 下载OpenDDR-Simple-API zip
  2. 解压缩它,并根据结果文件夹在Eclipse上创建一个新的Java项目。
  3. 使用Eclipse File >> Export...导出OpenDDR-Simple-API JAR,仅包含src文件夹中的内容,不包括oddr.properties文件。
  4. lib文件夹中的结果JAR和DDR-Simple-API.jar安装到本地Maven存储库中
    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文件中:
    <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-2.1.1.xml.gz文件(最新的免费版本)复制到您的项目src/main/resources文件夹中,然后使用以下命令导入:

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

开放DDR

oddr.properties -Simple-API src文件夹中的oddr.properties和OpenDDR-Simple-API resources文件夹中的所有文件复制到项目src/main/resources文件夹中。 使用以下命令导入它们:

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

本节介绍如何使用WURFL和OpenDDR Java API访问设备功能。 伍尔夫

WURFL API非常易于使用,并且具有一个后备层次结构,可以为尚未在其存储库文件中的设备提供推断功能,这是其一大优势。

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

当没有可用数据时,无需针对null值验证device.getCapability("resolution_width")

开放DDR

OpenDDR恰恰相反。 非常麻烦并且没有回退层次结构,这迫使开发人员验证每个属性值。

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
不适用 Firefox桌面 宽度 650 640 不支持
高度 600 480 不支持
的iOS iPhone 4S 宽度 320 320 320
高度 480 480 480
安卓系统 HTC One V 宽度 320 540 不支持
高度 400 960 不支持
HTC英雄 宽度 300 320 320
高度 460 480 480
Windows Phone 7.5 诺基亚Lumia 710 宽度 600 640 480
高度 600 480 800
黑莓 黑莓Bold 9900 宽度 228 480 640
高度 280 640 480
塞班S60 诺基亚E52(Webkit) 宽度 234 240 240
高度 280 320 320
诺基亚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时,或者使用诸如“视口”,“手持式”,“移动优化”之类的元标记来禁用“网页渲染”和强制移动用户体验。

注意:颜色#9f9突出显示了效果更好的结果。 利弊

优点 缺点
伍尔夫
  • 设备层次结构,即使尚未识别设备,也很可能会正确推断功能的价值。
  • 很多很多的功能
  • 易于配置。
  • 清洁器API。
开放DDR
  • 免费使用,甚至用于商业用途。
  • 不断增长的社区。

相关文章

参考: 比较我们的JCG合作伙伴 Samuel Santos的设备描述存储库 ,位于Samaxes博客上。


翻译自: https://www.javacodegeeks.com/2012/06/comparing-openddr-to-wurfl.html

wurfl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值