[JAVA] Mémo d'analyse par l'analyseur SAX du modèle de données RDF / XML

Notez qu'il était difficile d'implémenter l'analyseur SAX pour RDF / XML (implémentation du gestionnaire d'événements). C'est difficile, alors utilisez la bibliothèque autant que possible. Je pense que je peux faire la plupart des choses avec rdf4j.

Puisqu'il s'agit d'un mémo pour moi dans le futur (lorsque j'oublie diverses choses), c'est une intro qui comprend des poèmes d'impression. Le code source réel n'est pas répertorié. Comme indice lors de la réimplémentation ou du déchiffrement de l'implémentation

Intro

Qu'est-ce que RDF

https://ja.wikipedia.org/wiki/Resource_Description_Framework

RDF/XML

L'objet est un élément nœud.xml


<rdf:Description rdf:about="ID du nœud du sujet">
  <Predicate>
    <rdf:Description rdf:about="ID de nœud d'objet">
    </rdf:Description>
  </Predicate>
</rdf:Description>

L'objet est un élément de propriété.xml


<rdf:Description rdf:about="ID du nœud du sujet">
  <Predicate>
Valeur de la propriété de l'objet
  </Predicate>
</rdf:Description>

—— Cependant, il existe de nombreuses règles d'abréviation et il est difficile de les analyser.

Problèmes lors de la gestion des programmes

Par conséquent, il n'est pas pratique d'utiliser XML tel quel, et il est nécessaire de le réécrire sous la forme d'un ensemble de (élément de nœud) × (arc) × (élément de nœud ou élément de propriété).

Points lors de l'écriture avec l'analyseur SAX

C'est pourquoi je l'ai lu depuis le début avec l'analyseur SAX et j'écris la valeur confirmée de (élément de nœud) × (arc) × (élément de nœud ou élément de propriété) à l'extérieur (fichier ou DB). Les points d'implémentation de l'analyseur SAX (gestionnaire d'événements) sont les suivants.

--Il est nécessaire de donner un état à l'analyseur et de changer l'état en fonction du mode. - rdf:parseType="Collection", rdf:parseType="Literal", rdf:parseType="Resource" --2 modèles sauf indication contraire

Il existe des états {Racine, S1, S2, Collection, Ressource, Littéral} (S1 n'a pas été analysé Prédicat, S2 a été analysé Prédicat), et l'état change à chaque fois que l'élément est ouvert. L'état actuel est chargé sur la pile pour chaque transition d'état. Si l'élément est fermé, il sort de la pile et revient. La transition d'état lorsque l'élément est ouvert est la suivante.

Root  (+Tout élément)|-> S1
S1 (+ rdf:parseType="Collection|Resource|Literal"Élément)|-> Collection|Resource|Literal 
S1 (+ rdf:Y compris la ressource=Élément de l'élément node)|-> S1
S1 (+ rdf:Éléments qui ne contiennent pas de ressources)|-> S2
S2 (+Tout élément)|-> S1
Resource (+ rdf:parseType="Collection|Resource|Literal"Élément)|-> Collection|Resource|Literal 
Resource (+ rdf:Y compris la ressource=Élément de l'élément node)|-> S1
Resource (+ rdf:Éléments qui ne contiennent pas de ressources)|-> S2
Collection (+Tout élément)|-> S2

Sera.

Après cela, si vous mettez la phrase à lire (Sujet ou Sujet × Prédicat) et l'état ci-dessus sur la pile et que vous la lisez en poussant ou en sautant, vous pouvez l'analyser correctement avec SAX.

Recommended Posts

Mémo d'analyse par l'analyseur SAX du modèle de données RDF / XML
[Rails] Conservation temporaire des données par session
Le contenu des données enregistrées par CarrierWave.