Hallo,
ich hab mir gerade ein kleines simples Problem, welches mir ein bisschen den Nerv raubt. Ich habe ein XMLDocument mit einer DTD:
[code]
<!DOCTYPE rdf:RDF [
<!ENTITY www "http://www.SPAM_Ontology.owl#" >
<!ENTITY bfo "http://www.ifomis.org/bfo/1.1#" >
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY dc "http://purl.org/dc/elements/1.1/" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY owl2xml "http://www.w3.org/2006/12/owl2-xml#" >
<!ENTITY snap "http://www.ifomis.org/bfo/1.1/snap#" >
<!ENTITY span "http://www.ifomis.org/bfo/1.1/span#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
<!ENTITY SPAM_Ontology_01 "http://www.SPAM_Ontology.owl/SPAM_Ontology_01#" >
<!ENTITY extending "http://www.semanticweb.org/ontologies/2 ... ending.owl#" >
]>
[/code]
Ich möchte einfach nur an die Entity-Definitionen heran, das muss doch gehen!?
Ich versuche es mit document.doctype().entities()
Diese NodeMap hat aber leider die Grösse 0. Bitte sagt mir es gibt eine Lösung, ich möchte nicht die DTD von Hand einlesen oder eine externe Bibliothek oder einen SAX Parser... brrr. Sowas simples muss doch klappen. Danke Euch!!!
Schöne Grüsse,
Frederick
XML DTD einlesen mit DOM ?
-
mccrashman
- Beiträge: 6
- Registriert: 7. September 2010 08:46
- Wohnort: Wietzen
- Kontaktdaten:
Also ich stehe seit einer Woche auch vor diesem Problem.
Ich gehe die Sache wie immer an, sprich ich hole mir mit "firstChild" den ersten Node und bekomme dann alle Entity Referenzen. Jedoch muss ich an die Entity Definitionen heran um dann an die dahinter verborgenen XML Dateien heran zu kommen.
Mein betreffender Quell sieht so aus:
Ich gehe die Sache wie immer an, sprich ich hole mir mit "firstChild" den ersten Node und bekomme dann alle Entity Referenzen. Jedoch muss ich an die Entity Definitionen heran um dann an die dahinter verborgenen XML Dateien heran zu kommen.
Mein betreffender Quell sieht so aus:
Code: Alles auswählen
if(bpackFileOpen)
{
QDomElement packElem = packDom.documentElement();
QDomNode n = packElem.firstChild();
while(!n.isNull())
{
QDomElement e = n.toElement(); // try to convert the node to an element.
if(!e.isNull())
{
if(e.hasAttribute(packDeclName) && (e.tagName() == packDecl))
{
items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(e.attribute(packDeclName, cNoTargetName))));
}
}else{
qtemp = n.nodeName();
bool b;
QDomEntityReference r;
if(n.isEntityReference())
{
r = n.toEntityReference();
}
}
n = n.nextSibling();
}
-
mccrashman
- Beiträge: 6
- Registriert: 7. September 2010 08:46
- Wohnort: Wietzen
- Kontaktdaten:
Die Lösung meines Rätzels
Gut, ich habe leider keine Anleitung dafür gefunden, aber ich habe mir etwas zusammen gebastelt.
Im Prinzip ist es fanz einfach, wenn man weiß, dass das Document Entity's enthält, muss man sich erst mal die NamedNodeMap des Dokuments holen. Diese enthält alle im Dokument verfügbaren Entity's. Jetzt kann man beim durchlaufen aller Node's im Dokument, nach diversen Sicherheitsüberprüfungen, diese EntityReferenzen auflösen.
Im Prinzip ist es fanz einfach, wenn man weiß, dass das Document Entity's enthält, muss man sich erst mal die NamedNodeMap des Dokuments holen. Diese enthält alle im Dokument verfügbaren Entity's. Jetzt kann man beim durchlaufen aller Node's im Dokument, nach diversen Sicherheitsüberprüfungen, diese EntityReferenzen auflösen.
Code: Alles auswählen
QString qtemp;
if(bpackFileOpen)
{
QDomElement packElem = packDom.documentElement();
QDomNode n = packElem.firstChild();
QDomDocumentType qDomType = packDom.doctype();
QDomNamedNodeMap qNodeMap = qDomType.entities();
while(!n.isNull())
{
QDomElement e = n.toElement(); // try to convert the node to an element.
if(e.isNull()) // Node is not an Element
{
qtemp = n.nodeName();
QDomEntityReference qEntityReference;
QDomNode qEntityNode;
QDomEntity qEntity;
if(n.isEntityReference()) // Node is an EntityReference -> resolve it
{
qEntityReference = n.toEntityReference();
if(qNodeMap.contains(qtemp))
{
qEntityNode = qNodeMap.namedItem(qtemp);
if(qEntityNode.isEntity())
{
qEntity = qEntityNode.toEntity();
qtemp = qEntity.systemId();
}
}
}
}
n = n.nextSibling();
}
}