在RDF入门的例子中,有这样一幅图:

最中间的那个节点起一个过渡作用,这时,虽然它也是一个资源,但这个资源没有必要标上资源描述符,因为它可能只在应用程序局部使用,作为推理机的一个桥梁等等作用,换句说,这个资源别人没有必要去引用。这样的节点,我们称之为空节点:
- Model model = ModelFactory.createDefaultModel();
-
- Resource blankNode = model.createResource(new AnonId("tempNode"));
- Property city = model.createProperty("http://www.crabobe.com/city");
- Property street = model.createProperty("http://www.crabobe.com/street");
- blankNode.addProperty(city, "深圳");
- blankNode.addProperty(street, "龙岗");
-
- Resource crab = model.createResource("http://www.crabobe.com/crab");
- Property address = model.createProperty("http://www.crabobe.com/address");
- crab.addProperty(address, blankNode);
-
- model.write(System.out);
注意,包含中文的源码文件必须是UTF-8的,运行结果如下:
- <rdf:RDF
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:j.0="http://www.crabobe.com/" >
- <rdf:Description rdf:about="http://www.crabobe.com/crab">
- <j.0:address rdf:nodeID="A0"/>
- </rdf:Description>
- <rdf:Description rdf:nodeID="A0">
- <j.0:street>龙岗</j.0:street>
- <j.0:city>深圳</j.0:city>
- </rdf:Description>
- </rdf:RDF>
JENA, 语义网基础
AnonId, JENA, RDF, 空节点
RDF作为资源描述框架,有2件事情是它的本职工作,第一,描述资源的唯一性,只有统一了,各种应用才能达成共识,好比秦始皇那会儿一样。第二,要把资源表述得有条有理。下面,拿出代码来解释。
- Model model = ModelFactory.createDefaultModel();
-
- Resource crab = model.createResource("http://www.crabobe.com/crab");
-
- model.write(System.out);
上面,我们用jena建立了crab这样一个资源,当然,crab只是java内存中的一个变量名而已,它真是的标识符号是http://www.crabobe.com/crab,也即,在这个世界上,这个资源是唯一存在的。
我们继续添加一个资源
- Model model = ModelFactory.createDefaultModel();
-
- Resource crab = model.createResource("http://www.crabobe.com/crab");
- Property numerOfLeg = model.createProperty("http://www.crabobe.com/crab#numerOfLeg");
-
- model.write(System.out);
这里我们添加了一个资源numerOfLeg,有人问,它是一个属性(Property)吧?没错,但在RDF中,属性也是一种资源,在JENA中,Property是Resource的子接口。既然它是一种资源,那必定得有唯一的标识符,这个标识符就是http://www.crabobe.com/crab#numerOfLeg。
接着我们用numerOfLeg这个属性来描述crab
- Model model = ModelFactory.createDefaultModel();
-
- Resource crab = model.createResource("http://www.crabobe.com/crab");
- Property numerOfLeg = model.createProperty("http://www.crabobe.com/crab#numerOfLeg");
- crab.addProperty(numerOfLeg, "8");
-
- model.write(System.out);
运行的结果:
- <rdf:RDF
- xmlns:j.0="http://www.crabobe.com/crab#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
- <rdf:Description rdf:about="http://www.crabobe.com/crab">
- <j.0:numerOfLeg>8</j.0:numerOfLeg>
- </rdf:Description>
- </rdf:RDF>
关于这个结果,虽然很简单,但是里面有个细节需要我们去关注!!同样是资源描述符,资源的描述符和属性的描述符是不一样的。区别就体现在,资源的描述符仅仅是作为rdf:Description标签的一个属性,而属性的描述符却要被用来作为XML标签。在这点上来看,属性的资源描述符一定要带有相对路径,假如我们这样写:
model.createProperty(”http://www.crabobe.com”);
那么这个属性标签的命名空间就没有了,如果命名空间标示为http://www.crabobe.com,那它自己的名称呢?所以,jena会报错。
所以,我们的写法可以是这样:
http://www.crabobe.com/crab
那么http://www.crabobe.com/就是命名空间,crab就是标签名称
也可以像例子都那样写:
http://www.crabobe.com/crab#numerOfLeg
那么命名空间就是http://www.crabobe.com/crab#,被jena简写成j.0,名称就是numerOfLeg。
现在,我们来验证资源的唯一性:
- Model model = ModelFactory.createDefaultModel();
-
- Resource crab = model.createResource("http://www.crabobe.com");
- Resource crab1 = model.createResource("http://www.crabobe.com");
- Property numerOfLeg = model.createProperty("http://www.crabobe.com/crab#numerOfLeg");
- Property numerOfLeg1 = model.createProperty("http://www.crabobe.com/crab#numerOfLeg");
- crab.addProperty(numerOfLeg, "8");
- crab1.addProperty(numerOfLeg1, "8");
-
- model.write(System.out);
这里,我们人为写出2个对象,但是资源描述符写成一样,这2个对象分别有各自属性,按照唯一性,那么内存中即使对象再是多,在RDF规范中,只会认资源描述符,只要资源描述符是一样的,那么就视为一个资源。运行的结果,符合我们的推理。
如果我们改一改:
- Model model = ModelFactory.createDefaultModel();
-
- Resource crab = model.createResource("http://www.crabobe.com");
- Resource crab1 = model.createResource("http://www.crabobe.com");
- Property numerOfLeg = model.createProperty("http://www.crabobe.com/crab#numerOfLeg");
- Property numerOfLeg1 = model.createProperty("http://www.crabobe.com/crab#numerOfLeg");
- crab.addProperty(numerOfLeg, "8");
- crab1.addProperty(numerOfLeg1, "10");
-
- model.write(System.out);
运行结果是什么?可以思考下,再运行结果,留待大家思考吧~
JENA, 语义网基础
JENA入门, RDF
在Google搜索中输入“我想去夏威夷度假,但希望花销不超过3000美元,哪条线路和酒店更适合我?”敲回车,共搜索出3460条包含其词语的文档,但没有一条是理想中的答案。
不是说语义搜索能解决这些问题吗?不是到处疯炒Web 3.0的概念吗?语义网到底什么时候才能来到老百姓的身边? 阅读全文…
语义网相关概述
IEEE, OWL, RDF, semantic web, Web 2.0, Web 3.0, 语义网, 语义网相关概述
这是一篇对语义网现状调查的文章,调查内容有如下:
• demographics (organization type, role in organization,and years of professional experience),
• tools and languages,
• ontology specifics (such as methodology used and the ontology’s purpose),
• ontology size (the number of concepts used in the smallest, largest, and typical ontologies), and
• production (the time frame for deploying developed ontologies and associated systems).
从调查中看出,工具的使用Protégé占68.2%,Swoop和OntoEdit各占13.6%和12.2%,使用语言OWL和RDF Schema占大比重,DAML+OIL只有12%了,其他还有关于语义网用在何处、语义网构建的方法学等等调查。
The Semantic Web Vision Where Are We.pdf (224.1 KiB, 490 hits)
相关论文, 语义网相关概述
OWL, Protégé, RDF, semantic web, survey, 论文, 语义网, 语义网相关概述