• Places
    • Home
    • Graphs
    • Prefixes
  • Admin
    • Users
    • Settings
    • Plugins
    • Statistics
  • Repository
    • Load local file
    • Load from HTTP
    • Load from library
    • Remove triples
    • Clear repository
  • Query
    • YASGUI SPARQL Editor
    • Simple Form
    • SWISH Prolog shell
  • Help
    • Documentation
    • Tutorial
    • Roadmap
    • HTTP Services
  • Login

/usr/lib/swi-prolog/library/xpath.pl
AllApplicationManualNameSummaryHelp

  • swi-prolog
    • library
      • error.pl -- Error generating support
      • apply.pl -- Apply predicates on a list
      • lists.pl -- List Manipulation
      • pairs.pl -- Operations on key-value lists
      • debug.pl -- Print debug messages and test assertions
      • broadcast.pl -- Event service
      • socket.pl -- Network socket (TCP and UDP) library
      • shlib.pl -- Utility library for loading foreign objects (DLLs, shared objects)
      • option.pl -- Option list processing
      • uid.pl -- User and group management on Unix systems
      • unix.pl -- Unix specific operations
      • syslog.pl -- Unix syslog interface
      • thread_pool.pl -- Resource bounded thread management
      • rbtrees.pl -- Red black trees
      • gensym.pl -- Generate unique symbols
      • readutil.pl -- Read utilities
      • url.pl -- Analysing and constructing URL
      • utf8.pl -- UTF-8 encoding/decoding on lists of character codes.
      • uri.pl -- Process URIs
      • memfile.pl
      • settings.pl -- Setting management
      • arithmetic.pl -- Extensible arithmetic
      • sgml.pl -- SGML, XML and HTML parser
      • iostream.pl -- Utilities to deal with streams
      • dialect.pl -- Support multiple Prolog dialects
      • quasi_quotations.pl -- Define Quasi Quotation syntax
      • pure_input.pl -- Pure Input from files and streams
      • time.pl -- Time and alarm library
      • main.pl -- Provide entry point for scripts
      • ssl.pl -- Secure Socket Layer (SSL) library
      • crypto.pl -- Cryptography and authentication library
      • filesex.pl -- Extended operations on files
      • doc_http.pl -- Documentation server
      • pldoc.pl -- Process source documentation
      • operators.pl -- Manage operators
      • prolog_source.pl -- Examine Prolog source-files
      • base64.pl -- Base64 encoding and decoding
      • aggregate.pl -- Aggregation operators on backtrackable predicates
      • ordsets.pl -- Ordered set manipulation
      • oset.pl -- Ordered set manipulation
      • www_browser.pl -- Open a URL in the users browser
      • process.pl -- Create processes and redirect I/O
      • prolog_colour.pl -- Prolog syntax colouring support.
      • prolog_xref.pl -- Prolog cross-referencer data collection
      • predicate_options.pl -- Access and analyse predicate options
      • prolog_clause.pl -- Get detailed source-information about a clause
      • occurs.pl -- Finding and counting sub-terms
      • listing.pl -- List programs and pretty print clauses
      • record.pl -- Access compound arguments by name
      • assoc.pl -- Binary associations
      • ugraphs.pl -- Graph manipulation library
      • xpath.pl -- Select nodes in an XML DOM
        • xpath_chk/3
        • xpath/3
      • prolog_pack.pl -- A package manager for Prolog
      • archive.pl -- Access several archive formats
      • rdf.pl
      • rdf_parser.pl
      • rewrite.pl
      • quintus.pl -- Quintus compatibility
      • rdf_triple.pl -- Create triples from intermediate representation
      • sgml_write.pl -- XML/SGML writer module
      • xsdp_types.pl -- XML-Schema primitive types
      • thread.pl -- High level thread primitives
      • git.pl -- Run GIT commands
      • ctypes.pl -- Character code classification
      • sha.pl -- SHA secure hashes
      • crypt.pl
      • persistency.pl -- Provide persistent dynamic predicates
      • tty.pl -- Terminal operations
      • terms.pl -- Term manipulation
      • snowball.pl -- The Snowball multi-lingual stemmer library
      • sandbox.pl -- Sandboxed Prolog code
      • prolog_format.pl -- Analyse format specifications
      • when.pl -- Conditional coroutining
      • apply_macros.pl -- Goal expansion rules to avoid meta-calling
      • double_metaphone.pl -- Phonetic string matching
      • porter_stem.pl
      • nb_set.pl -- Non-backtrackable sets
      • c14n2.pl -- C14n2 canonical XML documents
      • dicts.pl -- Dict utilities
      • solution_sequences.pl -- Modify solution sequences
      • uuid.pl -- Universally Unique Identifier (UUID) Library
      • pcre.pl -- Perl compatible regular expression matching for SWI-Prolog
      • backcomp.pl -- Backward compatibility
      • system.pl -- System utilities
      • rdf_write.pl -- Write RDF/XML from a list of triples
      • date.pl -- Process dates and times
      • zlib.pl -- Zlib wrapper for SWI-Prolog
      • rdf_ntriples.pl -- RDF N-triples parser (obsolete)
      • csv.pl -- Process CSV (Comma-Separated Values) data
      • dif.pl -- The dif/2 constraint
      • ansi_term.pl -- Print decorated text to ANSI consoles
      • prolog_stack.pl -- Examine the Prolog stack
      • edinburgh.pl -- Some traditional Edinburgh predicates
      • helpidx.pl
      • explain.pl -- Describe Prolog Terms
      • edit.pl -- Editor interface
      • make.pl -- Reload modified source files
      • check.pl -- Consistency checking
      • prolog_codewalk.pl -- Prolog code walker
      • prolog_metainference.pl -- Infer meta-predicate properties
      • prolog_breakpoints.pl -- Manage Prolog break-points
      • threadutil.pl -- Interactive thread utilities
      • statistics.pl -- Get information about resource usage
      • help.pl
      • pengines.pl -- Pengines: Web Logic Programming Made Easy
      • charsio.pl -- I/O on Lists of Character Codes
      • modules.pl -- Module utility predicates
      • term_to_json.pl
      • random.pl -- Random numbers
      • md5.pl -- MD5 hashes
      • pprint.pl -- Pretty Print Prolog terms
      • lazy_lists.pl -- Lazy list handling
      • pengines_io.pl -- Provide Prolog I/O for HTML clients
      • yall.pl -- Lambda expressions
      • prolog_stream.pl -- A stream with Prolog callbacks
      • cgi.pl -- Read CGI parameters
      • unicode.pl -- Unicode string handling
      • editline.pl -- BSD libedit based command line editing
      • console_input.pl
      • hash_stream.pl -- Maintain a hash on a stream
      • shell.pl -- Elementary shell commands
      • optparse.pl -- command line parsing
      • chr.pl
      • sort.pl
      • base32.pl -- Base32 encoding and decoding
      • codesio.pl -- I/O on Lists of Character Codes
      • coinduction.pl -- Co-Logic Programming
      • heaps.pl -- heaps/priority queues
      • varnumbers.pl -- Utilities for numbered terms
      • table.pl
      • qsave.pl -- Save current program as a state or executable
      • prolog_autoload.pl -- Autoload all dependencies
      • tabling.pl -- Tabled execution (SLG WAM)
      • prolog_history.pl -- Per-directory persistent commandline history
      • writef.pl -- Old-style formatted write
      • files.pl
      • udp_broadcast.pl -- A UDP Broadcast Bridge
      • doc_files.pl -- Create stand-alone documentation files
      • xmlenc.pl -- XML encryption library
      • rlimit.pl
      • streampool.pl
      • win_menu.pl -- Console window menu
      • readline.pl -- GNU readline interface
      • xmldsig.pl -- XML Digital signature
 xpath(+DOM, +Spec, ?Content) is nondet
Match an element in a DOM structure. The syntax is inspired by XPath, using () rather than [] to select inside an element. First we can construct paths using / and //:
//Term
Select any node in the DOM matching term.
/Term
Match the root against Term.
Term
Select the immediate children of the root matching Term.

The Terms above are of type callable. The functor specifies the element name. The element name '*' refers to any element. The name self refers to the top-element itself and is often used for processing matches of an earlier xpath/3 query. A term NS:Term refers to an XML name in the namespace NS. Optional arguments specify additional constraints and functions. The arguments are processed from left to right. Defined conditional argument values are:

index(?Index)
True if the element is the Index-th child of its parent, where 1 denotes the first child. Index can be one of:
Var
Var is unified with the index of the matched element.
last
True for the last element.
last - IntExpr
True for the last-minus-nth element. For example, last-1 is the element directly preceding the last one.
IntExpr
True for the element whose index equals IntExpr.
Integer
The N-th element with the given name, with 1 denoting the first element. Same as index(Integer).
last
The last element with the given name. Same as index(last).
last - IntExpr
The IntExpr-th element before the last. Same as index(last-IntExpr).

Defined function argument values are:

self
Evaluate to the entire element
content
Evaluate to the content of the element (a list)
text
Evaluates to all text from the sub-tree as an atom
normalize_space
As text, but uses normalize_space/2 to normalise white-space in the output
number
Extract an integer or float from the value. Ignores leading and trailing white-space
@Attribute
Evaluates to the value of the given attribute. Attribute can be a compound term. In this case the functor name denotes the element and arguments perform transformations on the attribute value. Defined transformations are:
number
Translate the value into a number using xsd_number_string/2 from library(sgml).
integer
As number, but subsequently transform the value into an integer using the round/1 function.
float
As number, but subsequently transform the value into a float using the float/1 function.
string
Translate the value into a Prolog string.
lower
Translate the value to lower case, preserving the type.
upper
Translate the value to upper case, preserving the type.

In addition, the argument-list can be conditions:

Left = Right
Succeeds if the left-hand unifies with the right-hand. If the left-hand side is a function, this is evaluated. The right-hand side is never evaluated, and thus the condition content = content defines that the content of the element is the atom content. The functions lower_case and upper_case can be applied to Right (see example below).
contains(Haystack, Needle)
Succeeds if Needle is a sub-string of Haystack.
XPath
Succeeds if XPath matches in the currently selected sub-DOM. For example, the following expression finds an h3 element inside a div element, where the div element itself contains an h2 child with a strong child.
//div(h2/strong)/h3

This is equivalent to the conjunction of XPath goals below.

   ...,
   xpath(DOM, //(div), Div),
   xpath(Div, h2/strong, _),
   xpath(Div, h3, Result)

Examples:

Match each table-row in DOM:

xpath(DOM, //tr, TR)

Match the last cell of each tablerow in DOM. This example illustrates that a result can be the input of subsequent xpath/3 queries. Using multiple queries on the intermediate TR term guarantee that all results come from the same table-row:

xpath(DOM, //tr, TR),
xpath(TR,  /td(last), TD)

Match each href attribute in an <a> element

xpath(DOM, //a(@href), HREF)

Suppose we have a table containing rows where each first column is the name of a product with a link to details and the second is the price (a number). The following predicate matches the name, URL and price:

product(DOM, Name, URL, Price) :-
    xpath(DOM, //tr, TR),
    xpath(TR, td(1), C1),
    xpath(C1, /self(normalize_space), Name),
    xpath(C1, a(@href), URL),
    xpath(TR, td(2, number), Price).

Suppose we want to select books with genre="thriller" from a tree containing elements <book genre=...>

thriller(DOM, Book) :-
    xpath(DOM, //book(@genre=thiller), Book).

Match the elements <table align="center"> and <table align="CENTER">:

    //table(@align(lower) = center)

Get the width and height of a div element as a number, and the div node itself:

    xpath(DOM, //div(@width(number)=W, @height(number)=H), Div)

Note that div is an infix operator, so parentheses must be used in cases like the following:

    xpath(DOM, //(div), Div)
ClioPatria (version V3.1.1-21-gb8003bb)