org.w3c.rdf.implementation.syntax.sirpac
Class SiRPAC

java.lang.Object
  |
  +--org.w3c.rdf.implementation.syntax.sirpac.SiRPAC
All Implemented Interfaces:
DocumentHandler, DTDHandler, EntityResolver, RDFParser

public class SiRPAC
extends java.lang.Object
implements EntityResolver, DTDHandler, DocumentHandler, RDFParser

Modified version of SiRPAC adapted to support the new API, streaming, robust parsing etc.


Field Summary
static java.lang.String RDFMS
           
static java.lang.String RDFSCHEMA
           
static java.lang.String REVISION
           
static java.lang.String XMLSCHEMA
           
 
Constructor Summary
SiRPAC()
           
SiRPAC(java.lang.String sXMLParser)
           
 
Method Summary
 void addError(java.lang.String sMsg)
          Generate an error message as a string
 void addTriple(Resource predicate, Resource subject, RDFNode object)
          Create a new triple and add it to the m_triples Vector
protected  void addTriple(Statement s)
           
 void addWarning(java.lang.String sMsg)
          Generate a warning message as a string
 void characters(char[] ch, int start, int length)
          Receive notification of character data.
 void createBags(boolean b)
          createBags method allows one to determine whether SiRPAC produces Bag instances for each Description block.
 Literal createLiteral(java.lang.String str, boolean isXML)
           
static Parser createParser(java.lang.String className)
           
 Resource createResource(java.lang.String str)
          This method adds a warning for each name (element & attribute) which looks like it is from RDF but it is not.
 Resource createResource(java.lang.String namespace, java.lang.String name)
           
 void doctype(java.lang.String name, java.lang.String publicID, java.lang.String systemID)
           
 void endDocument()
          Receive notification of the end of a document.
 void endElement(java.lang.String name)
          For each end of an element scope step back in the element and namespace stack
 void fetchSchema(java.lang.String sURI)
           
 void fetchSchemas(boolean b)
          Set whether parser recursively fetches and parses every RDF schema it finds in the namespace declarations
 InputSource getRDFSource()
           
 void ignorableWhitespace(char[] ch, int start, int length)
          Receive notification of ignorable whitespace in element content.
 void ignoreExternalEntities(boolean b)
           
 boolean isAlternative(Element e)
          Is the element an Alternative
 boolean isBag(Element e)
          Is the element a Bag
 boolean isContainer(Element e)
          Is the element a Container
 boolean isDescription(Element e)
          Is the element a Description
 boolean isListItem(Element e)
          Is the element a ListItem
 boolean isRDF(Element e)
          Check if the element e is from the namespace of the RDF schema by comparing only the beginning of the expanded element name with the canonical RDFMS URI
 boolean isRDFroot(Element e)
           
 boolean isSequence(Element e)
          Is the element a Sequence
 boolean isTypedPredicate(Element e)
          This method matches all properties but those from RDF namespace
 java.util.Enumeration listNamespaces()
          Return all non-RDF namespace URIs recognized by the parser
 Element lookforNode(java.lang.String sID)
          Look for a node by name sID from the Hashtable m_hIDtable of all registered IDs.
