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
https://ja.wikipedia.org/wiki/Resource_Description_Framework
<Sujet, Prédicat, Objet>
--Les sommets sont des "éléments de nœud" (bien que le nom prête à confusion, dans cet article, les nœuds en théorie des graphes sont appelés "sommets". Ce qu'on appelle "nœud" fait référence aux "éléments de nœud"). Il existe un "élément de propriété".(élément de nœud) × (arc) × (élément de nœud ou élément de propriété)
.RDF/XML
(élément nœud) × (arc) × (élément nœud ou élément de propriété)
exprimé en 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.
Hoge / Fuga / Piyo
(/ département [@ nom du département = A] / employé [@ nom = B] / numéro de téléphone / texte ()
) Vous pouvez obtenir quelque chose comme ça, mais il ne sera pas arboré en XML. , Hoge ID ⇒ Fuga ID est récupéré, Fuga ID ⇒ Piyo value est récupéré, et ainsi de suite. Si la quantité de données est importante, à moins que vous ne créiez un index (soit une arborescence de tri, soit une table de hachage) avec l'ID de l'élément de noeud afin qu'il puisse être recherché, il analysera toujours tout et ce sera lent.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é)
.
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.