JAVA细节使用20131128

来源:互联网 发布:php源码解密 编辑:程序博客网 时间:2024/04/27 21:59

1.工厂模式太不利于别的程序员阅读了,除非跑一遍程序,要不然很难搞清具体的代码实现是哪一块搞的,只有开发的一小部分人估计会乐在其中,要么说程序员都是猥琐的天使,这里可见一斑。

2.ARQ中sparql实现的关键一句是将DatasetGraph和Context绑定到一起,DatasetGraph是供查询的一个实际内容,Context的官方解释是“A class for setting and keeping named values. Used to pass implementation-specific parameters across general interfaces.”也就是一种数据的传递结构,至此还是一头雾水,不妨按照例子来看看它们的实际内容:

原始rdf文件:

<rdf:RDF      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"      xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"      xmlns:foaf="http://xmlns.com/foaf/0.1/"      xmlns:admin="http://webns.net/mvcb/"><foaf:PersonalProfileDocument rdf:about="">  <foaf:maker rdf:resource="#me"/>  <foaf:primaryTopic rdf:resource="#me"/>  <admin:generatorAgent rdf:resource="http://www.ldodds.com/foaf/foaf-a-matic"/>  <admin:errorReportsTo rdf:resource="mailto:leigh@ldodds.com"/></foaf:PersonalProfileDocument><foaf:Person rdf:ID="me"><foaf:name>Semantic Web</foaf:name><foaf:title>Dr</foaf:title><foaf:givenname>Semantic</foaf:givenname><foaf:family_name>Web</foaf:family_name><foaf:nick>Webby</foaf:nick><foaf:homepage rdf:resource="http://semwebprogramming.org"/><foaf:depiction rdf:resource="http://semwebprogramming.org/semweb.jpg"/><foaf:phone rdf:resource="tel:410-679-8999"/><foaf:workplaceHomepage rdf:resource="http://semwebprogramming.com"/><foaf:workInfoHomepage rdf:resource="http://semwebprogramming.com/dataweb.html"/><foaf:schoolHomepage rdf:resource="http://www.web.edu"/><foaf:knows><foaf:Person rdf:ID="Ontology"><foaf:name>I. M. Ontology</foaf:name><foaf:mbox rdf:resource="mailto:ont@gmail.com"/><rdfs:seeAlso rdf:resource="http://ont.com"/></foaf:Person></foaf:knows><foaf:knows><foaf:Person rdf:ID="Reasoner"><foaf:name>Ican Reason</foaf:name><foaf:mbox rdf:resource="mailto:reason@firefox.com"/><rdfs:seeAlso rdf:resource="http://reasoner.com"/></foaf:Person></foaf:knows><foaf:knows><foaf:Person rdf:ID="Statement"><foaf:name>Makea Statement</foaf:name><foaf:mbox rdf:resource="mailto:mstatement@gmail.com"/><rdfs:seeAlso rdf:resource="http://statement.com"/></foaf:Person></foaf:knows></foaf:Person></rdf:RDF>

DatasetGraph的内容是:

(dataset  (graph    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/2000/01/rdf-schema#domain> <http://www.w3.org/1999/02/22-rdf-syntax-ns#List>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/2000/01/rdf-schema#range> <http://www.w3.org/1999/02/22-rdf-syntax-ns#List>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#List> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Class>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#List> <http://www.w3.org/2000/01/rdf-schema#subClassOf> <http://www.w3.org/2000/01/rdf-schema#Resource>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate> <http://www.w3.org/2000/01/rdf-schema#domain> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate> <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Class>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property> <http://www.w3.org/2000/01/rdf-schema#subClassOf> <http://www.w3.org/2000/01/rdf-schema#Resource>)    (triple <http://www.w3.org/2000/01/rdf-schema#label> <http://www.w3.org/2000/01/rdf-schema#range> <http://www.w3.org/2000/01/rdf-schema#Literal>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Class>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement> <http://www.w3.org/2000/01/rdf-schema#subClassOf> <http://www.w3.org/2000/01/rdf-schema#Resource>)    (triple <http://www.w3.org/2000/01/rdf-schema#Class> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Class>)    (triple <http://www.w3.org/2000/01/rdf-schema#Class> <http://www.w3.org/2000/01/rdf-schema#subClassOf> <http://www.w3.org/2000/01/rdf-schema#Resource>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#range> <http://www.w3.org/2000/01/rdf-schema#Class>)    (triple <http://www.w3.org/2000/01/rdf-schema#Resource> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Class>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#subject> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#subject> <http://www.w3.org/2000/01/rdf-schema#domain> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#subject> <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#subject>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Datatype>)    (triple <http://www.w3.org/2000/01/rdf-schema#comment> <http://www.w3.org/2000/01/rdf-schema#range> <http://www.w3.org/2000/01/rdf-schema#Literal>)    (triple <http://www.w3.org/2000/01/rdf-schema#range> <http://www.w3.org/2000/01/rdf-schema#domain> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property>)    (triple <http://www.w3.org/2000/01/rdf-schema#range> <http://www.w3.org/2000/01/rdf-schema#range> <http://www.w3.org/2000/01/rdf-schema#Class>)    (triple <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> <http://www.w3.org/2000/01/rdf-schema#domain> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property>)    (triple <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> <http://www.w3.org/2000/01/rdf-schema#range> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#object> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#object> <http://www.w3.org/2000/01/rdf-schema#domain> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#object> <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#object>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#List>)    (triple <http://www.w3.org/2000/01/rdf-schema#domain> <http://www.w3.org/2000/01/rdf-schema#domain> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property>)    (triple <http://www.w3.org/2000/01/rdf-schema#domain> <http://www.w3.org/2000/01/rdf-schema#range> <http://www.w3.org/2000/01/rdf-schema#Class>)    (triple <http://www.w3.org/2000/01/rdf-schema#Literal> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Class>)    (triple <http://www.w3.org/2000/01/rdf-schema#Literal> <http://www.w3.org/2000/01/rdf-schema#subClassOf> <http://www.w3.org/2000/01/rdf-schema#Resource>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://www.w3.org/2000/01/rdf-schema#domain> <http://www.w3.org/1999/02/22-rdf-syntax-ns#List>)    (triple <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> <http://www.w3.org/1999/02/22-rdf-syntax-ns#first>)    (triple <http://www.w3.org/2000/01/rdf-schema#subClassOf> <http://www.w3.org/2000/01/rdf-schema#domain> <http://www.w3.org/2000/01/rdf-schema#Class>)    (triple <http://www.w3.org/2000/01/rdf-schema#subClassOf> <http://www.w3.org/2000/01/rdf-schema#range> <http://www.w3.org/2000/01/rdf-schema#Class>)    (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/title> "Dr")    (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/knows> <http://org.semwebprogramming/chapter2/people#Ontology>)    (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/family_name> "Web")    (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/knows> <http://org.semwebprogramming/chapter2/people#Reasoner>)    (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/knows> <http://org.semwebprogramming/chapter2/people#Statement>)    (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/schoolHomepage> <http://www.web.edu>)    (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/name> "Semantic Web")    (triple <http://org.semwebprogramming/chapter2/people#me> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person>)    (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/homepage> <http://semwebprogramming.org>)    (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/depiction> <http://semwebprogramming.org/semweb.jpg>)    (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/workInfoHomepage> <http://semwebprogramming.com/dataweb.html>)    (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/nick> "Webby")    (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/phone> <tel:410-679-8999>)    (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/givenname> "Semantic")    (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/workplaceHomepage> <http://semwebprogramming.com>)    (triple <http://org.semwebprogramming/chapter2/people> <http://webns.net/mvcb/errorReportsTo> <mailto:leigh@ldodds.com>)    (triple <http://org.semwebprogramming/chapter2/people> <http://webns.net/mvcb/generatorAgent> <http://www.ldodds.com/foaf/foaf-a-matic>)    (triple <http://org.semwebprogramming/chapter2/people> <http://xmlns.com/foaf/0.1/primaryTopic> <http://org.semwebprogramming/chapter2/people#me>)    (triple <http://org.semwebprogramming/chapter2/people> <http://xmlns.com/foaf/0.1/maker> <http://org.semwebprogramming/chapter2/people#me>)    (triple <http://org.semwebprogramming/chapter2/people> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/PersonalProfileDocument>)    (triple <http://org.semwebprogramming/chapter2/people#Ontology> <http://www.w3.org/2000/01/rdf-schema#seeAlso> <http://ont.com>)    (triple <http://org.semwebprogramming/chapter2/people#Ontology> <http://xmlns.com/foaf/0.1/mbox> <mailto:ont@gmail.com>)    (triple <http://org.semwebprogramming/chapter2/people#Ontology> <http://xmlns.com/foaf/0.1/name> "I. M. Ontology")    (triple <http://org.semwebprogramming/chapter2/people#Ontology> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person>)    (triple <http://org.semwebprogramming/chapter2/people#Reasoner> <http://www.w3.org/2000/01/rdf-schema#seeAlso> <http://reasoner.com>)    (triple <http://org.semwebprogramming/chapter2/people#Reasoner> <http://xmlns.com/foaf/0.1/mbox> <mailto:reason@firefox.com>)    (triple <http://org.semwebprogrammi...

最初查询Sparql语句是:

PREFIX  foaf: <http://xmlns.com/foaf/0.1/>PREFIX  rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>PREFIX  people: <http://org.semwebprogramming/chapter2/people#>SELECT DISTINCT  ?nameWHERE  { people:me foaf:name ?name }

而Context的内容是:

symbol:http://jena.hpl.hp.com/ARQ/system#now = "2013-11-28T20:34:40.062+08:00"^^http://www.w3.org/2001/XMLSchema#dateTimesymbol:http://jena.hpl.hp.com/ARQ#regexImpl = symbol:http://jena.hpl.hp.com/ARQ#javaRegexsymbol:http://jena.hpl.hp.com/ARQ/system#query = PREFIX  rdfs: <http://www.w3.org/2000/01/rdf-schema#>PREFIX  foaf: <http://xmlns.com/foaf/0.1/>PREFIX  rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>PREFIX  people: <http://org.semwebprogramming/chapter2/people#>SELECT DISTINCT  ?nameWHERE  { people:me foaf:name ?name }symbol:http://jena.hpl.hp.com/ARQ#constantBNodeLabels = truesymbol:http://jena.hpl.hp.com/ARQ#strictGraph = falsesymbol:http://jena.hpl.hp.com/ARQ#strictSPARQL = falsesymbol:http://jena.hpl.hp.com/ARQ#enablePropertyFunctions = truesymbol:http://jena.hpl.hp.com/ARQ#stageGenerator = com.hp.hpl.jena.sparql.engine.main.StageGeneratorGeneric@a14c53symbol:http://jena.hpl.hp.com/ARQ#romanNumerals = false

可以看出,DatasetGraph和Context分别对应着处理后的本体数据和查询语句。因此将两个东西绑定到一起的原因也可以猜测出来了。但是问题在于Sparql查询语句的处理和封装应该是放进query中了,但是这里Context为啥也有了查询语句?而且Context中的查询语句还是没有处理过的raw数据,这一点很可疑。Context里也不一定就是raw数据,因为myeclipse在debug下Variables的数据显示似乎很强大,Query查看的时候也直接查看到完整的Query了,虽然已经分析过Query是将原始sparql查询语句进行拆分封装了,但是以让显示完整的raw数据,这就开始挑战我对myeclipse变量显示机制的理解程度了。


3.在编译Query内的Element的时候,Jena使用了其定义的一种类型Pair使用时的情况如下:

    protected Op compileElementGroup(ElementGroup groupElt)    {        Pair<List<Expr>, List<Element>> pair = prepareGroup(groupElt) ;        List<Expr> filters = pair.getLeft() ;        List<Element> groupElts = pair.getRight() ;        // Compile the consolidated group elements.        // "current" is the completed part only - there may be thing pushed into the accumulator.        Op current = OpTable.unit() ;        Deque<Op> acc = new ArrayDeque<Op>() ;                for (Iterator<Element> iter = groupElts.listIterator() ; iter.hasNext() ; )        {            Element elt = iter.next() ;            if ( elt != null )                current = compileOneInGroup(elt, current, acc) ;        }                // Deal with any remaining ops.        //current = joinOpAcc(current, acc) ;                if ( filters != null )        {            // Put filters round the group.            for ( Expr expr : filters )                current = OpFilter.filter(expr, current) ;        }        return current ;    }

这个Pair就是一个组合,仅仅是一个配对,研究之后才发现,它没有什么高级方法,害我心中一紧张以为又遇到什么高端东西了。

程序中,这个Pair语句处理后,因为就传入了一个pattern,所以实际上就只有一对pair进去了,这个独立的Pair的List<Expr>是null,而List<Element>则是传入的唯一一个pattern。


4.在将element编译为op之后,jena做了一个简化的环节,暂且看看这一简化前后op的变化:

简化前:

(join  (table unit)  (bgp (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/name> ?name)))
简化后:

(bgp (triple <http://org.semwebprogramming/chapter2/people#me> <http://xmlns.com/foaf/0.1/name> ?name)

可以看出简化只是将join的table这一块去掉了,实际上table当时加入也是加入了一个默认的东西,join的op其实是一个基于OpBase的Op2类,本身就是为了描述更复杂的情况的,本例中本来sparql语句没有那些复杂因素,因此直接就把默认加上去的东西给删去了。






原创粉丝点击