xml: Port SAX 2.0.
[nit.git] / lib / sax / entity_resolver.nit
diff --git a/lib/sax/entity_resolver.nit b/lib/sax/entity_resolver.nit
new file mode 100644 (file)
index 0000000..3709056
--- /dev/null
@@ -0,0 +1,85 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# This file is free software, which comes along with NIT. This software is
+# distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. You can modify it is you want, provided this header
+# is kept unaltered, and a notification of the changes is added.
+# You are allowed to redistribute it and sell it, alone or is a part of
+# another product.
+
+# Basic interface for resolving entities.
+module sax::entity_resolver
+
+import input_source
+
+# Basic interface for resolving entities.
+#
+# If a SAX application needs to implement customized handling
+# for external entities, it must implement this interface and
+# register an instance with the SAX driver using the
+# `sax::XMLReader.entity_resolver` property.
+#
+# The XML reader will then allow the application to intercept any
+# external entities (including the external DTD subset and external
+# parameter entities, if any) before including them.
+#
+# Many SAX applications will not need to implement this interface,
+# but it will be especially useful for applications that build
+# XML documents from databases or other specialised input sources,
+# or for applications that use URI types other than URLs.
+#
+# The application can also use this interface to redirect system
+# identifiers to local URIs or to look up replacements in a catalog
+# (possibly by using the public identifier).
+#
+# Note: The original documentation comes from [SAX 2.0](http://www.saxproject.org).
+#
+# SEE: `sax::XMLReader.entity_resolver`
+#
+# SEE: `sax::InputSource`
+abstract class 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. Such entities include
+       # the external DTD subset and external parameter entities referenced
+       # within the DTD (in either case, only if the parser reads external
+       # parameter entities), and external general entities referenced
+       # within the document element (if the parser reads external general
+       # entities). The application may request that the parser locate
+       # the entity itself, that it use an alternative URI, or that it
+       # use data provided by the application (as a character or byte
+       # input stream).
+       #
+       # 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). Neither XML nor SAX specifies a preferred policy for using
+       # public or system IDs to resolve resources. However, SAX specifies
+       # how to interpret any InputSource returned by this method, and that
+       # if none is returned, then the system ID will be dereferenced as
+       # a URL.
+       #
+       # If the system identifier is a URL, the SAX parser must
+       # resolve it fully before reporting it to the application.
+       #
+       # Parameters:
+       #
+       # * `public_id`: public identifier of the external entity
+       # being referenced, or `null` if none was supplied.
+       # * `system_id`: 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.
+       fun resolve_entity(public_id: nullable String, system_id: nullable String):
+                       nullable InputSource do
+               return null
+       end
+end