|
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.
|