4.17 Input and output
AllApplicationManualNameSummaryHelp

  • Documentation
    • Reference manual
      • Built-in Predicates
        • Input and output
          • Predefined stream aliases
          • ISO Input and Output Streams
          • Edinburgh-style I/O
          • Switching between Edinburgh and ISO I/O
          • Adding IRI schemas
            • register_iri_scheme/3
          • Write onto atoms, code-lists, etc.
          • Fast binary term I/O
    • Packages

4.17.5 Adding IRI schemas

The file handling predicates may be hooked to deal with IRIs. An IRI starts with <scheme>://, where <scheme> is a non-empty sequence of lowercase ASCII letters. After detecting the scheme the file manipulation predicates call a hook that is registered using register_iri_scheme/3.

Hooking the file operations using extensible IRI schemas allows us to place any resource that is accessed through Prolog I/O predicates on arbitrary devices such as web servers or the ZIP archive used to store program resources (see section 14.2). This is typically combined with file_search_path/2 declarations to switch between accessing a set of resources from local files, from the program resource database, from a web-server, etc.

register_iri_scheme(+Scheme, :Hook, +Options)
Register Hook to be called by all file handling predicates if a name that starts with Scheme:// is encountered. The Hook is called by call/4 using the operation, the IRI and a term that receives the result of the operation. The following operations are defined:
open(Mode,Options)
Called by open/3,4. The result argument must be unified with a stream.
access(Mode)
Called by access_file/2, exists_file/1 (Mode is file) and exists_directory/1 (Mode is directory). The result argument must be unified with a boolean.
time
Called by time_file/2. The result must be unified with a time stamp.
size
Called by size_file/2. The result must be unified with an integer representing the size in bytes.