naming convention, Camel Casing, CamelCase, Pascal Case, kebab case, Snake case

naming convention, Camel Casing, CamelCase, Pascal Case, kebab case, Snake case 在英语中,依靠单词的大小写拼写复合词的做法,叫做"骆驼拼写法" (CamelCase) 。比如,backColor这个复合词,color的第一个字母采用大写。 这种拼写法在正规的英语中是不允许的,但是在编程语言和商业活动中却大量使用。比如,sony 公司的畅销游戏机 PlayStation,play和station 两个词的词首字母都是大写的。 它之所以被叫做"骆驼拼写法",是因为大小写的区分使得复合词呈现"块状" (bump) ,看上去就像骆驼的驼峰 (hump) 。 “骆驼拼写法"又分为两种。 第一个词的首字母小写,后面每个词的首字母大写,叫做"小骆驼拼写法” (lowerCamelCase) ; 第一个词的首字母,以及后面每个词的首字母都大写,叫做"大骆驼拼写法" (UpperCamelCase) ,又称"帕斯卡拼写法" (PascalCase) 。 PascalCase:帕斯卡命名法,每个单词首字母大写,又名大驼峰命名法。 camelCase:驼峰命名法,第一个单词首字母小写,后面的每个单词首字母大写,又名小驼峰命名法。 kebab-case:短横线隔开命名法,每个单词首字母小写。 https://www.huoxiaoqiang.com/experience/jingyan/3618.html http://www.cnblogs.com/lm002003/archive/2011/08/13/2137606.html Snake case, snake_case Snake case (stylized as snake_case) is the naming convention in which each space is replaced with an underscore (_) character, and words are written in lowercase. It is a commonly used naming convention in computing, for example for variable and subroutine names, and for filenames.

2011-10-12 · 1 min · 85 words · -

maven-resources-plugin

maven-resources-plugin Apache Maven Resources Plugin是Apache Maven团队提供的官方核心插件,能够将Maven项目中的各种资源文件复制到指定的输出目录中。 在Maven项目中的资源可以分为两类 main资源,指位于src/main/resources路径下的资源文件 test资源,指位于src/test/resources路径下的资源文件 2. Apache Maven Resources Plugin提供的Goals resources:resources 将main资源文件复制到输出目录,默认已经加入到Maven的process-resources生命周期阶段。 <project><build><resources>指定要复制的main资源文件,默认位于src/main/resources路径 <project><build><outputDirectory>指定main资源的输出目录,默认位于target/classes/路径 2) resources:testResources 将test资源文件复制到输出目录,默认已经加入到Maven的process-test-resources生命周期阶段。 <project><build><testResources>指定要复制的test资源文件,默认位于src/test/resources路径 <project><build><testOutputDirectory>指定test资源的输出目录,默认位于target/test-classes/路径 3) resources:copy-resources 对于非main资源或非test资源,又没有在pom.xml的<build><resources>...</build></resources>配置的资源,在构建过程中不会输出到项目的target/classes/目录下。 ———————————————— 版权声明:本文为CSDN博主「易生一世」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/taiyangdao/article/details/103636330 java-使用maven将版本号输出到文本 https://www.itranslater.com/qa/details/2582583740010595328 https://blog.csdn.net/u011781521/article/details/79052725 src/main/resources/version.txt ${project.version} <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <id>print-version-file</id> <phase>validate</phase> <goals> <goal>resources</goal> </goals> <configuration> <outputDirectory>${basedir}/target/classes</outputDirectory> <resources> <resource> <directory>${basedir}/src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin> mvn clean validate

2011-10-09 · 1 min · 61 words · -

java.io.tmpdir

