Diff for /rpm2html/rdf.c between versions 1.3 and 1.4

version 1.3, 1998/05/04 02:52:56 version 1.4, 1998/05/08 04:38:21
Line 18 Line 18
   
 #include "rpm2html.h"  #include "rpm2html.h"
 #include "rpmdata.h"  #include "rpmdata.h"
 #include "parser.h"  
 #include "tree.h"  
 #include "rdf.h"  
 #include "html.h"  #include "html.h"
   
   #include "rdf_api.h"
   #include "rdf.h"
   
 /*  /*
  * Open an RDF file call the parser to create a XML tree   * Open an RDF file call the parser to create a XML tree
  * Then walk the tree and build an rpmData structure for   * Then walk the tree and build an rpmData structure for
Line 33  rpmDataPtr rpmOpenRdf(char *nameRpm, rpm Line 33  rpmDataPtr rpmOpenRdf(char *nameRpm, rpm
 }  }
   
 /*  /*
  * Create and RDF file containing the description for the   * Create and RDF file containing the description for the given RPM data.
  * given RPM data.  
  */   */
 void dumpRpmRdf(rpmDataPtr rpm, rpmSubdirPtr tree) {  void dumpRpmRdf(rpmDataPtr rpm, rpmSubdirPtr tree) {
     struct tm * tstruct;      struct tm * tstruct;
     rpmDirPtr dir = rpm->dir;      rpmDirPtr dir = rpm->dir;
     char *base = dir->dir;      char *base = dir->dir;
     FILE *rdf;  
     int i;      int i;
     char buf[1000];      char buf[10000];
       char file[1000];
       rdfSchema rdf;
       rdfNamespace rpmNs;
       rdfDescription desc;
       rdfBag bag;
   
     if (rpm2html_rdf_dir != NULL) base = rpm2html_rdf_dir;      if (rpm2html_rdf_dir != NULL) base = rpm2html_rdf_dir;
   
     if ((dir->subdir != NULL) && (dir->subdir[0] != '\0')) {      if ((dir->subdir != NULL) && (dir->subdir[0] != '\0')) {
         if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0'))          if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0'))
             sprintf(buf, "%s/%s/%s/%s.rdf", base, dir->subdir,              sprintf(file, "%s/%s/%s/%s.rdf", base, dir->subdir,
                     rpm->subdir, rpmName(rpm));                      rpm->subdir, rpmName(rpm));
         else          else
             sprintf(buf, "%s/%s/%s.rdf", base, dir->subdir, rpmName(rpm));              sprintf(file, "%s/%s/%s.rdf", base, dir->subdir, rpmName(rpm));
     } else {      } else {
         if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0'))          if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0'))
             sprintf(buf, "%s/%s/%s.rdf", base, rpm->subdir, rpmName(rpm));              sprintf(file, "%s/%s/%s.rdf", base, rpm->subdir, rpmName(rpm));
         else          else
             sprintf(buf, "%s/%s.rdf", base, rpmName(rpm));              sprintf(file, "%s/%s.rdf", base, rpmName(rpm));
     }      }
   
     if (checkDate(buf, rpm->stamp)) return;      if (checkDate(file, rpm->stamp)) return;
     if (verbose > 1) {      if (verbose > 1) {
         printf("Dumping %s\n", buf);          printf("Dumping %s\n", file);
     }      }
     rdf = fopen(buf, "w");  
     if (rdf == NULL) {      /*
         fprintf(stderr, "Couldn't save to file %s: %s\n",       * build the RDF document tree
                 buf, strerror(errno));       * Note : the order is not important but following the rpmData
         return;       *        structure order is easier to check.
     }       */
     fprintf(rdf, "<?XML version=\"1.0\">\n");      rdf = rdfNewSchema();
     fprintf(rdf, "<?namespace href =\"http://www.w3.org/TR/WD-rdf-syntax#/\" AS = \"RDF\"?>\n");      rpmNs = rdfNewNamespace(rdf, "http://www.rpm.org/", "RPM");
     fprintf(rdf, "<?namespace href =\"http://www.rpm.org/\" AS = \"RPM\"?>\n");  
     fprintf(rdf, "<RDF:RDF>\n");  
     fprintf(rdf, "<RDF:Description RDF:HREF=\"");  
     if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0')) {      if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0')) {
         if (dir->mirrors[0] != NULL)          if (dir->mirrors[0] != NULL)
             fprintf(rdf, "%s/%s/%s\">\n",              sprintf(buf, "%s/%s/%s",
                 dir->mirrors[0], rpm->subdir, rpm->filename);                  dir->mirrors[0], rpm->subdir, rpm->filename);
         else          else
             fprintf(rdf, "%s/%s/%s\">\n",              sprintf(buf, "%s/%s/%s",
                 dir->ftp, rpm->subdir, rpm->filename);                  dir->ftp, rpm->subdir, rpm->filename);
     } else {      } else {
         if (dir->mirrors[0] != NULL)          if (dir->mirrors[0] != NULL)
             fprintf(rdf, "%s/%s\">\n",              sprintf(buf, "%s/%s",
                 dir->mirrors[0], rpm->filename);                  dir->mirrors[0], rpm->filename);
         else          else
             fprintf(rdf, "%s/%s\">\n",              sprintf(buf, "%s/%s",
                 dir->ftp, rpm->filename);                  dir->ftp, rpm->filename);
     }      }
     fprintf(rdf, "<RPM:Name>%s</RPM:Name>\n", rpm->name);      desc = rdfAddDescription(rdf, NULL, buf);
     fprintf(rdf, "<RPM:Version>%s</RPM:Version>\n", rpm->version);  
     fprintf(rdf, "<RPM:Release>%s</RPM:Release>\n", rpm->release);      rdfSetValue(desc, "Name", rpmNs, rpm->name);
       rdfSetValue(desc, "Version", rpmNs, rpm->version);
       rdfSetValue(desc, "Release", rpmNs, rpm->release);
       if (rpm->url)
           rdfSetValue(desc, "URL", rpmNs, rpm->url);
       if (rpm->arch)
           rdfSetValue(desc, "Arch", rpmNs, rpm->arch);
       if (rpm->os)
           rdfSetValue(desc, "Os", rpmNs, rpm->os);
     if (rpm->distribution)      if (rpm->distribution)
         fprintf(rdf, "<RPM:Distribution>%s</RPM:Distribution>\n",          rdfSetValue(desc, "Distribution", rpmNs, rpm->distribution);
                 rpm->distribution);  
     if (rpm->vendor)      if (rpm->vendor)
         fprintf(rdf, "<RPM:Vendor>%s</RPM:Vendor>\n", rpm->vendor);          rdfSetValue(desc, "Vendor", rpmNs, rpm->vendor);
     fprintf(rdf, "<RPM:Size>%d</RPM:Size>\n", rpm->size);      if (rpm->packager)
     if (rpm->url)          rdfSetValue(desc, "Packager", rpmNs, rpm->packager);
         fprintf(rdf, "<RPM:URL>%s</RPM:URL>\n", rpm->url);      if (rpm->group)
           rdfSetValue(desc, "Group", rpmNs, rpm->group);
       if (rpm->summary)
           rdfSetValue(desc, "Summary", rpmNs, rpm->summary);
       if (rpm->description)
           rdfSetValue(desc, "Description", rpmNs, rpm->description);
       if (rpm->copyright)
           rdfSetValue(desc, "Copyright", rpmNs, rpm->copyright);
       if (rpm->changelog)
           rdfSetValue(desc, "Changelog", rpmNs, rpm->changelog);
       if (rpm->srcrpm) {
           if (dir->ftpsrc) {
               sprintf(buf, "%s/%s", dir->ftpsrc, rpm->srcrpm);
               rdfSetValue(desc, "Sources", rpmNs, buf);
           } else {
               rdfSetValue(desc, "Sources", rpmNs, rpm->srcrpm);
           }
       }
     tstruct = localtime(&(rpm->date));      tstruct = localtime(&(rpm->date));
 #ifdef HAVE_STRFTIME  #ifdef HAVE_STRFTIME
     strftime(buf, sizeof(buf) - 1, "%c", tstruct);      strftime(buf, sizeof(buf) - 1, "%c", tstruct);
 #else  #else
 #error "no strftime, please check !"  #error "no strftime, please check !"
 #endif  #endif
     fprintf(rdf, "<RPM:BuildDate>%s</RPM:BuildDate>\n", buf);      rdfSetValue(desc, "BuildDate", rpmNs, buf);
       sprintf(buf, "%d", rpm->size);
       rdfSetValue(desc, "Size", rpmNs, buf);
     if (rpm->host)      if (rpm->host)
         fprintf(rdf, "<RPM:BuildHost>%s</RPM:BuildHost>\n", rpm->host);          rdfSetValue(desc, "BuildHost", rpmNs, rpm->host);
     if (rpm->group)  
         fprintf(rdf, "<RPM:Group>%s</RPM:Group>\n", rpm->group);  
     if (rpm->packager)  
         fprintf(rdf, "<RPM:Packager>%s</RPM:Packager>\n", rpm->packager);  
     if (dir->ftpsrc) {  
         fprintf(rdf, "<RPM:Sources>%s/%s</RPM:Sources>\n",  
                 dir->ftpsrc, rpm->srcrpm);  
     } else {  
         fprintf(rdf, "<RPM:Sources>%s</RPM:Sources>\n",  
                 rpm->srcrpm);  
     }  
     if (rpm->summary)  
         fprintf(rdf, "<RPM:Summary>%s</RPM:Summary>\n", rpm->summary);  
     if (rpm->description)  
         fprintf(rdf, "<RPM:Description>\n%s\n</RPM:Description>\n",  
                 rpm->description);  
     if (rpm->copyright)  
         fprintf(rdf, "<RPM:Copyright>%s</RPM:Copyright>\n",  
                 rpm->copyright);  
     if (rpm->nb_resources > 0) {      if (rpm->nb_resources > 0) {
         fprintf(rdf, "<RPM:Provides>\n");          bag = rdfBagCreate(rdf, desc, "Provides", rpmNs);
         fprintf(rdf, "<RDF:Bag>\n");  
         for (i = 0;i < rpm->nb_resources;i++) {          for (i = 0;i < rpm->nb_resources;i++) {
             fprintf(rdf, "<RPM:Resource>%s</RPM:Resource>\n",              rdfBagAddValue(bag, "Resource", rpmNs,
                     rpm->resources[i]->name);                             rpm->resources[i]->name, NULL);
         }          }
         fprintf(rdf, "</RDF:Bag>\n");  
         fprintf(rdf, "</RPM:Provides>\n");  
     }      }
     if (rpm->nb_requires > 0) {      if (rpm->nb_requires > 0) {
         fprintf(rdf, "<RPM:Requires>\n");          bag = rdfBagCreate(rdf, desc, "Requires", rpmNs);
         fprintf(rdf, "<RDF:Bag>\n");  
         for (i = 0;i < rpm->nb_requires;i++) {          for (i = 0;i < rpm->nb_requires;i++) {
             fprintf(rdf, "<RPM:Resource>%s</RPM:Resource>\n",              rdfBagAddValue(bag, "Resource", rpmNs,
                     rpm->requires[i]->name);                             rpm->requires[i]->name, NULL);
         }          }
         fprintf(rdf, "</RDF:Bag>\n");  
         fprintf(rdf, "</RPM:Requires>\n");  
     }      }
     if (rpm->filelist)      if (rpm->filelist)
         fprintf(rdf, "<RPM:Files>\n%s\n</RPM:Files>\n", rpm->filelist);          rdfSetValue(desc, "Files", rpmNs, rpm->filelist);
     fprintf(rdf, "</RDF:Description>\n");  
     fprintf(rdf, "</RDF:RDF>\n");      /*
     fclose(rdf);       * Save the RDF file and cleanup the tree.
        */
       rdfWrite(rdf, file);
       rdfDestroySchema(rdf);
 }  }
   

Removed from v.1.3  
changed lines
  Added in v.1.4


Webmaster