static void main(java.lang.String[] args)
          main method for running SiRPAC as an application
 void makeMarkupChar(java.lang.String s)
           
 void makeMarkupET(java.lang.String name)
           
 void makeMarkupST(Element ele)
           
 java.lang.String namespace(java.lang.String sPrefix)
          Return the full namespace URI for a given prefix sPrefix.
 java.lang.String newReificationID()
          Create a new reification ID by using a name part and an incremental counter m_iReificationCounter.
 void notationDecl(java.lang.String name, java.lang.String publicId, java.lang.String systemId)
          Receive notification of a notation declaration event.
 void parse(InputSource source, RDFConsumer consumer)
          Parse from the given SAX/XML input source.
 boolean parseLiteral()
          Methods to determine whether we are parsing parseType="Literal" or parseType="Resource"
 boolean parseResource()
           
 boolean preserveWhiteSpace()
           
 java.lang.String processDescription(Element description, boolean inPredicate, boolean reify, boolean createBag)
          processDescription manages Description elements
 void processingInstruction(java.lang.String target, java.lang.String data)
          Receive notification of a processing instruction.
 void processRDF(Element rdf)
          Start processing an RDF/XML document instance from the root element rdf.
 java.lang.String processTypedNode(Element typedNode)
          Manage the typedNode production in the RDF grammar.
 void processXML(Element ele)
          Given an XML document (well-formed HTML, for example), look for a suitable element to start parsing from
 void registerID(java.lang.String sID, Element e)
          Add an element e to the Hashtable m_hIDtable which stores all nodes with an ID
 void registerResource(Element e)
          Add an element e to the Vector m_vResources which stores all nodes with an URI
 void resolve()
          Go through the m_vResolveQueue and assign direct object reference for each symbolic reference
 InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId)
          Allow the application to resolve external entities.
 void resolveLater(Element e)
          Add the element e to the m_vResolveQueue to be resolved later.
 Element root()
          Return the root element pointer.
 void setDocumentLocator(Locator locator)
          Receive an object for locating the origin of SAX document events.
 void setErrorHandler(ErrorHandler handler)
           
 void setRDFSource(InputSource source)
          Notify all registered consumers that were are at the end of the parsing process
 void setRobustMode(boolean b)
           
 void setSource(java.lang.String sSource)
          setSource methods saves the name of the source document for later inspection if needed
 void setStreamMode(boolean b)
           
 java.lang.String source()
           
 void startDocument()
          Receive notification of the beginning of a document.
 void startElement(java.lang.String name, AttributeList al)
          Called for each new element.
 void unparsedEntityDecl(java.lang.String name, java.lang.String publicId, java.lang.String systemId, java.lang.String notationName)
          Display unparsed entity declarations as they are reported.
 void useExperimentalFeatures(boolean b)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

REVISION

public static final java.lang.String REVISION

RDFMS

public static final java.lang.String RDFMS

RDFSCHEMA

public static final java.lang.String RDFSCHEMA

XMLSCHEMA

public static final java.lang.String XMLSCHEMA
Constructor Detail

SiRPAC

public SiRPAC()

SiRPAC

public SiRPAC(java.lang.String sXMLParser)
Method Detail

useExperimentalFeatures

public void useExperimentalFeatures(boolean b)

addWarning

public void addWarning(java.lang.String sMsg)
                throws SAXException
Generate a warning message as a string

addError

public void addError(java.lang.String sMsg)
              throws SAXException
Generate an error message as a string

parseLiteral

public boolean parseLiteral()
Methods to determine whether we are parsing parseType="Literal" or parseType="Resource"

parseResource

public boolean parseResource()

preserveWhiteSpace

public boolean preserveWhiteSpace()

createBags

public void createBags(boolean b)
createBags method allows one to determine whether SiRPAC produces Bag instances for each Description block. The default setting is to generate them.

fetchSchemas

public void fetchSchemas(boolean b)
Set whether parser recursively fetches and parses every RDF schema it finds in the namespace declarations

setSource

public void setSource(java.lang.String sSource)
setSource methods saves the name of the source document for later inspection if needed

source

public java.lang.String source()

listNamespaces

public java.util.Enumeration listNamespaces()
Return all non-RDF namespace URIs recognized by the parser

namespace

public java.lang.String namespace(java.lang.String sPrefix)
                           throws SAXException
Return the full namespace URI for a given prefix sPrefix. The default namespace is identified with xmlns prefix. The namespace of xmlns attribute is an empty string.

setRDFSource

public void setRDFSource(InputSource source)
Notify all registered consumers that were are at the end of the parsing process

getRDFSource

public InputSource getRDFSource()

setErrorHandler

