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.
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.
Hoge / Fuga / Piyo
(/ Abteilung [@ Abteilungsname = A] / Mitarbeiter [@ Name = B] / Telefonnummer / Text ()
) Sie können so etwas bekommen, aber es wird nicht als XML strukturiert. Es ist notwendig, einen Prozess wie das Abrufen der ID von Hoge ⇒ der ID von Fuga und das Abrufen des Werts der ID von Fuga ⇒ Piyo durchzuführen. Wenn die Datenmenge groß ist, scannt es immer alle und ist langsam, es sei denn, Sie erstellen einen Index (entweder einen Sortierbaum oder eine Hash-Tabelle) mit der ID des Knotenelements, damit es durchsucht werden kann.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.
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.
rdf:parseType="Collection", rdf:parseType="Literal", rdf:parseType="Resource"
--2 Muster, sofern nicht anders angegebenEs 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.