<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -23,7 +23,8 @@
 
 (defsystem n3
   :version &quot;0.1.0&quot;
-  :depends-on (yacc lexer cl-ppcre puri rdf-store cl-interpol)
+  :depends-on (yacc lexer cl-ppcre puri rdf-utils 
+		    cl-rdfxml cl-interpol)
   :components ((:file &quot;package&quot;)
 	       (:file &quot;lexer&quot; :depends-on (&quot;package&quot;))
 	       (:file &quot;parser&quot; :depends-on (&quot;lexer&quot;))))</diff>
      <filename>n3.asd</filename>
    </modified>
    <modified>
      <diff>@@ -20,5 +20,6 @@
   (:export :parse-n3)
   (:use :cl :yacc :lexer
 	:cl-ppcre :puri
-	:rdf-store
+	:rdf-utils
+	:cl-rdfxml
 	:cl-interpol))
\ No newline at end of file</diff>
      <filename>package.lisp</filename>
    </modified>
    <modified>
      <diff>@@ -18,8 +18,6 @@
 
 (in-package :n3)
 
-(defparameter *parse-base* nil)
-
 (defparameter unicode-scanner
   (create-scanner &quot;(?:\\\\u([0-9A-Fa-f]{4}))|(?:\\\\U00([0-9A-Fa-f]{6}))&quot;))
 
@@ -40,15 +38,6 @@
   (regex-replace-all unicode-scanner string
 		     #'resolve-unicode))
 
-(defun maybe-use-base (iri)
-  (let ((uri (uri iri)))
-    (if (and *parse-base*
-	     (or (eq #\# (aref iri 0)) ; hack :(
-		 (eq (first (uri-parsed-path uri))
-		     :relative)))
-	(concatenate 'string *parse-base* iri)
-	iri)))
-
 (defun record-prefix (prefix uri)
   (declare (type string prefix uri))
   (register-namespace (subseq prefix 0 (- (length prefix) 1))
@@ -58,8 +47,8 @@
 
 (let ((*readtable* (copy-readtable nil)))
   (define-parser n3-parser
-    (:start-symbol statements_optional)
-
+      (:start-symbol statements_optional)
+  
     (:terminals
      (COMMA TRUE FALSE BASE KEYWORDS K-PREFIX LANG TYPE
 	    FOR-SOME OPEN-PAREN CLOSE-PAREN OPEN-BRACE
@@ -103,7 +92,7 @@
      (BASE EXPLICITURI
 	   #'(lambda (base uri)
 	       (declare (ignore base))
-	       (setf *parse-base* uri)
+	       (setf rdf-utils::*parse-base* uri)
 	       nil))
      (KEYWORDS barename_csl)
      (K-PREFIX PREFIX EXPLICITURI
@@ -132,13 +121,24 @@
     ;;            | qname
     (symbol
      (EXPLICITURI
-      #'(lambda (uri)
-	  (intern-uri
-	   (parse-uri (maybe-use-base uri)))))
+      #'(lambda (uri) 
+	  (let ((uri* (parse-uri uri)))
+	    (intern-uri
+	     (uri
+	      (cond ((eq #\# (aref uri 0))
+		     (concatenate 'string rdf-utils::*parse-base* uri))
+		    ((eq (first (uri-parsed-path uri*))
+			 :relative)
+		     (merge-uris (parse-uri uri)
+				 (parse-uri *parse-base*)))
+		    (t uri)))))))
+
      (QNAME
       #'(lambda (name)
-	  (intern-uri
-	   (uri (maybe-use-base (expand-qname name)))))))
+	  (let ((expanded (expand-qname name)))
+	    (if (typep expanded 'string)
+		(intern-uri (uri expanded))
+		expanded)))))
 
     ;; symbol_csl ::= | symbol symbol_csl_tail
     ;;                | void
@@ -223,7 +223,7 @@
 		 #'(lambda (open collection close)
 		     (declare (ignore open close))
 		     (let* ((nested-triples (remove-if-not #'listp collection))
-			    (triples (let ((blank (blank)))
+			    (triples (let ((blank (blank-node)))
 				       (loop for nested = -1
 					     for (first . rest) on collection
 					     collect (list 'triple blank
@@ -237,14 +237,14 @@
 							   !rdf:rest
 							   (if (null rest)
 							       !rdf:nil
-							     (setf blank (blank))))))))
+							     (setf blank (blank-node))))))))
 		       (dolist (nested nested-triples)
 			 (nconc triples nested))
 		       triples)))
      (OPEN-BRACKET propertylist CLOSE-BRACKET
 		   #'(lambda (br1 properties br2)
 		       (declare (ignore br1 br2))
-		       (let ((var (blank)))
+		       (let ((var (blank-node)))
 			 (mapcar #'(lambda (pair)
 				     (nconc (list 'triple var)
 					    pair))
@@ -364,13 +364,12 @@
   ;; http://www.w3.org/TR/rdf-sparql-query/#queryString
   (setf string (process-unicode string))
 
-  (let ((rdf-store::*namespaces* (make-hash-table :test 'equal))
-	(*parse-base* default-base)
-	(*used-blank-nodes* (list))
-	(*bgp-blank-nodes* (list)))
+  (let ((rdf-utils::*namespaces* (make-hash-table :test 'equal))
+	(rdf-utils::*parse-base* default-base)
+	(cl-rdfxml::*blank-nodes* (make-hash-table :test 'equal)))
     (loop for (prefix . uri) in default-prefixes
 	  do (register-namespace prefix uri))
     (values (parse-with-lexer (n3-lexer string :ignores '(ws comment))
 			      n3-parser)
 	    (namespaces)
-	    *parse-base*)))
\ No newline at end of file
+	    rdf-utils::*parse-base*)))
\ No newline at end of file</diff>
      <filename>parser.lisp</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>e80968c33b00a8ee6bfbd7b35b06d968f3867420</id>
    </parent>
  </parents>
  <author>
    <name>turbo24prg</name>
    <email>turbo24prg@web.de</email>
  </author>
  <url>http://github.com/turbo24prg/n3/commit/5ef4959d528e87a89192e6f9a159694281607348</url>
  <id>5ef4959d528e87a89192e6f9a159694281607348</id>
  <committed-date>2009-06-17T14:09:14-07:00</committed-date>
  <authored-date>2009-06-17T14:09:14-07:00</authored-date>
  <message>fixed parser-base handling for qnames and explicit uris</message>
  <tree>7eedc374bc485e5c1c6e662bc6049f7ab738d154</tree>
  <committer>
    <name>turbo24prg</name>
    <email>turbo24prg@web.de</email>
  </committer>
</commit>