public void setErrorHandler(ErrorHandler handler)
Specified by:
setErrorHandler in interface RDFParser

parse

public void parse(InputSource source,
                  RDFConsumer consumer)
           throws SAXException
Description copied from interface: RDFParser
Parse from the given SAX/XML input source.
Specified by:
parse in interface RDFParser

resolveEntity

public InputSource resolveEntity(java.lang.String publicId,
                                 java.lang.String systemId)
                          throws SAXException
Description copied from interface: EntityResolver
Allow the application to resolve external entities.

The Parser will call this method before opening any external entity except the top-level document entity (including the external DTD subset, external entities referenced within the DTD, and external entities referenced within the document element): the application may request that the parser resolve the entity itself, that it use an alternative URI, or that it use an entirely different input source.

Application writers can use this method to redirect external system identifiers to secure and/or local URIs, to look up public identifiers in a catalogue, or to read an entity from a database or other input source (including, for example, a dialog box).

If the system identifier is a URL, the SAX parser must resolve it fully before reporting it to the application.

Specified by:
resolveEntity in interface EntityResolver
Following copied from interface: org.xml.sax.EntityResolver
Parameters:
publicId - The public identifier of the external entity being referenced, or null if none was supplied.
systemId - The system identifier of the external entity being referenced.
Returns:
An InputSource object describing the new input source, or null to request that the parser open a regular URI connection to the system identifier.
Throws:
SAXException - Any SAX exception, possibly wrapping another exception.
java.io.IOException - A Java-specific IO exception, possibly the result of creating a new InputStream or Reader for the InputSource.
See Also:
InputSource

notationDecl

public void notationDecl(java.lang.String name,
                         java.lang.String publicId,
                         java.lang.String systemId)
Description copied from interface: DTDHandler
Receive notification of a notation declaration event.

It is up to the application to record the notation for later reference, if necessary.

At least one of publicId and systemId must be non-null. If a system identifier is present, and it is a URL, the SAX parser must resolve it fully before passing it to the application through this event.

There is no guarantee that the notation declaration will be reported before any unparsed entities that use it.

Specified by:
notationDecl in interface DTDHandler
Following copied from interface: org.xml.sax.DTDHandler
Parameters:
name - The notation name.
publicId - The notation's public identifier, or null if none was given.
systemId - The notation's system identifier, or null if none was given.
Throws:
SAXException - Any SAX exception, possibly wrapping another exception.
See Also:
DTDHandler.unparsedEntityDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String), AttributeList

unparsedEntityDecl

public void unparsedEntityDecl(java.lang.String name,
                               java.lang.String publicId,
                               java.lang.String systemId,
                               java.lang.String notationName)
Display unparsed entity declarations as they are reported.
Specified by:
unparsedEntityDecl in interface DTDHandler
See Also:
DTDHandler.unparsedEntityDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String)

setDocumentLocator

public void setDocumentLocator(Locator locator)
Description copied from interface: DocumentHandler
Receive an object for locating the origin of SAX document events.

SAX parsers are strongly encouraged (though not absolutely required) to supply a locator: if it does so, it must supply the locator to the application by invoking this method before invoking any of the other methods in the DocumentHandler interface.

