You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by bu...@apache.org on 2004/08/22 13:28:05 UTC
cvs commit: jakarta-commons-sandbox/feedparser/src/java/org/apache/commons/feedparser FOAFFeedParser.java FOAFFeedParserListener.java FeedParser.java NS.java
burton 2004/08/22 04:28:05
Modified: feedparser/src/java/org/apache/commons/feedparser
FOAFFeedParser.java FOAFFeedParserListener.java
FeedParser.java NS.java
Log:
50% done FOAF support
Revision Changes Path
1.4 +84 -45 jakarta-commons-sandbox/feedparser/src/java/org/apache/commons/feedparser/FOAFFeedParser.java
Index: FOAFFeedParser.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/feedparser/src/java/org/apache/commons/feedparser/FOAFFeedParser.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FOAFFeedParser.java 30 May 2004 21:00:44 -0000 1.3
+++ FOAFFeedParser.java 22 Aug 2004 11:28:04 -0000 1.4
@@ -20,13 +20,7 @@
import java.net.*;
import java.util.*;
-import org.jdom.Element;
-import org.jdom.Attribute;
-import org.jdom.CDATA;
-import org.jdom.Text;
-import org.jdom.Comment;
-import org.jdom.output.*;
-import org.jdom.input.*;
+import org.jdom.*;
import org.jaxen.jdom.*;
@@ -43,8 +37,8 @@
*
* @author <a href="mailto:burton@peerfear.org">Kevin A. Burton</a>
*/
- public static void parse( FOAFFeedParserListener listener,
- org.jdom.Document doc ) throws FeedParserException {
+ public static void parse( FeedParserListener listener,
+ org.jdom.Document doc ) throws Exception {
try {
@@ -57,14 +51,73 @@
//this should be the root directory.
XPath xpath = new XPath( "/rdf:RDF/foaf:Person" );
- List list = xpath.selectNodes( doc );
+ xpath.setNamespaceContext( NS.context );
+
+ Element person = (Element)xpath.selectSingleNode( doc );
+
+ xpath = new XPath( "foaf:knows" );
+ xpath.setNamespaceContext( NS.context );
+ List list = xpath.selectNodes( person );
Iterator i = list.iterator();
+
+ FOAFFeedParserListener flistener = null;
+
+ if ( listener instanceof FOAFFeedParserListener )
+ flistener = (FOAFFeedParserListener)listener;
+
while ( i.hasNext() ) {
- Element child = (Element)i.next();
- //onOutline( fdpl, state, child );
+ Element knows = (Element)i.next();
+
+ Element currentPerson = knows.getChild( "Person", NS.FOAF );
+
+ state.current = currentPerson;
+ String title = RSSFeedParser.getChildElementTextByName( state, "name" );
+
+ System.out.println( " FIXME: (debug): " + title );
+
+ String seeAlso = getAttributeValue( state,
+ "seeAlso", NS.RDFS,
+ "resource", NS.RDF );
+
+ String homepage = getAttributeValue( state,
+ "homepage", NS.FOAF,
+ "resource", NS.RDF );
+
+ System.out.println( "seeAlso: " + seeAlso );
+ System.out.println( "homepage: " + homepage );
+
+ if ( flistener != null )
+ flistener.onKnows( state );
+
+ listener.onItem( state,
+ title,
+ homepage,
+ null,
+ seeAlso );
+
+ if ( flistener != null ) {
+
+ flistener.onHomepage( state,
+ homepage );
+
+ flistener.onHomepageEnd();
+
+ flistener.onSeeAlso( state,
+ seeAlso );
+
+
+ flistener.onSeeAlsoEnd();
+
+ }
+
+ listener.onItemEnd();
+
+ if ( flistener != null )
+ flistener.onKnowsEnd();
+
}
listener.finished();
@@ -73,44 +126,30 @@
}
- private static void onOutlineFolder( FeedDirectoryParserListener listener,
- FeedParserState state,
- Element current ) throws Exception {
+ public static String getAttributeValue( FeedParserState state,
+ String name,
+ Namespace name_ns,
+ String attr,
+ Namespace attr_ns ) {
- XPath xpath = new XPath( "outline" );
- List list = xpath.selectNodes( current );
+ Element e = state.current.getChild( name, name_ns );
- Iterator i = list.iterator();
- while ( i.hasNext() ) {
+ if ( e == null )
+ return null;
- Element child = (Element)i.next();
- onOutline( listener, state, child );
-
- }
+ Attribute a = e.getAttribute( attr, attr_ns );
- }
-
- private static void onOutline( FeedDirectoryParserListener listener,
- FeedParserState state,
- Element current ) throws Exception {
-
- String title = current.getAttributeValue( "title" );
- String weblog = current.getAttributeValue( "htmlUrl" );
- String description = current.getAttributeValue( "description" );
- String feed = current.getAttributeValue( "xmlUrl" );
-
- if ( weblog != null && feed != null ) {
- listener.onItem( state, title, weblog, description, feed );
- } else if ( title != null ) {
- //this is almost certainly a folder
-
- listener.onFolder( state, title );
- onOutlineFolder( listener, state, current );
- listener.onFolderEnd();
-
- }
+ if ( a == null )
+ return null;
+
+ return a.getValue();
}
+
+ private static void doParseKnows( FeedParserListener listener,
+ FeedParserState state ) throws Exception {
+ }
+
}
1.3 +2 -2 jakarta-commons-sandbox/feedparser/src/java/org/apache/commons/feedparser/FOAFFeedParserListener.java
Index: FOAFFeedParserListener.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/feedparser/src/java/org/apache/commons/feedparser/FOAFFeedParserListener.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- FOAFFeedParserListener.java 28 Feb 2004 03:35:21 -0000 1.2
+++ FOAFFeedParserListener.java 22 Aug 2004 11:28:04 -0000 1.3
@@ -67,7 +67,7 @@
public void onSeeAlso( FeedParserState state,
String resource ) throws FeedParserException;
- public void onSeeAlso() throws FeedParserException;
+ public void onSeeAlsoEnd() throws FeedParserException;
}
1.7 +13 -3 jakarta-commons-sandbox/feedparser/src/java/org/apache/commons/feedparser/FeedParser.java
Index: FeedParser.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/feedparser/src/java/org/apache/commons/feedparser/FeedParser.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- FeedParser.java 3 Aug 2004 01:26:58 -0000 1.6
+++ FeedParser.java 22 Aug 2004 11:28:04 -0000 1.7
@@ -116,16 +116,26 @@
try {
+ //Handle OPML
if ( "opml".equals( doc.getRootElement().getName() ) ) {
OPMLFeedParser.parse( listener, doc );
return;
}
-
+
+ //Handle ATOM
if ( "feed".equals( doc.getRootElement().getName() ) ) {
AtomFeedParser.parse( listener, doc );
return;
}
-
+
+ //Handle FOAF
+ if ( doc.getRootElement().getChildren( "Person", NS.FOAF ).size() > 0 ) {
+
+ FOAFFeedParser.parse( listener, doc );
+
+ return;
+ }
+
//fall back on RDF.
RSSFeedParser.parse( listener, doc );
1.4 +10 -1 jakarta-commons-sandbox/feedparser/src/java/org/apache/commons/feedparser/NS.java
Index: NS.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/feedparser/src/java/org/apache/commons/feedparser/NS.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- NS.java 15 Apr 2004 00:58:44 -0000 1.3
+++ NS.java 22 Aug 2004 11:28:04 -0000 1.4
@@ -27,6 +27,12 @@
*/
public class NS {
+ public static final Namespace RDFS =
+ Namespace.getNamespace( "rdfs", "http://www.w3.org/2000/01/rdf-schema#" );
+
+ public static final Namespace FOAF =
+ Namespace.getNamespace( "foaf", "http://xmlns.com/foaf/0.1/" );
+
public static final Namespace KR =
Namespace.getNamespace( "kr", "http://ksa.peerfear.org/ksa-rdf#" );
@@ -74,6 +80,9 @@
context = new SimpleNamespaceContext();
context.addNamespace( ATOM.getPrefix(), ATOM.getURI() );
context.addNamespace( DC.getPrefix(), DC.getURI() );
+ context.addNamespace( FOAF.getPrefix(), FOAF.getURI() );
+ context.addNamespace( RDF.getPrefix(), RDF.getURI() );
+ context.addNamespace( RDFS.getPrefix(), RDFS.getURI() );
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org