Index: lib/Makefile.am =================================================================== RCS file: /cvsroot/cashew-s-editor/cashews/lib/Makefile.am,v retrieving revision 1.4 diff -u -3 -p -u -r1.4 Makefile.am --- lib/Makefile.am 9 Apr 2005 01:29:47 -0000 1.4 +++ lib/Makefile.am 9 Apr 2005 22:05:46 -0000 @@ -52,13 +52,13 @@ JAVAH = $(USER_JAVAH) -jni -classpath .: if INSTALL_GLIBJ_ZIP if FOUND_ECLIPSE -pkgdata_DATA = xml.jar rdf.jar owls.jar eclipse.jar +pkgdata_DATA = commons.jar xml.jar rdf.jar owls.jar eclipse.jar install-data-local: genclasses compile-classes eclipse.jar mkdir $(INSTALLDIR) cp eclipse.jar $(INSTALLDIR) cp $(top_srcdir)/resource/plugin.xml $(INSTALLDIR) else -pkgdata_DATA = xml.jar rdf.jar owls.jar +pkgdata_DATA = commons.jar xml.jar rdf.jar owls.jar endif endif # INSTALL_GLIBJ_ZIP @@ -79,6 +79,12 @@ endif # INSTALL_CLASS_FILES .PHONY: genclasses +commons.jar: classes compile-classes # resources + if test "$(JAR)" != ""; then rm commons.jar; $(JAR) cf commons.jar `find nongnu -path '*commons\/*' -name '*class'` > /dev/null; fi +if FOUND_GCJ +$(GCJ) -shared -fjni -findirect-dispatch -o commons.jar.so commons.jar +endif + xml.jar: classes compile-classes # resources if test "$(JAR)" != ""; then rm xml.jar; $(JAR) cf xml.jar `find nongnu -path '*xml\/*' -name '*class'` > /dev/null; fi if FOUND_GCJ @@ -93,17 +99,17 @@ endif owls.jar: classes compile-classes # resources if test "$(JAR)" != ""; then rm owls.jar; $(JAR) cf owls.jar `find nongnu -path '*owls*' -name '*class'` > /dev/null; fi -#if FOUND GCJ -#$(GCJ) -shared -fjni -findirect-dispatch -o owls.jar.so owls.jar -#endif +if FOUND_GCJ +$(GCJ) -shared -fjni -findirect-dispatch -o owls.jar.so owls.jar +endif if FOUND_ECLIPSE eclipse.jar: classes compile-classes # resources if test "$(JAR)" != ""; then rm eclipse.jar; $(JAR) cf eclipse.jar `find nongnu -path '*eclipse*' -name '*class'` > /dev/null; fi -#if FOUND GCJ -#$(GCJ) -shared -fjni -findirect-dispatch -o eclipse.jar.so eclipse.jar -#endif +if FOUND_GCJ +$(GCJ) -shared -fjni -findirect-dispatch -o eclipse.jar.so eclipse.jar +endif endif Index: src/nongnu/cashews/commons/Pair.java =================================================================== RCS file: /cvsroot/cashew-s-editor/cashews/src/nongnu/cashews/commons/Pair.java,v retrieving revision 1.1 diff -u -3 -p -u -r1.1 Pair.java --- src/nongnu/cashews/commons/Pair.java 9 Apr 2005 01:29:47 -0000 1.1 +++ src/nongnu/cashews/commons/Pair.java 9 Apr 2005 22:05:46 -0000 @@ -92,4 +92,37 @@ public class Pair this.right = right; } + /** + * Returns true if the supplied object is also a pair, with equivalent + * left and right-hand values. + * + * @param object the object to compare. + */ + public boolean equals(Object obj) + { + if (obj == null) + return false; + if (obj == this) + return true; + if (obj.getClass() == getClass()) + { + Pair pair = (Pair) obj; + return (pair.getLeft().equals(left) && + pair.getRight().equals(right)); + } + return false; + } + + /** + * Return a hashcode composed of the hashcodes of the two values. + * + * @return a hashcode for the pair. + */ + public int hashCode() + { + return super.hashCode() + + 13 * left.hashCode() + + 17 * right.hashCode(); + } + } Index: src/nongnu/cashews/rdf/XMLParser.java =================================================================== RCS file: /cvsroot/cashew-s-editor/cashews/src/nongnu/cashews/rdf/XMLParser.java,v retrieving revision 1.7 diff -u -3 -p -u -r1.7 XMLParser.java --- src/nongnu/cashews/rdf/XMLParser.java 9 Apr 2005 01:29:47 -0000 1.7 +++ src/nongnu/cashews/rdf/XMLParser.java 9 Apr 2005 22:05:46 -0000 @@ -27,11 +27,14 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; +import java.util.HashSet; +import java.util.Set; import java.util.logging.ConsoleHandler; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.Logger; +import nongnu.cashews.commons.Pair; import nongnu.cashews.xml.XmlBaseHandler; import org.xml.sax.Attributes; @@ -231,6 +234,12 @@ public class XMLParser private Type type; /** + * The set of ids used in the RDF document. RDF IDs must be unique + * within a particular base URI. + */ + private Set> ids; + + /** * Constructs a new RDFHandler, using the specified * handler for log messages. * @@ -256,6 +265,10 @@ public class XMLParser inPredicate = false; predicateURI = null; type = null; + subject = null; + predicate = null; + object = null; + ids = new HashSet>(); } /** @@ -295,16 +308,31 @@ public class XMLParser subject = parseRDFURI(value); else { - /* Check for blank node subject */ - value = attributes.getValue(RDF_NAMESPACE, "nodeID"); + value = attributes.getValue(RDF_NAMESPACE, "ID"); if (value != null) - subject = new Blank(value); + { + boolean added = + ids.add(new Pair(getBaseURI(), value)); + if (added) + subject = new + RDFURI(getBaseURI().resolve("#" + value)); + } else - rdfLogger.warning("No subject found in RDF " + - "description."); + { + /* Check for blank node subject */ + value = attributes.getValue(RDF_NAMESPACE, "nodeID"); + if (value != null) + subject = new Blank(value); + } + } + if (subject == null) + rdfLogger.severe("No subject found in RDF " + + "description."); + else + { + inSubject = true; + rdfLogger.fine("Created subject: " + subject); } - inSubject = true; - rdfLogger.fine("Created subject: " + subject); } else rdfLogger.warning("Invalid use of RDF namespace: " + uri +