The locator allows the application to determine the end position of any document-related event, even if the parser is not reporting an error. Typically, the application will use this information for reporting its own errors (such as character content that does not match an application's business rules). The information returned by the locator is probably not sufficient for use with a search engine.

Note that the locator will return correct information only during the invocation of the events in this interface. The application should not attempt to use it at any other time.

Specified by:
setDocumentLocator in interface DocumentHandler
Following copied from interface: org.xml.sax.DocumentHandler
Parameters:
locator - An object that can return the location of any SAX document event.
See Also:
Locator

startDocument

public void startDocument()
Description copied from interface: DocumentHandler
Receive notification of the beginning of a document.

The SAX parser will invoke this method only once, before any other methods in this interface or in DTDHandler (except for setDocumentLocator).

Specified by:
startDocument in interface DocumentHandler
Following copied from interface: org.xml.sax.DocumentHandler
Throws:
SAXException - Any SAX exception, possibly wrapping another exception.

endDocument

public void endDocument()
                 throws SAXException
Description copied from interface: DocumentHandler
Receive notification of the end of a document.

The SAX parser will invoke this method only once, and it will be the last method invoked during the parse. The parser shall not invoke this method until it has either abandoned parsing (because of an unrecoverable error) or reached the end of input.

Specified by:
endDocument in interface DocumentHandler
Following copied from interface: org.xml.sax.DocumentHandler
Throws:
SAXException - Any SAX exception, possibly wrapping another exception.

doctype

public void doctype(java.lang.String name,
                    java.lang.String publicID,
                    java.lang.String systemID)

startElement

public void startElement(java.lang.String name,
                         AttributeList al)
                  throws SAXException
Called for each new element. Build up the document tree using an element stack
Specified by:
startElement in interface DocumentHandler
Throws:
SAXException - Passed on since we don't handle it.

endElement

public void endElement(java.lang.String name)
                throws SAXException
For each end of an element scope step back in the element and namespace stack
Specified by:
endElement in interface DocumentHandler
Throws:
SAXException - Passed on since we don't handle it.

root

public Element root()
Return the root element pointer. This requires the parsing has been already done.

characters

public void characters(char[] ch,
                       int start,
                       int length)
                throws SAXException
Description copied from interface: DocumentHandler
Receive notification of character data.

The Parser will call this method to report each chunk of character data. SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity, so that the Locator provides useful information.

The application must not attempt to read from the array outside of the specified range.

Note that some parsers will report whitespace using the ignorableWhitespace() method rather than this one (validating parsers must do so).

Specified by:
characters in interface DocumentHandler
Following copied from interface: org.xml.sax.DocumentHandler
Parameters:
ch - The characters from the XML document.
start - The start position in the array.
length - The number of characters to read from the array.
Throws:
SAXException - Any SAX exception, possibly wrapping another exception.
See Also:
DocumentHandler.ignorableWhitespace(char[], int, int), Locator

ignorableWhitespace

public void ignorableWhitespace(char[] ch,
                                int start,
                                int length)
Description copied from interface: DocumentHandler
Receive notification of ignorable whitespace in element content.

Validating Parsers must use this method to report each chunk of ignorable whitespace (see the W3C XML 1.0 recommendation, section 2.10): non-validating parsers may also use this method if they are capable of parsing and using content models.

SAX parsers may return all contiguous whitespace in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity, so that the Locator provides useful information.

The application must not attempt to read from the array outside of the specified range.

Specified by:
ignorableWhitespace in interface DocumentHandler
Following copied from interface: org.xml.sax.DocumentHandler
Parameters:
ch - The characters from the XML document.
start - The start position in the array.
length - The number of characters to read from the array.
Throws:
SAXException - Any SAX exception, possibly wrapping another exception.
See Also:
DocumentHandler.characters(char[], int, int)

processingInstruction

public void processingInstruction(java.lang.String target,
                                  java.lang.String data)
Description copied from interface: DocumentHandler
Receive notification of a processing instruction.

The Parser will invoke this method once for each processing instruction found: note that processing instructions may occur before or after the main document element.

A SAX parser should never report an XML declaration (XML 1.0, section 2.8) or a text declaration (XML 1.0, section 4.3.1) using this method.

Specified by:
processingInstruction in interface DocumentHandler
Following copied from interface: org.xml.sax.DocumentHandler
Parameters:
target - The processing instruction target.
data - The processing instruction data, or null if none was supplied.
Throws:
SAXException - Any SAX exception, possibly wrapping another exception.

createParser

public static Parser createParser(java.lang.String className)

processXML

public void processXML(Element ele)
                throws SAXException,
                       ModelException
Given an XML document (well-formed HTML, for example), look for a suitable element to start parsing from
Throws:
SAXException - Passed on since we don't handle it.

fetchSchema

public void fetchSchema(java.lang.String sURI)

processRDF

public void processRDF(Element rdf)
                throws SAXException,
                       ModelException
Start processing an RDF/XML document instance from the root element rdf.
Throws:
SAXException - Passed on since we don't handle it.

processTypedNode

public java.lang.String processTypedNode(Element typedNode)
                                  throws SAXException,
                                         ModelException
Manage the typedNode production in the RDF grammar.
Throws:
SAXException - Passed on since we don't handle it.

processDescription

public java.lang.String processDescription(Element description,
                                           boolean inPredicate,
                                           boolean reify,
                                           boolean createBag)
                                    throws SAXException,
                                           ModelException
processDescription manages Description elements
Parameters:
description - The Description element itself
inPredicate - Is this is a nested description
reify - Do we need to reify
createBag - Do we create a bag container
Returns:
An ID for the description
Throws:
SAXException - Passed on since we don't handle it.

addTriple

protected void addTriple(Statement s)
                  throws SAXException,
                         ModelException

addTriple

public void addTriple(Resource predicate,
                      Resource subject,
                      RDFNode object)
               throws SAXException,
                      ModelException
Create a new triple and add it to the m_triples Vector

isDescription

public boolean isDescription(Element e)
Is the element a Description

isListItem

public boolean isListItem(Element e)
Is the element a ListItem

isContainer

public boolean isContainer(Element e)
Is the element a Container
See Also:
isSequence, isAlternative, isBag

isSequence

public boolean isSequence(Element e)
Is the element a Sequence

isAlternative

public boolean isAlternative(Element e)
Is the element an Alternative

isBag

public boolean isBag(Element e)
Is the element a Bag

isTypedPredicate

public boolean isTypedPredicate(Element e)
This method matches all properties but those from RDF namespace

isRDFroot

public boolean isRDFroot(Element e)

isRDF

public boolean isRDF(Element e)
Check if the element e is from the namespace of the RDF schema by comparing only the beginning of the expanded element name with the canonical RDFMS URI

setStreamMode

public void setStreamMode(boolean b)

setRobustMode

public void setRobustMode(boolean b)

ignoreExternalEntities

public void ignoreExternalEntities(boolean b)

resolveLater

public void resolveLater(Element e)
Add the element e to the m_vResolveQueue to be resolved later.

resolve

public void resolve()
             throws SAXException
Go through the m_vResolveQueue and assign direct object reference for each symbolic reference

lookforNode

public Element lookforNode(java.lang.String sID)
Look for a node by name sID from the Hashtable m_hIDtable of all registered IDs.

registerID

public void registerID(java.lang.String sID,
                       Element e)
                throws SAXException
Add an element e to the Hashtable m_hIDtable which stores all nodes with an ID

newReificationID

public java.lang.String newReificationID()
Create a new reification ID by using a name part and an incremental counter m_iReificationCounter.

registerResource

public void registerResource(Element e)
Add an element e to the Vector m_vResources which stores all nodes with an URI

makeMarkupST

public void makeMarkupST(Element ele)

makeMarkupET

public void makeMarkupET(java.lang.String name)

makeMarkupChar

public void makeMarkupChar(java.lang.String s)

createResource

public Resource createResource(java.lang.String str)
                        throws ModelException
This method adds a warning for each name (element & attribute) which looks like it is from RDF but it is not. Note: this method is useful for interactive use but can be omitted from embedded applications.

createResource

public Resource createResource(java.lang.String namespace,
                               java.lang.String name)
                        throws ModelException

createLiteral

public Literal createLiteral(java.lang.String str,
                             boolean isXML)
                      throws ModelException

main

public static void main(java.lang.String[] args)
                 throws java.lang.Exception
main method for running SiRPAC as an application