From: <tg...@us...> - 2008-05-20 17:54:18
|
Revision: 570 http://rdfapi-php.svn.sourceforge.net/rdfapi-php/?rev=570&view=rev Author: tgauss Date: 2008-05-20 10:54:16 -0700 (Tue, 20 May 2008) Log Message: ----------- search for dereferencing subjects added Modified Paths: -------------- trunk/bookmashup/ApiQueryService.php Modified: trunk/bookmashup/ApiQueryService.php =================================================================== --- trunk/bookmashup/ApiQueryService.php 2008-05-19 05:24:39 UTC (rev 569) +++ trunk/bookmashup/ApiQueryService.php 2008-05-20 17:54:16 UTC (rev 570) @@ -71,6 +71,12 @@ return $result; } + public function findSubject(MemModel $model, $subject){ + $name = urldecode($subject); + $result = false; + $result = $this->addSubjectToModel($model,$name); + } + private function addGoogleOffersToModel(MemModel $model){ $isbn = substr($this->uri,strrpos($this->uri,"/")+1,strlen($this->uri)); $itemresource = new Resource($this->uri); @@ -106,6 +112,19 @@ $this->dblpLookup($name,$model); return true; } + + + private function addSubjectToModel(MemModel $model,$name){ + $itemresource = new Resource($this->uri); + // rdf:type + $model->add(new Statement($itemresource, new Resource(RDF_NAMESPACE_URI.RDF_TYPE), new Resource("http://www.w3.org/2004/02/skos/core#Concept"))); + // rdfs:label + $model->add(new Statement($itemresource, new Resource("http://www.w3.org/2000/01/rdf-schema#label"), new Literal($name))); + // + $this->findBooksSubjectOf($model,$name); + $model->add(new Statement(new Resource($this->document),new Resource("http://www.w3.org/2000/01/rdf-schema#label"),new Literal("RDF document describing: ".$name))); + return true; + } private function findBooksFromAuthor($model,$name){ $xml = $this->queryAmazon($name); @@ -121,6 +140,29 @@ } } + private function findBooksSubjectOf($model,$name){ + $xml = $this->amazonPowerSearchSubject($name); + foreach($xml->Items->Item as $index =>$item){ + if(isset($item->ItemAttributes->ISBN)){ + //add book to model + $book = str_replace("/subject/","/books/",$this->uri); + $book = substr($book,0,strrpos($book,"/")+1).$item->ItemAttributes->ISBN; + $model->add(new Statement(new Resource($book) ,new Resource("http://www.w3.org/2000/01/rdf-schema#label"),new Literal($item->ItemAttributes->Title))); + $model->add(new Statement(new Resource($book) ,new Resource("http://purl.org/dc/elements/1.1/title"),new Literal($item->ItemAttributes->Title))); + // add at least the dereferenced model + $model->add(new Statement(new Resource($book) ,new Resource("http://www.w3.org/2004/02/skos/core#subject"),new Resource($this->uri))); + foreach($item->Subjects->Subject as $k => $subject){ + // generate URI for new subject + $pos = strrpos($this->uri,"/"); + $subjectUri = new Resource(substr($this->uri,0,$pos+1).urlencode($subject)); + // add to model if not the dereferenced subject (because it is already added + if($this->uri != $subjectUri) + $model->add(new Statement(new Resource($book) ,new Resource("http://www.w3.org/2004/02/skos/core#subject"),$subjectUri)); + } + } + } + } + private function findAmazonOffer($model,$offer,$isbn){ @@ -192,12 +234,20 @@ public function queryAmazon($query){ $searchIndex = "Books"; - $request="http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=".KEYID."&AssociateTag=".AssocTag."&Version=2006-09-11&Operation=ItemSearch&ResponseGroup=Medium"; + $request="http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=".KEYID."&AssociateTag=".AssocTag."&Version=2006-09-11&Operation=ItemSearch&ResponseGroup=Medium,Subjects"; $request.="&SearchIndex=$searchIndex&Keywords=".urlencode($query); $response = file_get_contents($request); return simplexml_load_string($response); } +public function amazonPowerSearchSubject($subject){ + $searchIndex = "Books"; + $request="http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=".KEYID."&AssociateTag=".AssocTag."&Version=2006-09-11&Operation=ItemSearch&ResponseGroup=Medium,Subjects"; + $request.="&SearchIndex=$searchIndex&Power=".urlencode('subject:"'.$subject.'"'); + $response = file_get_contents($request); + return simplexml_load_string($response); + } + private function addBookToModel(SimpleXMLElement $item,MemModel $model){ $itemresource = new Resource($this->uri); @@ -244,6 +294,20 @@ $model->add(new Statement($authorUri,new Resource("http://www.w3.org/2000/01/rdf-schema#label"),new Literal((string)$author))); } } + // subject(s) + $newuri = str_replace("/books/","/subject/",$this->uri); + $skosSubject = new Resource("http://www.w3.org/2004/02/skos/core#subject"); + $pos = strrpos($newuri,"/"); + if(isset($item->Subjects)){ + foreach($item->Subjects as $k => $subjects){ + foreach($subjects as $kk => $subject){ + $subjectUri = new Resource(substr($newuri,0,$pos+1).urlencode($subject)); + $model->add(new Statement($itemresource, $skosSubject, $subjectUri)); + $model->add(new Statement($subjectUri, new Resource("http://www.w3.org/2000/01/rdf-schema#label"), new Literal($subject))); + } + } + } + if(isset($item->ItemAttributes->Creator)){ foreach($item->ItemAttributes->Creator as $key => $creator){ $creatorUri = new Resource(substr($newuri,0,$pos+1).urlencode($creator)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |