--- /dev/null
+# 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