Journal Coloration syntaxique rdf/n3 pour katepart

Posté par  . Licence CC By‑SA.
16
11
nov.
2012

Bonsoir à tous,

Il y a peu, je me "plaignais" de l'absence de coloration syntaxique pour RDF/N3 dans kate.
Je me suis donc lancé et je souhaitais partager ce petit morceau de "code". Ça donne ça :

Exemple de coloration syntaxique

En deux mots (je suis débutant dans le domaine), RDF/N3 (pour Notation3) est une syntaxe très compacte permettant d'écrire des modèles RDF. Ces modèles sont en fait des suites de triplets (sujet, prédicat, objet), permettant de décrire tout et n'importe quoi et font partie des technologies clef du Web sémantique.

Ce premier jet de coloration syntaxique reconnaît les classes et propriétés des modèles rdf, rdfs (schéma) et OWL comme des commandes "prédéfinies" et reconnaît plusieurs espaces de nommages souvent utilisés dans le monde du web sémantique: dc, doap et foaf.

Ces espaces de nommage sont codés en dur dans le fichier de syntaxe xml, en attendant de trouver mieux.
Pour générer facilement de nouveaux espaces de nommages pour ceux qui souhaiteraient ajouter leur propres définitions, vous pouvez utiliser ce mini script écrit vite fait (mal fait ?) :

 from rdflib import Graph
rdfs = [
  ('rdfs','http://www.w3.org/2000/01/rdf-schema#', None),
  ('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',None),
  ('owl', 'http://www.w3.org/2002/07/owl#', 'n3'),
  ('foaf', 'http://xmlns.com/foaf/0.1/', None),
  ('doap', 'http://usefulinc.com/ns/doap#', None),
  ]

for prefix, rdf, fmt in rdfs :
  subjects = set([])
  g = Graph()
  g.parse(rdf, format=fmt)
  for subject in g.subjects() :
    subjects.add(subject)

  for subject in sorted(subjects) :
    if str(rdf) == str(subject) : continue
    term = subject.replace(rdf, '')
    if term.startswith('http') : # ignore other namespaces
      continue
    print '      <item>%s:%s</item>' % (prefix, term)

En espérant que ce sera utile…
J'attends aussi vos commentaires et suggestions (syntaxe kate dynamique, oubli de mots clefs, etc.).

Le lien : les sources sur gitorious

PS : j'ai hésité à poster cela dans les forums, n'hésitez pas à me le dire si c'était la chose à faire.

  • # Concision pythonique

    Posté par  (site web personnel) . Évalué à 8.

    "set([])" peut être écrit simplement "set()". En fait, pour aller plus loin :

    [...]
      subjects = set([])
      g = Graph()
      g.parse(rdf, format=fmt)
      for subject in g.subjects() :
        subjects.add(subject)
    
      for subject in sorted(subjects) :
      [...]
    
    

    pourrait être plus court:

    [...]
      g = Graph()
      g.parse(rdf, format=fmt)
    
      for subject in sorted(set(g.subjects())) :
      [...]
    
    
    • [^] # Re: Concision pythonique

      Posté par  . Évalué à 1.

      Merci pour la remarque. C'est effectivement plus concis, je n'y avais même pas pensé.

  • # Github → Gitorious

    Posté par  . Évalué à 3.

    Le lien est mauvais.

    "Never trust a statistic you haven't faked yourself."

    • [^] # Re: Github → Gitorious

      Posté par  . Évalué à 2.

      Ahaha ! Il s'agit vraiment d'une erreur. Vu le lien, j'imagine que je ne suis pas le premier ;) Merci pour la correction.
      Si un modérateur veut bien corriger …

    • [^] # Re: Github → Gitorious

      Posté par  . Évalué à 4.

      Corriger, merci.

      « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.