public function getResourcePredicates($subject) { $resource = ARC2::getResource(); $resource->setStore($this->getStore()); $resource->setURI($subject); $properties = $resource->getProps(); return $properties; }
function getResource($uri, $store_or_props = '') { $res = ARC2::getResource($this->a); $res->setURI($uri); if (is_array($store_or_props)) { $res->setProps($store_or_props); } else { $res->setStore($store_or_props); } return $res; }
return $str; } // http://vision-media.ca/resources/php/php-word-limit function string_limit_words($string, $word_limit) { $words = explode(' ', $string); return implode(' ', array_slice($words, 0, $word_limit)); } $format = isset($_REQUEST['format']) && !empty($_REQUEST['format']) ? $_REQUEST['format'] : 'xml'; $url = @trim($_REQUEST['url']); if (empty($url)) { die(''); } $ns = array('rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'rdfs' => 'http://www.w3.org/2000/01/rdf-schema#', 'foaf' => 'http://xmlns.com/foaf/0.1/', 'dc' => 'http://purl.org/dc/elements/1.1/', 'dcterms' => 'http://purl.org/dc/terms/', 'scalar' => 'http://vectorsjournal.org/scalar/elements/1.0/', 'ctag' => 'http://commontag.org/ns#', 'art' => 'http://simile.mit.edu/2003/10/ontologies/artstor#', 'sioc' => 'http://rdfs.org/sioc/ns#', 'sioctypes' => 'http://rdfs.org/sioc/types#', 'foaf' => 'http://xmlns.com/foaf/0.1/', 'owl' => 'http://www.w3.org/2002/07/owl#'); $conf = array('ns' => $ns); $resource = ARC2::getResource($conf); $resource->setURI($url); $resource->setProp('rdf:type', array('value' => 'scalar:External', 'type' => 'uri')); $resource->setProp('dcterms:title', ''); $resource->setProp('dcterms:description', ''); $contents = @file_get_contents($url); if ($contents) { $title = getTextBetweenTags($contents, 'title'); if (empty($title)) { $title = ''; } $resource->setProp('dcterms:title', trim($title)); $meta = get_meta_data($contents); if (!empty($meta)) { $desc = ''; foreach ($meta as $row) {
/** * Return an ARC Helper object around a supplied index */ public function helper($index = '') { $conf = array('ns' => $this->ns); $resource = ARC2::getResource($conf); if (!empty($index)) { $resource->setIndex($index); } $resource->setURI(key($index)); return $resource; }
/** * Outputs the public projects list as ADMS.SW for /projects * @param unknown_type $params */ function content_negociated_projects_list(&$params) { $accept = $params['accept']; if ($accept == 'application/rdf+xml') { // We will return RDF+XML $params['content_type'] = 'application/rdf+xml'; // Construct an ARC2_Resource containing the project's RDF (DOAP) description $ns = array('rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'rdfs' => 'http://www.w3.org/2000/01/rdf-schema#', 'doap' => 'http://usefulinc.com/ns/doap#', 'dcterms' => 'http://purl.org/dc/terms/', 'admssw' => 'http://purl.org/adms/sw/', 'adms' => 'http://www.w3.org/ns/adms#'); $conf = array('ns' => $ns); $res = ARC2::getResource($conf); $res->setURI(util_make_url("/projects")); // $res->setRel('rdf:type', 'doap:Project'); rdfutils_setPropToUri($res, 'rdf:type', 'admssw:SoftwareRepository'); //$res->setProp('doap:name', $projectname); $res->setProp('adms:accessURL', util_make_url("/softwaremap/")); $forge_name = forge_get_config('forge_name'); $ff = new FusionForge(); $res->setProp('dcterms:description', 'Public projects in the ' . $ff->software_name . ' Software Map on ' . $forge_name); $res->setProp('rdfs:label', $forge_name . ' public projects'); $res->setProp('adms:supportedSchema', 'ADMS.SW v1.0'); // same as for trove's full list $projects = get_public_active_projects_asc(); $proj_uris = array(); foreach ($projects as $row_grp) { $proj_uri = util_make_url_g(strtolower($row_grp['unix_group_name']), $row_grp['group_id']); $proj_uris[] = $proj_uri; } if (count($proj_uris)) { rdfutils_setPropToUri($res, 'dcterms:hasPart', $proj_uris); } $conf = array('ns' => $ns, 'serializer_type_nodes' => true); $ser = ARC2::getRDFXMLSerializer($conf); /* Serialize a resource index */ $doc = $ser->getSerializedIndex($res->index); $params['content'] = $doc . "\n"; } }
public function LoadResourceFromFile($file) { $this->set_URI_Document($file); if (false === ($index = $this->cache->getVar($this->URI_Document, 'Foafpress', time() - filectime($file), 0))) { // load arc2 parser $parser = ARC2::getRDFParser(); // parse rdf document $parser->parse($this->URI_Document, $this->content->SANDBOX); // get rdf content as multi-indexed array $index = $parser->getSimpleIndex(0); $this->cache->saveVar($index, $this->URI_Document, 'Foafpress', true); } // load namespaces from config $namespaces = array(); if (isset($this->config['ns'])) { $namespaces = $this->config['ns']; } // load rdf content as arc2 resource $this->arc2_resource = ARC2::getResource(array('ns' => $namespaces)); $this->arc2_resource->setIndex($index); $uri = $this->ResolveResourceRequest(); //die($uri); // set shown resource $this->arc2_resource->setURI($uri); //* if ($exporttype = $this->isExportRequest()) { if (isset($this->arc2_exportfunctions[$exporttype])) { // $this->exportRdfData($exporttype); $this->exportRdfData(); } else { $template_type = $this->config['types'][$exporttype]; } } //*/ if (!isset($template_type)) { $template_type = $this->config['types'][$this->config['typefallback']]; } // load Foafpress wrapper for arc2 resource $FP = new Foafpress_Resource_Arc2File(array('FP_config' => &$this->config, 'spcms_cache' => &$this->cache, 'spcms_pm' => &$this->pm)); $FP->initResource($this->arc2_resource); //$FP->initResource(&$this->arc2_resource); // set shown resource $FP->uri = $uri; // add sameAs resources if ($this->config['LinkedData']['followSameas'] == true) { $FP->includeSameAs(); } // default namespace in Foafpress wrapper $concept = $FP->updateNamespacePrefix(); // use ns:concept to set controller, and fallbacks for layout and template if ($concept !== false && $FP->ns_prefix) { // try to set controller try { $action_controller_class_path = $this->pm->need($FP->ns_prefix . DIRECTORY_SEPARATOR . $concept); if (!isset($_SERVER['REQUEST_METHOD']) || !$_SERVER['REQUEST_METHOD']) { $this->dieWithHttpErrorCode('Empty request method!', 503); // TODO is 503 right? } elseif (in_array($_SERVER['REQUEST_METHOD'], $this->config['supportedmethods'])) { $action_controller_class_name = ucfirst($FP->ns_prefix . '_' . $concept . '_Controller'); $action_controller_use_method = strtolower($_SERVER['REQUEST_METHOD']) . '_request'; $action_controller = new $action_controller_class_name($this->sandbox, $action_controller_class_path); // execute controller request action with resource $action_controller->add_resource_object($FP); $action_controller->set_template_extension($template_type); $action_controller->{$action_controller_use_method}(); } else { $this->dieWithHttpErrorCode($_SERVER['REQUEST_METHOD'] . ' is not supported here!', 503); // TODO is 503 right? } } catch (Exception $e) { throw $e; } // set layout if (isset($this->config['layout'])) { $layoutfile = $this->config['layout']; } elseif ($this->sandbox->layoutname) { $layoutfile = $this->sandbox->layoutname; } else { $layoutfile = 'Foafpress'; } if ($this->sandbox->templateSearch($layoutfile . $template_type)) { // change sandbox layout which was configured before $this->sandbox->templateSetLayout($layoutfile . $template_type); } else { // TODO: line? $this->dieWithException($layoutfile . $template_type . '.php not found!'); } // try to set template if (!$this->sandbox->templatename) { // if not set then its name is namespace/concept.tpl $templatefile = $FP->ns_prefix . DIRECTORY_SEPARATOR . $concept . $template_type; if ($this->sandbox->templateSearch($templatefile)) { // change sandbox template which was configured before $this->sandbox->templateSetName($templatefile); } else { // TODO: line? $this->dieWithException($templatefile . '.php not found!'); } } } return; }
/** * Outputs user's FOAF profile * @param unknown_type $params */ function content_negociated_user_home(&$params) { $username = $params['username']; $accept = $params['accept']; if ($accept == 'application/rdf+xml') { $params['content_type'] = 'application/rdf+xml'; $user_obj = user_get_object_by_name($username); $user_real_name = $user_obj->getRealName(); $user_email = $user_obj->getEmail(); $mbox = 'mailto:' . $user_email; $mbox_sha1sum = sha1($mbox); $projects = $user_obj->getGroups(); sortProjectList($projects); $roles = RBACEngine::getInstance()->getAvailableRolesForUser($user_obj); sortRoleList($roles); // Construct an ARC2_Resource containing the project's RDF (DOAP) description $ns = array('rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'rdfs' => 'http://www.w3.org/2000/01/rdf-schema#', 'foaf' => 'http://xmlns.com/foaf/0.1/', 'sioc' => 'http://rdfs.org/sioc/ns#', 'doap' => 'http://usefulinc.com/ns/doap#', 'dcterms' => 'http://purl.org/dc/terms/', 'planetforge' => 'http://coclico-project.org/ontology/planetforge#'); $conf = array('ns' => $ns); // First, let's deal with the account $account_res = ARC2::getResource($conf); $account_uri = util_make_url_u($username, $user_obj->getID()); $account_uri = rtrim($account_uri, '/'); $person_uri = $account_uri . '#person'; $account_res->setURI($account_uri); // $account_res->setRel('rdf:type', 'foaf:OnlineAccount'); rdfutils_setPropToUri($account_res, 'rdf:type', 'foaf:OnlineAccount'); rdfutils_setPropToUri($account_res, 'foaf:accountServiceHomepage', $account_uri . '/'); $account_res->setProp('foaf:accountName', $username); rdfutils_setPropToUri($account_res, 'sioc:account_of', $person_uri); rdfutils_setPropToUri($account_res, 'foaf:accountProfilePage', $account_uri); $groups_index = array(); $projects_index = array(); $roles_index = array(); $usergroups_uris = array(); // see if there were any groups if (count($projects) >= 1) { foreach ($projects as $p) { // TODO : report also private projects if authenticated, for instance through OAuth if ($p->isPublic()) { $project_link = util_make_link_g($p->getUnixName(), $p->getID(), $p->getPublicName()); $project_uri = util_make_url_g($p->getUnixName(), $p->getID()); // sioc:UserGroups for all members of a project are named after /projects/A_PROJECT/members/ $usergroup_uri = $project_uri . 'members/'; $role_names = array(); $usergroups_uris[] = $usergroup_uri; $usergroup_res = ARC2::getResource($conf); $usergroup_res->setURI($usergroup_uri); rdfutils_setPropToUri($usergroup_res, 'rdf:type', 'sioc:UserGroup'); rdfutils_setPropToUri($usergroup_res, 'sioc:usergroup_of', $project_uri); $roles_uris = array(); foreach ($roles as $r) { if ($r instanceof RoleExplicit && $r->getHomeProject() != NULL && $r->getHomeProject()->getID() == $p->getID()) { $role_names[$r->getID()] = $r->getName(); $role_uri = $project_uri . 'roles/' . $r->getID(); $roles_uris[] = $role_uri; } } rdfutils_setPropToUri($usergroup_res, 'planetforge:group_has_function', $roles_uris); $project_res = ARC2::getResource($conf); $project_res->setURI($project_uri); rdfutils_setPropToUri($project_res, 'rdf:type', 'planetforge:ForgeProject'); $project_res->setProp('doap:name', $p->getUnixName()); $projects_index = ARC2::getMergedIndex($projects_index, $project_res->index); foreach ($role_names as $id => $name) { $role_res = ARC2::getResource($conf); $role_res->setURI($project_uri . 'roles/' . $id); rdfutils_setPropToUri($role_res, 'rdf:type', 'sioc:Role'); $role_res->setProp('sioc:name', $name); $roles_index = ARC2::getMergedIndex($roles_index, $role_res->index); } $groups_index = ARC2::getMergedIndex($groups_index, $usergroup_res->index); } } } // end if groups rdfutils_setPropToUri($account_res, 'sioc:member_of', $usergroups_uris); // next, deal with the person $person_res = ARC2::getResource($conf); $person_res->setURI($person_uri); rdfutils_setPropToUri($person_res, 'rdf:type', 'foaf:Person'); $person_res->setProp('foaf:name', $user_real_name); rdfutils_setPropToUri($person_res, 'foaf:holdsAccount', $account_uri); $person_res->setProp('foaf:mbox_sha1sum', $mbox_sha1sum); // merge the two sets of triples $merged_index = ARC2::getMergedIndex($account_res->index, $person_res->index); $merged_index = ARC2::getMergedIndex($merged_index, $groups_index); $merged_index = ARC2::getMergedIndex($merged_index, $projects_index); $merged_index = ARC2::getMergedIndex($merged_index, $roles_index); $conf = array('ns' => $ns, 'serializer_type_nodes' => true); $ser = ARC2::getRDFXMLSerializer($conf); /* Serialize a resource index */ $doc = $ser->getSerializedIndex($merged_index); $params['content'] = $doc . "\n"; } }
/** * Outputs project's DOAP profile * @param unknown_type $params */ function content_negociated_project_home(&$params) { $projectname = $params['groupname']; $accept = $params['accept']; $group_id = $params['group_id']; if ($accept == 'application/rdf+xml') { // connect to FusionForge internals $pm = ProjectManager::instance(); $project = $pm->getProject($group_id); $project_shortdesc = $project->getPublicName(); $project_description = $project->getDescription(); $tags_list = NULL; if (forge_get_config('use_project_tags')) { $group = group_get_object($group_id); $tags_list = $group->getTags(); } // We will return RDF+XML $params['content_type'] = 'application/rdf+xml'; // Construct an ARC2_Resource containing the project's RDF (DOAP) description $ns = array('rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'rdfs' => 'http://www.w3.org/2000/01/rdf-schema#', 'doap' => 'http://usefulinc.com/ns/doap#', 'dcterms' => 'http://purl.org/dc/terms/', 'schema' => 'http://schema.org/'); $conf = array('ns' => $ns); $res = ARC2::getResource($conf); $res->setURI(util_make_url_g($projectname, $group_id)); // $res->setRel('rdf:type', 'doap:Project'); rdfutils_setPropToUri($res, 'rdf:type', 'doap:Project'); $res->setProp('doap:name', $projectname); $res->setProp('doap:shortdesc', $project_shortdesc); if ($project_description) { $res->setProp('doap:description', $project_description); } $res->setProp('doap:homepage', $project->getHomePage()); $tags = array(); if ($tags_list) { $tags = split(', ', $tags_list); $res->setProp('dcterms:subject', $tags); } // Now, we need to collect complementary RDF descriptiosn of the project via other plugins // invoke the 'project_rdf_metadata' hook so as to complement the RDF description $hook_params = array(); $hook_params['prefixes'] = array(); foreach ($ns as $prefix => $url) { $hook_params['prefixes'][$url] = $prefix; } $hook_params['group'] = $group_id; // pass the resource in case it could be useful (read-only in principle) $hook_params['in_Resource'] = $res; $hook_params['out_Resources'] = array(); plugin_hook_by_reference('project_rdf_metadata', $hook_params); // add new prefixes to the list foreach ($hook_params['prefixes'] as $url => $prefix) { if (!isset($ns[$prefix])) { $ns[$prefix] = $url; } } // merge the two sets of triples $merged_index = $res->index; foreach ($hook_params['out_Resources'] as $out_res) { $merged_index = ARC2::getMergedIndex($merged_index, $out_res->index); } $conf = array('ns' => $ns, 'serializer_type_nodes' => true); $ser = ARC2::getRDFXMLSerializer($conf); /* Serialize a resource index */ $doc = $ser->getSerializedIndex($merged_index); $params['content'] = $doc . "\n"; } }