java.io.tmpdir 操作系统不同 这个系统属性所表示的目录也不同 On Windows: java.io.tmpdir:[C:DOCUME1joshuaLOCALS1Temp] On Solaris: java.io.tmpdir:[/var/tmp/] On Linux: java.io.tmpdir: [/tmp] On Mac OS X: java.io.tmpdir: [/tmp] The default temporary-file directory is specified by the system property java.io.tmpdir. On UNIX systems the default value of this property is typically "/tmp" or "/var/tmp"; on Microsoft Windows systems it is typically "c:temp". A different value may be given to this system property when the Java virtual machine is invoked, but programmatic changes to this property are not guaranteed to have any effect upon the the temporary directory used by this method. To specify the java.io.tmpdir System property, you can invoke the JVM as follows: java -Djava.io.tmpdir=/path/to/tmpdir ``` ...

2011-10-08 · 1 min · 121 words · -

nohup, shell 的后台运行 &, 和 nohup

nohup, shell 的后台运行 &, 和 nohup # 语法: nohup Command [ Arg … ] [&] # & 后台运行, 但是使用父进程的 stdout 和 stderr ./command0 & # nohup 的意思是 no hup, 忽略所有发送给子命令的 SIGHUP 信号, shell 关闭时 sigup 不会被发到子进程. nohup ./command0 & # 使用 nohup 之后 会看到 nohup: appending output to "nohup.out", command0 的 stdout 和 stderr 都 被重定向到 nohup.out nohup ./command0 > /dev/null 2>&1 & https://www.jianshu.com/p/747e0d5021a2 https://blog.csdn.net/cugxueyu/article/details/2046565 hangup 名称的来由 在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯。当用户 logout 时,modem 就会挂断 (hang up) 电话。 同理,当 modem 断开连接时,就会给终端发送 hangup 信号来通知其关闭所有子进程。 ...

2011-10-08 · 2 min · 215 words · -

Jenkins basic

Jenkins basic jenkins docker docker network create jenkins docker image pull docker:dind # generate cert su - root mkdir /root/certs && cd /root/certs openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out MyCertificate.crt -keyout MyKey.key docker run \ --name jenkins-docker \ --rm \ --detach \ --privileged \ --network jenkins \ --network-alias docker \ --env DOCKER_TLS_CERTDIR=/certs \ --volume jenkins-docker-certs:/certs/client \ --volume jenkins-data:/var/jenkins_home \ --publish 2376:2376 \ docker:dind \ --storage-driver overlay2 dockerfile 创建镜像 ...

2011-09-30 · 2 min · 306 words · -

trickle

trickle userspace bandwidth shaper 限速 200k trickle -s -u 200 -d 200 git pull 参数 -s, standalone mode 不依赖 trickled -u, 上传速率 KB/s -d, 下载速率 KB/s https://github.com/mariusae/trickle https://wiki.archlinux.org/title/trickle

2011-09-30 · 1 min · 28 words · -

mvn, maven basic

mvn, maven basic # ubuntu install maven sudo apt install maven # 打印当前在使用的 settings mvn help:effective-settings download https://maven.apache.org/download.cgi setting & mirror maven setting aliyun mkdir ~/.m2 vim ~/.m2/settings.xml https://repo.maven.apache.org/maven2 Maven 参数 -D 传入属性参数 -P 使用pom中指定的配置 -e 显示maven运行出错的信息 -o 离线执行命令,即不去远程仓库更新包 -X 显示maven允许的debug信息 -U 强制去远程参考更新snapshot包 -q for only error 参数> properties 对应一个变量值,pom.xml里面配置的有,那么如果你在命令行中 以 -Dmy.filter.value=1 的格式去配置mvn命令,那么将覆盖你pom中的值。 mvn clean -Ptrip-app,daily package -Dmy.filter.value=1 -Dttidapk.ttids=21xx00 <project> <properties> <my.filter.value>hello</my.filter.value> </properties> </project> https://blog.csdn.net/Maxiao1204/article/details/90510176 command # skip test, 强制更新依赖包 mvn -Dmaven.test.skip=true clean package -U 创建项目 # create common project # mvn archetype:generate 会自动创建项目目录 project0 mvn archetype:generate -DgroupId=com.wiloon.demo -DartifactId=project0 \ -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false # archetypeVersion 指定版本号 mvn archetype:generate -D groupId=com.wiloon.java -D artifactId=javaJpms \ -D archetypeVersion=1.4 -D archetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false # local catalog mvn archetype:generate -DgroupId=com.wiloon.test -DartifactId=mvntest \ -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -DarchetypeCatalog=local # web project mvn archetype:generate -DgroupId=com.wiloon.mail.web -DartifactId=mailTestWeb \ -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false mvn clean compile -Dmaven.test.skip=true org.apache.maven.plugins:maven-war-plugin:exploded -q mvn clean compile -Dmaven.test.skip=true org.apache.maven.plugins:maven-war-plugin:exploded -U #-U,--update-snapshots Forces a check for missing releases and updated snapshots on mvn clean compile -U # 指定执行某一个类的测试 mvn -Dtest=com.wiloon.Foo test 检测包冲突 mvn dependency:help mvn dependency:analyze mvn dependency:tree mvn dependency:tree -Dverbose upload jar to nexus mvn deploy:deploy-file -Dfile=xxx.pom -DgroupId=com.wiloon -DartifactId=artifactid0 -Dversion=1.0.0 -Dpackaging=pom -DrepositoryId=repo0 -Durl=https://maven.wiloon.com/repository/snapshot/ mvn deploy:deploy-file -Dfile=xxx.jar -DgroupId=com.wiloon -DartifactId=artifactid0 -Dversion=1.0.0 -Dpackaging=jar -DrepositoryId=repo0 -Durl=https://maven.wiloon.net/repository/snapshot/ maven ojdbc6 mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar -Dfile=/home/wiloon/Downloads/ojdbc6.jar commands # maven war plugin mvn clean compile -Dmaven.test.skip=true org.apache.maven.plugins:maven-war-plugin:exploded # maven-assembly-plugin 打包 >wangyue.dev/maven/assembly/plugin #Generates JSW based daemon wrappers. mvn appassembler:generate-daemons # 查看 maven 版本 mvn -v mvn -version mvn install mvn install -Dmaven.test.skip=true #wrapper mvn package appassembler:assemble 查看 mvn 参数 mvn --help # 指定pom文件位置 mvn -f trunk/mvntest/pom.xml install mvn archetype:generate #390 maven-archetype-webapp #387 maven-archetype-quickstart mvn clean install mvn cobertura:cobertura mvn surefire-report:report mvn surefire-report:report-only mvn pmd:pmd mvn eclipse:clean mvn eclipse:eclipse -mvn package: 依据项目生成jar/war文件 mvn dependency:sources mvn dependency:resolve -Dclassifier=javadoc webApp: maven-archetype-webapp -Dmvn install -Dmaven.test.skip=true <del>编译时跳过Test</del> -Dmaven.test.failure.ignore=true <del> Set this to true to ignore a failure during testing. Its use is NOT RECOMMENDED, but quite convenient on occasion.</del> mvn install -rf :MODULENAME mvn clean install mvn –version mvn compile mvn test mvn test-compile mvn package mvn install mvn site mvn clean mvn eclipse:eclipse mvn eclipse:clean # The Surefire report can also generate the report using its standalone goal mvn surefire-report:report # A HTML report should be generated in ${basedir}/target/site/surefire-report.html -maven idea mvn idea:idea mvn idea:clean #maven install jar mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar -Dfile=/home/wiloon/Downloads/ojdbc6.jar os-maven-plugin os-maven-plugin 是设置各种有用属性 (从 OS 中检测的 ${os.name} 和 ${os.arch} 属性) 的 Maven 插件 ...

2011-09-29 · 3 min · 565 words · -

Maven生命周期

Maven生命周期 Maven 生命周期 Maven生命周期已经在另一篇博客中介绍过了(http://www.cnblogs.com/haippy/archive/2012/07/04/2576453.html),这里引用IBM developerworks 的文章再一次讨论Maven 的生命周期。 在Maven2中有了明确的生命周期概念,而且都提供与之对应的命令,使得项目构建更加清晰明了。主要的生命周期阶段: validate,验证工程是否正确,所有需要的资源是否可用。 compile,编译项目的源代码。 test-compile,编译项目测试代码。 test,使用已编译的测试代码,测试已编译的源代码。 package,已发布的格式,如jar,将已编译的源代码打包。 integration-test,在集成测试可以运行的环境中处理和发布包。 verify,运行任何检查,验证包是否有效且达到质量标准。 install,把包安装在本地的repository中,可以被其他工程作为依赖来使用 deploy,在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。 generate-sources,产生应用需要的任何额外的源代码,如xdoclet。 如果要执行项目编译,那么直接输入: mvn compile即可,对于其他的阶段可以类推。阶段之间是存在依赖关系 (dependency) 的,如test依赖test-compile。在执行mvn test时,会先运行mvn test-compile,然后才是mvn test。 Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),这个生命周期可以从两方面来理解,第一,顾名思义,运行Maven的每个步骤都由它来定义的,这种预定义的默认行为使得我们使用Maven变得简单,相比而言,Ant的每个步骤都要你手工去定义。第二,这个模型是一种标准,在不同的项目中,使用Maven的接口是一样的,这样就不用去仔细理解每个项目的构建了,一般情况下,mvn clean install 这样的命令是通用的。我想,一定是吸收了许多项目的经验,Maven才能定义出如此完善的模型。 Maven有三套相互独立的生命周期,请注意这里说的是"三套",而且"相互独立",初学者容易将Maven的生命周期看成一个整体,其实不然。这三套生命周期分别是: Clean Lifecycle 在进行真正的构建之前进行一些清理工作。 Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。 Site Lifecycle 生成项目报告,站点,发布站点。 我再次强调一下它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。 知道了每套生命周期的大概用途和相互关系以后,来逐个详细看一下每套生命周期,Clean和Site相对比较简单,先解释一下。 每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这个的clean是Clean生命周期的一个阶段。有点绕?要知道有Clean生命周期,也有clean阶段。Clean生命周期一共包含了三个阶段: pre-clean 执行一些需要在clean之前完成的工作 clean 移除所有上一次构建生成的文件 post-clean 执行一些需要在clean之后立刻完成的工作 mvn clean 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,mvn clean 等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。 ...

2011-09-28 · 1 min · 120 words · -

linux user, group, 用户 用户组

linux user, group, 用户 用户组 用户 查看用户 cat /etc/passwd wyue:x:513:513::/home/wyue:/bin/bash 看第三个参数: 500 以上的,就是后来建的用户了。其它则为系统的用户。 创建用户 # create user, 创建目录 /home/user0, 默认 bash sudo useradd -m user0 # 创建用户 user_0, 默认不会创建 home 目录, 默认 bash sudo useradd user_0 # 给 user_0 设置密码 sudo passwd user_0 sudo useradd -m -s /bin/bash user0 # create group and user sudo useradd -m -s /bin/bash -g group0 user0 sudo passwd user0 sudo useradd -m -s /bin/zsh user0 sudo useradd -M -s /bin/false user1 sudo useradd user0 # ubuntu shadow 包提供的工具 # adduser 是一个高级脚本,通常存在于 Debian / Ubuntu 系统 上。 # --system 创建一个系统用户,通常用于运行系统服务(如 Kafka、nginx、mysql 等),不是用于日常登录的普通用户。系统用户的 UID 通常小于 1000。 # --group 同时创建一个与用户名相同的用户组(kafka),并将用户添加进这个组。 # kafka 是一个系统用户,通常用于运行 Kafka 服务。 sudo adduser --system --no-create-home --group kafka options # -m: create home folder, 不加 -m 参数,默认不创建 home # -M: Don't create a home directory # -s: specify shell for user, 默认是 /bin/bash # -s /bin/false - Don't assign a shell (or more accurately, make the shell /bin/false, so the user cannot be logged into) # -r: create system account # -d: home dir # -r - Make a system user # -g <群组>: 指定用户所属的群组; # -G <群组>: 指定用户所属的附加群组 # -c <备注>:加上备注文字。备注文字会保存在 passwd 的备注栏位中; 删除用户 -r, 删除用户 home 目录 userdel -r test 设置密码 sudo passwd user0 输入密码: 一般密码至少要有六个字符,这里输入的密码是看不见的,屏幕没显示 重新输一次密码: ...

2011-09-25 · 9 min · 1830 words · -

javaEE

javaEE 今天的程序员越来越认识到我们需要高性能、安全和可靠的服务器端技术来开发分布式的、事务性的和可移植的应用程序。在信息化的世界里,企业级应用通常需要更高的性能,更少的费用和更少的资源。 在 Java 平台中,使用 Java EE 来开发 Java 企业程序相当容易和高效。Java EE 平台为程序员提供了强大的 API,目的是为了缩短开发周期,降低应用程序复杂度,提高应用程序性能。 Java EE 通过 JCP (Java 执行委员会) 进行开发,JCP 是一个开放的国际组织,其中的成员包括 Oracle、IBM、Apache 等,JCP 负责所有的 Java 技术。其中的专家组会提交 Java EE 相关的 JSR (Java 标准请求) 。JCP 需要确保 Java 标准的稳定和跨平台兼容性。 Java EE 6 平台最主要的目标是为大量的 Java EE 组件提供共同的基础。程序员可以更多地使用 annotation (元数据注释) 来代替 XML 配置文件,更多地使用 POJO 来进行来发,并且应用程序的打包部署过程也更加简单。 Java EE 6 包括了以下新的特性: Profiles 我们知道 Java EE 规范本身相当庞大,如果我们需要开发的应用使用不到这么多的 Java EE 技术,那么完全没有必要引入这么多的 Java EE 技术到我们的应用程序中去。例如,如果要构建一个类似于 SOA 的应用程序,会用到消息,事务,持久化以及 Web Services ,但犯不着需要使用像 JSP 或 JSF 这类的展示层技术。 ...

2011-09-23 · 2 min · 348 words · -

Apache License 2.0

Apache License 2.0 Apache License Apache 协议允许使用了本协议开源的代码不必开源。 用了 Apache 协议的开源代码,必须保留协议文本。你可以修改源码,但必须声明你修改了哪些,并且保留原开源项目中原作者的信息。 用一句话概括 Apache License 就是,你可以用这代码,但是如果开源你必须保留我写的声明;你可以改我的代码,但是如果开源你必须写清楚你改了哪些;你可以加新的协议要求,但不能与我所公布的协议要求产生冲突;你用这代码干什么我不管,但是你不能让我承担任何责任。 kymjs.com/qiniu https://www.kymjs.com/manager/2015/11/21/01/ http://db.apache.org/derby/docs/dev/getstart/

2011-09-22 · 1 min · 17 words · -

Derby

Derby Apache Derby, an Apache DB subproject, is an open source relational database implemented entirely in Java and available under the Apache License, Version 2.0. Some key advantages include: Derby has a small footprint - about 2.6 megabytes for the base engine and embedded JDBC driver. Derby is based on the Java, JDBC, and SQL standards. Derby provides an embedded JDBC driver that lets you embed Derby in any Java-based solution. ...

2011-09-22 · 2 min · 271 words · -

奥卡姆剃刀, Occam's Razor

奥卡姆剃刀, Occam’s Razor 奥卡姆剃刀原理 奥卡姆剃刀原理是在14世纪由一个叫做奥卡姆的威廉的天主教修士提出的,可以概括为: 如无必要,勿增实体。 http://www.guokr.com/post/46473/

2011-09-22 · 1 min · 7 words · -

chart library

chart library web chart library chartjs Simple yet flexible JavaScript charting https://www.chartjs.org/ Apache ECharts An Open Source JavaScript Visualization Library https://echarts.apache.org/en/index.html

2011-09-22 · 1 min · 21 words · -

设计模式 – Decorator

设计模式 – Decorator Decorator设计模式是典型的结构型模式 装饰模式:Decorator常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这两种实体在Decorator模式中是必须的. Decorator定义: 动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活. 下面是GOF的《Element of reusable Object-Oriented Software》中对Decorator用意的概述: Decorator Pattern――Attaches additional responsibilities to an object dynamically . Decorators provide a flexible alternative to subclassing for extending functionality . 1 何时需要使用装饰器模式 GOF的那本Bible中关于装饰器模式列举的是一个文本组件与边框的例子 下面举一个"三明治"的例子! 很多人都吃过三明治,都会知道三明治必不可少的是两块面包片,然后可以在夹层里加上蔬菜、沙拉、咸肉等等,外面可以涂上奶油之类的。假如现在你要为一个三明治小店构造一个程序,其中要设计各种三明治的对象。可能你已经创建了一个简单的Sandwich对象,现在要产生带蔬菜的就是继承原有的Sandwich添加一个蔬菜的成员变量,看起来很"正点"的做法,以后我还要带咸肉的、带奶油的、带蔬菜的又分为带青菜的、带芹菜的、生菜的……还是一个一个继承是吧!假如我们还需要即带蔬菜又带其它肉类,设置我们还要求这些添加成分的任意组合,那你就慢慢继承吧! 读过几年书的会下面这个算术,我们有n种成分,在做三明治的时候任意搭配,那么有多少种方案呢?!算算吧!你会有惊人的发现。N种成分,什么都不要是Cn0种方案吧!要1种是Cn1吧!…..要n种是Cnn吧!加起来不就是吗?Cn0+Cn1+……+Cnn-1+Cnn还不会啊!牛顿莱布尼兹公式记得吧! (可惜Word的公式编辑器安装不了) 总共2的n次方案。有可能前面10天写了K个类,老板让你再加一种成分你就得再干10天,下一次再加一种你可得干20天哦!同时你可以发现你的类库急剧地膨胀! (老板可能会说你: XXX前K天你加了n个成分,怎么现在这么不上进呢?后K天只加了1个成分啊?!!可能你会拿个比给老板算算,老板那么忙会睬你吗?!有可能你的老板会说: 不管怎么样我就要你加,K天你还给我加n个成分!!呵呵,怎么办啊!跳槽啊!跳槽了也没人要你!!人家一看就知道你没学设计模式) 。下面我们就使用装饰器模式来设计这个库吧! 下面是各个类的意义: Ingredient (成分) : 所有类的父类,包括它们共有的方法,一般为抽象类且方法都有默认的实现,也可以为接口。它有Bread和Decorator两个子类。这种实际不存在的,系统需要的抽象类仅仅表示一个概念,图中用红色表示。 Bread (面包) : 就是我们三明治中必须的两片面包。它是系统中最基本的元素,也是被装饰的元素,和IO中的媒质流 (原始流) 一个意义。在装饰器模式中属于一类角色,所以其颜色为紫色。 Decorator (装饰器) : 所有其它成分的父类,这些成分可以是猪肉、羊肉、青菜、芹菜。这也是一个实际不存在的类,仅仅表示一个概念,即具有装饰功能的所有对象的父类。图中用蓝色表示。 Pork (猪肉) : 具体的一个成分,不过它作为装饰成分和面包搭配。 Mutton (羊肉) : 同上。 Celery (芹菜) : 同上。 ...

2011-09-22 · 3 min · 578 words · -

Jena

Jena Jena is a Java framework for building Semantic Web applications. It provides a programmatic environment for RDF, RDFS and OWL, SPARQL and includes a rule-based inference engine. Jena is open source and grown out of work with the HP Labs Semantic Web Programme. The Jena Framework includes: A RDF API Reading and writing RDF in RDF/XML, N3 and N-Triples An OWL API In-memory and persistent storage SPARQL query engine

2011-09-22 · 1 min · 70 words · -

OWL

OWL OWL Web本体语言指南 W3C推荐标准 2004年02月10日 摘要 目前这种结构的万维网,很像一本地图做得很差的地理书,我们对于Web中可以使用的文档和服务的了解,都是基于关键字搜索的, 同时还需要灵活地使用文档的链接和使用模式。如果没有强有力的工具的支持,这么大规模的数据是很难管理的,为了能够给Web绘制出更为详实的地图,计算代理需要对于网络上可用资源的内容和能力做一个机器能够读得懂的描述。这些描述是人类能够读得懂的信息的扩展。 OWL,这种本体描述语言,可以用来描述Web文档和应用中内在的类和关系。 这篇文章解释了OWL语言的使用: 通过定义类以及类的属性来形式化某个领域; 定义个体并说明它们之间的属性; 在OWL语言的形式化语义允许的层次上,对类和个体进行推理。 本文的各章节间是按照类、属性、个体的集合的定义给出来的,从最简单的概念开始,逐渐过渡到更为复杂的概念。 本文档的状态 本文档已被W3C成员及其他相关方面审阅,并已被W3C总监 (W3C Director) 批准为W3C推荐标准 (W3C Recommendation) 。W3C制定推荐标准的任务是使之受到关注,并促使其被广泛应用。这将增强Web的功能性与互操作性。 本文档是W3C关于Web本体语言OWL的推荐标准的六个部分之一。 它已经被Web 本体工作小组(小组章程) 作为W3C语义Web行动 (行动声明) 的一部分于2004年2月10日发布。 本文档的早期版本中所描述的关于OWL的设计已被广泛评阅,并已满足工作小组的技术需求。工作小组充分考虑所有收到的意见,并做了必要的修改。本文档自从候选推荐标准版本以来的所有修改都在文后的变更日志中。 欢迎通过public-webont-comments@w3.org (历史存档)提出您的意见,也可以通过www-rdf-logic@w3.org (mailto:www-rdf-logic@w3.org)(历史存档) 参与相关技术的讨论。 可以访问到有关实现的一个列表。 W3C维护着一个与这些工作相关的专利声明的目录。 这节描述了本文档在发布时的状态。其他文档可能替代这文档。一份当前W3C的最新出版物的目录和这个技术报告的最新版本可以在 W3C技术报告索引http://www.w3.org/TR/ 上找到。 目录 引言 1.1. OWL的种类 1.2. 本文档的结构 本体的结构 2.1. 命名空间 2.2. 本体头部 2.3. 数据集成与隐私 基本元素 (Basic Elements) 3.1. 简单的类和个体 3.1.1. 简单的具名类 3.1.2. 个体 3.1.3. 使用方面的考虑 3.2. 简单属性 3.2.1. 定义属性 (Defining Properties) 3.2.2. 属性和数据类型 ...

2011-09-22 · 8 min · 1625 words · -

RDF OWL

RDF OWL http://blogger.org.cn/blog/more.asp?name=babyblue&id=21546 Ontology来源于哲学词汇: 存在论 (也有翻译成本体论) 。RDF是一种不错的本体描述方式,我们可以定义根据对现实世界的理解针对某个领域定义词汇来描述这个领域的知识。但RDF与RDF不能定义同义词、反义词以及描述词与词间的关系 (类与类之间的关系) ,比如说等价性、互补排斥性、限制个数、属性的对称性等。OWL弥补了RDF的不足,运用AI中的逻辑论 (逻辑论中,把人们的思维用式子来表述,并且证明这些式子的正确性) 来赋予网给以语义,形成SW。在SW的定义中,吸收了很多知识的优点,如OO,逻辑论、树结构等。 从HTML到XML HTML是我们最常用的文档标记语言,并且已广泛应用于WEB上。HTML可用来描述资源,但其的特点限制了其生成的文档只有人可以看得懂。HTML有两大不足限制其发展: 一是其结构不明显,很难被应用程序解析;二是描述的局限性,如无法描述某些科学符号。 为了让应用程序能够理解文档,就需要良好的结构,于是最简单但功能强大的树状结构就被采用了。用树状结构来描述数据就生成了XML。XML为在各种应用程序间以及meta数据的交换提供了一致的体系和解析器。但XML本身没有进行任何语义的定义 (或说弱语义定义) ,即其描述的数据的语义机器无法理解。 理解数据的首要条件是更准备地记录数据结构与类型。预定义的最基本的数据类型不能很好地满足大多数现实生活中数据要求。我们需要更清楚地描述数据类型,即更给出数据更严格的限制。XML Schema提供了在预定义的类型上自定义数据类型,而且这种数据类型可以被解析器解析。 XML Schema XML Schema (XML的定义机制) 提供了在XML中可以利用的基本的数据类型 (如date,string等,DTD中只提供了string) ,通过对已有的类型进行扩张或者进行制约,从而定义新的类型。和DTD文档类型不同,XML Schema不需要另外的解析器和编辑器。 但XML Schema只是对文档的结构进行了定义,仍然不能让应用程序理解数据的语义。为了实现让应用程序理解数据,就出现了RDF。 从XML到RDF RDF(Resource Description Framework)并不是一种语言,只是一种书写规范。RDF的基本构造为陈述(或声明,Statement),表述了一个 (资源,资源所具有的属性,属性值) (即主体—属性—客体) 的三元组。RDF表现的是一个数据模型,简言之就是一个陈述就是一个什么事物 (资源) ,这个事物具有什么属性,这些属性应该有什么样的属性值。XML用来做为描述这种抽象的数据模型的具体书写方式 (不用XML,也可以用其他的构成来表现RDF) 。同样因为现实世界的超级复杂性,预定义的词汇根本不够用,我们就使用RDF Schema来自定义词汇。 RDF描述资源的特性是: 以属性为中心的思考方法。不是重在定义属性的值,而是通过定义拥有这个属性的主体 (资源) 的范围 (定义域) ,以及这个属性的取值范围 (值域) 。这样我们就可以比较精确地定义词汇,不是精确是因为我们不可能也没必要精确定义词汇,我们更关心的是词汇者的相互关系,即我们不能想让机器理解某个词汇,还是要让其理解词汇之间的相互关系,从而能为我们提供智能的服务。 RDF Schema RDFS翻译为资源描述框架的定义机制。其与RDF的关系不同于XML与XMLS间的关系。XMLS是用来对XML的结构 (构造) 进行定义,而RDFS是用来对RDF数据模型用到的词汇进行定义。 RDF+RDFS不能为我们提供描述词汇间的关系,导致OWL的出现。 OWL 是由DAML(DARPA Agent Markup Language)+OIL(Ontology Inference Layer)演变而来。 OWL是RDF的扩张,为我们提供了更广泛的定义RDFS词汇的功能,更广泛意指可以定义词汇之间的关系,类与类间的关系,属性与属性之间的关系等。 RDF是semantic web中MetaData层的资源表述框架,而 OWL应该是Ontology层的概念。 RDF着重于对数据的描述,而OWL则侧重于逻辑推理的准备。

2011-09-22 · 1 min · 68 words · -

XML RDF OWL

XML RDF OWL XML, RDF, OWL 请先理解RDF和RDF Schema的知识再看这篇文章。不理解的话请参照RDF和RDF Schema在线手册的第一篇相关概念的文章。理解概念很重要,因为对大多数人来说都有编程的基础,可以直接看别的语言的代码。但语义网相关概念是比较新 的概念。所以建议把概念一定到搞懂。通过RDF Schema,我们可以自定义词汇了。但在我们的实际生活当中,我们用的词汇之间都是有联系的。最简单的反义词,同义词。又比如"足球队"这个词,我们每个人脑子都有一个概念,上场比赛需要11个队员。这都是我们在生活中积累的经验。我们想让机器也理解数据的话,最起码要和人一样,也可以定义反义词,同义词,或者词和词之间的一些关系。这些仅仅靠RDF和RDF Schema是不够的。为了达到这个要求,就有了OWL(Web Ontology Language)的出现,Ontolory本是哲学词汇-存在论的意思。大多数中文翻译为本论。其实用原本哲学的意思就很好理解。我们就是在定义词汇,或者词汇之间的关系,或者类之间的关系等等。我们定义了它们,它们就存在于我们的网络里了。我们看看有了它对我们到底有什么好处。比如说它可以定义类和类之间的关系,等价性,互补排斥性,限制个数,属性的对称性等等。似乎还比较模糊,那就举一个具体的例子,比如我们描述这样一个资源: 从北京到上海的距离是400公里。人们听到了这句话后就知道了,上海到北京也是400公里。因为我们知道起点北京到终点上海的距离,和起点上海到终点北京的距离是一样的,也就是我们懂距离,起点,终点这3个词的概念而且知道它们之间的关系,所以我们得出上面的结论。现在我们可以用RDF和RDF Schema来定义这3个词汇,然后我们需要定义的是一个关系,起点-终点的距离等于终点-起点的距离,这里运用到了等价性。这个关系不能用RDF和 RDF Schema来定义,但是可以通过OWL来定义。当然解决这个问题方法可以有许多定义,我只是在这里举个例子。大家应该大概知道OWL是做什么的吧。那么为什么它有这个功能呢?其实它运用了人工智能中的逻辑论,逻辑论把人们的思维用式子来表达,并且可以证明这个式子的正确。其实在语义网的定义中,吸收了很多知识的优点,面向对象,逻辑轮,树结构等等。所以大家学起来,有时会有似曾相识的感觉。下面把大家容易混淆的几个概念XML,XML Schema,RDF,RDF Schema,OWL直接的关系拿出来讲一下。 主要的理解思想就是在语义网的定义中遇到问题了,就会有新的事物被定义或者说是出现. 从HTML到XML HTML的记述是我们最常用的,本来它是用来描述资源的,但是它记录的只有人可以看懂。还有它第一结构不明显,很难被应用程序解析,第二,记述的 局限性,比如某些科学符号无法表达等等。为了让应用程序好理解,就需要有良好的结构。最简单但也是功能很强大的树状结构就被采用了。我们以树状结构来记录数据,这就是XML。XML: 是一种国际通用标记语言。它为在各种应用程序间的数据和meta数据的交换,提供了一致的体系和解析器 (parser) 。但是对于数据的意义没有进行定义,比如说对于某个标签<课程>,也就是本身没有意义,除了结构的不同,它和HTML一样,数据也只有人可以看懂。想让机器理解数据,首先本身的数据类型很重要,不然自己都不知道自己是谁,或者自己是干什么的,怎么可能让机器理解。为了更好的描述资源,也就是说为了更准确的纪录数据的类型。需要我们可以自定义类型,因为预定义的类型只有最基本的类型,不能定义大多数现实生活中的数据类型。对于数据发布人,需要他描述清楚数据类型,也就是说数据的限制等等。所以我们需要一个可以在预定义类型上可以自定义类型,而且它也必须能被解析器解析。所以,就出现了XML Schema。 XML Schema XML Schema: XML的定义机制。和DTD文档类型定义不同,不需要另外的解析器和编辑器。定义的是XML的构造,对已有的类型进行扩张或者进行制约,从而定义了新的类型。XML Schema提供了在XML可以利用的基本的数据类型 (日期,数值等,DTD中只提供了文字列) 。但是即便是这样,它只是对XML文档的构造进行了定义,还是不能让应用程序理解数据。所以为了实现应用程序理解数据,就出现了RDF。 从XML到RDF RDF有时我们会称它为语言,其实这是不对的,RDF是一种书写规范,正确的翻译为资源描述框架。RDF的基本构造为陈述 (或者叫做声明, statement) 了一个资源-资源具有的属性-属性值 (主体-属性-客体) 的三元组。它表现的是一个数据模型,通俗的说一个陈述就是一个什么事物 (资源) 具有什么属性 (属性) ,这个属性是怎样的属性 (属性值) 。我们为了描述抽象的数据模型,需要具体的书写,这就用到了XML,这样RDF就继承了XML的优点。但是不用XML的构成,利用其他的构成也可以表现RDF。所以对RDF而言,XML不是必要的(一般我们的文档格式为RDF/XML就是这个原 因,用XML表示的RDF)。我们终于可以定义一个让机器理解的词汇了,但是它也遇到了一个问题,就是预定义的词汇根本不够用。我们需要自定义一些词汇。为了可以自定义词汇,就出现了RDF Schema。 RDF Schema RDF Schema (RDFS) 翻译为资源描述框架的定义机制,大家也许会比较容易联想到XML和XML Schema的关系,认为它们是同样的。这个想法也是不对的,XML Schema是用来对XML的构造进行定义,而RDFS是用来对RDF数据模型用到的词汇进行定义。我们需要了解一个RDF的特征,它是以属性为中心的思考方法。不是具体定义属性的值,而是定义了拥有这个属性的主体(资源)的范围(定义域),和这个属性可以取到的值的范围(值域)。这样就我们可以比较精确地定义词汇。为什么说比较精确,而不说精确,因为一个单独存在的词汇对我们毫无意义,即便机器可以理解它。我们语言中的词汇都是互相有关联的,正因为我们 只有知道了词汇的相互关系,我们才可以在生活中正常交流。同样我们一直说让应用程序理解词汇,其实是为了让应用程序理解词汇以及词汇之间的关系,从而自动地,智能地提供给我们服务。为了达到这个目的,描述词汇的关系至关重要。但是RDF和RDF Schema却不能提供给我们这样一个功能,所以也就出现了OWL。 OWL OWL是RDF的扩张,提供我们更广泛的由定义RDF Schema词汇。所谓更广泛就是指可以定义词汇之间的关系,类与类的关系,属性与属性之间的关系等等。具体请参照在线使用手册。 后记 其实每个概念都不难理解,理解的关键在于它们为了什么而出现。OWL的出现也没有能实现最终的目的。所以语义网结构上还有几层,这几层还没有推出规范,所以暂时不做它们的使用手册。

2011-09-22 · 1 min · 66 words · -

emacs format, 格式化

emacs format, 格式化 http://www.blogjava.net/killme2008/archive/2011/07/26/355041.html 格式化源码是很常见的需求,emacs有个indent-region函数用于格式化选定的代码,前提是你处在某个非text mode下,如c-mode或者java-mode之类。如果要格式化整个文件,你需要先选定整个文件(C-x-h),然后调用indent-region (或者 C-M-\ )。两个命令总是麻烦,我们可以定义个函数搞定这一切,并绑定在一个特定键上,实现一键格式化: ;;格式化整个文件函数 (defun indent-whole () (interactive) (indent-region (point-min) (point-max)) (message "format successfully")) ;;绑定到F7键 (global-set-key [f7] 'indent-whole) 将这段代码添加到你的emacs配置文件 (~/.emacs),重启emacs,以后格式化源码都可以用F7一键搞定。 整理整个文件 M-x mark-whole-buffer 或者 C-x h //选中整个文件 M-x indent-region 或者 C-M- //格式化选中 整理某个函数 M-x mark-defun 或者 C-M-h //选中函数 M-x indent-region 或者 C-M- //格式化

2011-09-21 · 1 min · 49 words · -