[JAVA] Notiz zum Parsen des RDF / XML-Datenmodells durch den SAX-Parser

Beachten Sie, dass es schwierig war, den SAX-Parser für RDF / XML (Implementierung des Ereignishandlers) zu implementieren. Es ist schwer, also benutze die Bibliothek so oft wie möglich. Ich denke, ich kann die meisten Dinge mit rdf4j machen.

Da es in Zukunft ein Memo für mich ist (wenn ich verschiedene Dinge vergesse), ist es ein Intro, das Impressionen enthält. Der eigentliche Quellcode ist nicht aufgeführt. Als Hinweis beim erneuten Implementieren oder Entschlüsseln der Implementierung.

Intro

Was ist RDF?

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

--Datenstruktur, dargestellt durch einen gerichteten Graphen.

RDF/XML

Objekt ist ein Knotenelement.xml


<rdf:Description rdf:about="Betreff-Knoten-ID">
  <Predicate>
    <rdf:Description rdf:about="Objektknoten-ID">
    </rdf:Description>
  </Predicate>
</rdf:Description>

Objekt ist ein Eigenschaftselement.xml


<rdf:Description rdf:about="Betreff-Knoten-ID">
  <Predicate>
Objekteigenschaftswert
  </Predicate>
</rdf:Description>

――Es gibt jedoch viele Abkürzungsregeln und es ist schwierig zu analysieren.

Probleme beim Umgang mit Programmen

Daher ist es unpraktisch, XML so zu verwenden, wie es ist, und es ist erforderlich, es in Form einer Menge von "(Knotenelement) × (Bogen) × (Knotenelement oder Eigenschaftselement)" neu zu schreiben.

Punkte beim Schreiben mit SAX-Parser

Deshalb habe ich es von Anfang an mit dem SAX-Parser gelesen und den bestätigten Wert von "(Knotenelement) × (Bogen) × (Knotenelement oder Eigenschaftselement)" nach außen (Datei oder DB) geschrieben. Die Punkte für die Implementierung des SAX-Parsers (Ereignishandlers) lauten wie folgt.

Es gibt {Root-, S1-, S2-, Collection-, Resource-, Literal-} Zustände (S1 wurde nicht als Prädikat analysiert, S2 wurde als Prädikat analysiert), und der Zustand ändert sich jedes Mal, wenn das Element geöffnet wird. Der aktuelle Status wird für jeden Statusübergang auf den Stapel geladen. Wenn das Element geschlossen ist, springt es vom Stapel und kehrt zurück. Der Zustandsübergang beim Öffnen des Elements ist wie folgt.

Root  (+Beliebiges Element)|-> S1
S1 (+ rdf:parseType="Collection|Resource|Literal"Element)|-> Collection|Resource|Literal 
S1 (+ rdf:Ressource einschließen=Element des Knotenelements)|-> S1
S1 (+ rdf:Elemente, die keine Ressourcen enthalten)|-> S2
S2 (+Beliebiges Element)|-> S1
Resource (+ rdf:parseType="Collection|Resource|Literal"Element)|-> Collection|Resource|Literal 
Resource (+ rdf:Ressource einschließen=Element des Knotenelements)|-> S1
Resource (+ rdf:Elemente, die keine Ressourcen enthalten)|-> S2
Collection (+Beliebiges Element)|-> S2

Wird sein.

Wenn Sie danach den zu lesenden Satz (Betreff oder Betreff × Prädikat) und den obigen Status auf den Stapel legen und ihn beim Drücken oder Knallen lesen, können Sie ihn mit SAX richtig analysieren.

Recommended Posts

Notiz zum Parsen des RDF / XML-Datenmodells durch den SAX-Parser
[Rails] Temporäre Aufbewahrung von Daten pro Sitzung
Der Inhalt der von CarrierWave gespeicherten Daten.