2009-03-20 9 views
0

J'essaie d'utiliser la négociation de contenu pour donner à la fois un HTML et une représentation RDF/XML d'une ressource sur un serveur HTTP. Du côté serveur, cela fonctionne, c'est-à-direComment télécharger un fichier avec un type de contenu non HTML depuis un navigateur?

curl -H "Accept: application/rdf+xml" http://localhost:8182/ontologies/1 

récupérera la version correcte. Je peux également faire la même chose avec JavaScript/Dojo:

function downloadOntologyRDF(ontologyId) { 
    dojo.xhrGet({ 
     url:"${baseUrl}/ontologies/" + ontologyId, 
     headers: {"Accept": "application/rdf+xml"}, 
     timeout: 5000, 
     load: function(response, ioArgs) { 
      var preNode = document.createElement("pre"); 
      preNode.appendChild(document.createTextNode(response)); 
      var foo = new dijit.Dialog({ 
       title: "RDF", 
       content: preNode, 
       style: "overflow: auto;" 
      }); 
      foo.show(); 
      return response; 
     }, 
     error: function(response, ioArgs) { 
      alert("Retrieving the RDF version failed: " + response); 
      return response; 
     } 
    }); 
} 

qui affiche le résultat dans une boîte de dialogue contextuelle. Le point où je suis coincé offre un moyen à l'utilisateur de télécharger cette version. Je voudrais avoir un lien sur la page qui affiche le RDF comme une page dans le navigateur ou ouvre directement la boîte de dialogue de sauvegarde. Est-ce possible sans recourir à des paramètres de requête ou à d'autres astuces?

+0

Je soupçonne qu'il n'y a pas un moyen de mettre à part les choses côté serveur comme les paramètres de requête – cobbal

Répondre

0

Comme cobbal mentionne - puisque vous ne pouvez pas définir en-tête Accept dans l'URL elle-même, vous devriez avoir le mécanisme de négociation de contenu supplémentaire. Certains cadres permettent un type de contenu à être mis en forme

http://example.com/resource;format 

Ayant la format à la fin de l'URL, séparés par des virgules. Ensuite, lors du traitement de la requête, il analyse la partie format.

Dans votre cas, il pourrait être quelque chose comme

http://localhost:8182/ontologies/1;rdf 

au serveur rdf, et pas de format spécifié pour servir ce qui est dans vos têtes d'acceptation.

+0

Cela se classe comme "paramètres de requête et autres astuces" pour moi ;-) Mais permettez-moi d'accepter cette réponse comme une version longue de "non". –

+0

au moment de l'écriture Je pensais que le point-virgule est une bonne idée, mais il apporte plus de problèmes et pas beaucoup d'élégance dans l'entreprise - vous devez l'analyser ou configurer dans la table de routage et il devient méchant rapidement. pour moi à la fin je suis allé avec un paramètre localhost: 8182/ontologies/1? format = rdf –

0

Cette page explique comment configurer une page ASPX qui affichera le RDF dans le navigateur. Cela peut vous aider. Bien que je ne peux pas être sûr parce que vous avez spécifié ce que vous exécutez sur votre serveur.

Building an RSS feed made simple

+0

J'utilise Java/Restlets, mais cela n'a pas d'importance: le côté serveur fait déjà les choses comme les exemples curl/JS montrer. Les flux RSS sont considérés comme des ressources séparées avec leur propre URL, ce que j'essaie de faire est d'utiliser la négociation de contenu pour récupérer une variante différente de la même ressource. –

Questions connexes