# PageSeeder Developer > Reference documentation, installation and configuration guides, the PSML format and the PageSeeder API, for developers building on PageSeeder. --- title: "Validating headings" source: https://dev.pageseeder.com/reference/sample_code/schematron/validating_headings.html last_updated: 2026-09-14T15:59:05+10:00 tokens: ~2322 --- # Validating headings To create a quality Table of Contents (TOC), the documents in a collection must use headings consistently. Following are Schematron assertions to validate different characteristics of headings in PSML documents. ## Basic – heading rule Most rules that apply to headings match the `` element: ```xml ``` ### Message When a message is returned or an assertion fails, the goal is to help the user to quickly identify the problem so it can be addressed. With headings, this generally means providing the textual content of a `` element. The `@level` attribute can be also helpful and so can additional information such as the value of the `@id` attribute on the `` or `
` element. For example: ```xml Heading level "" in fragment ``` Can be used to display: *Heading level **2** '**Additional information**' in fragment **43**.* ## Validate the first heading All PageSeeder documents have a [document title](/reference/glossary/document_title.md) that is created independent of the document contents through the URI properties, as an alternative to the filename. Because the document title can be changed separate to the content, it can be useful to check them against each other. ### Document title vs first heading Whenever documents are listed, it is the document title that is displayed. This includes browsing folders or authoring [cross-references](/reference/glossary/cross_reference.md).  While the built-in PageSeeder document templates, **default** and **references**, automatically populate the first heading of the document with the document title, it is possible to edit both separately.  ### Check for integrity To determine whether the convention of document title and first heading match each other, use one of the following: ```xml The document title '' does not match the first heading '. ``` Or alternatively: ```xml The document title '' does not match the first heading '. ``` > **Note:** - Although `(//heading)[1]` is a valid XPath expression, it cannot be used as a pattern. - Do NOT use `//heading[1]` as it will match every first heading in a fragment. - `//uri@title` is an alternative to `(//uri/displaytitle)[1]` ### Check the first heading Common conventions for the use of headings in PageSeeder [publications](/guide/configuration/publication_types.md) include a mix of the following: - A heading should be in the first fragment of the first section. - The heading should have a `@level` value of `1`. - It might not be numbered. - It might not have a prefix. ```xml The first heading MUST be level 1 but was level instead. The first heading MUST be in the first fragment of the first section. The first heading MUST NOT be numbered. The first heading MUST NOT have a prefix. ``` > **Note:** When appropriate, these individual tests can easily be combined into a single test. ### Validate headings against sections The built-in PSML document templates, **default** and **references**, separate documents into two [sections](/reference/glossary/section.md): - The first section has an `@id` value of `title`. - The second section has an `@id` value of `content` or `references`. Different development approaches mean that the section where the first heading occurs can affect the Table of Contents generation. In the event of unexpected results in the TOC, the following rule tests which section has the first heading of a document. ```xml The first heading MUST be in the 'title' section. ``` ## Validate other headings Generating a Table of Contents typically requires that document headings are consistent according to constraints such as the following: - The use of levels reflect an implicit or explicit hierarchy. - The application of heading numbering is consistent. - The predictable expression of heading content. Following are some rules to help test document headings against these constraints. ### Validate hierarchical consistency Whenever possible, progressively following each level of a document hierarchy promotes structural consistency. This also generates a predictable Table of Contents. The following rule checks that the heading levels only increment by a single value at a time. ```xml A heading MUST follow a heading that at least equals or 1. But heading level '' follows heading level ''. ``` ### Ensure headings are numbered To comply with document conventions might require some headings to be numbered. The following rule checks for numbering on heading levels 1, 2 and 3. ```xml Heading levels 1 to 3 MUST be numbered. But heading level '' is not. ``` ### Validate heading content To produce a meaningful Table of Contents that complies with a target format might require constraints such as the following: - Minimum/maximum number of characters. - No occurrence of illegal characters. - No leading or trailing whitespace characters. - A convention for word capitalization. The following rules can be used to test for these conditions. #### Check the number of characters in heading The following rule checks that the headings do not exceed a given length. ```xml Headings MUST be between 2 and 99 characters long, but heading level '' is characters long. ``` #### Check for unwanted whitespace characters The following rule checks that headings do not include leading or trailing spaces and no consecutive space characters. ```xml Headings MUST include leading or trailing spaces but heading '' does. ``` #### Check capitalization The following rule checks that all headings are capitalized. ```xml Headings MUST be capitalized but heading '' is not. ``` #### Check punctuation The following rule checks that headings do not end with a colon or comma. ```xml Headings MUST not end with a colon ':' or comma but heading level '' does. ``` --- title: "Validating quotation marks" source: https://dev.pageseeder.com/reference/sample_code/schematron/validating_quotation_marks.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~422 --- # Validating quotation marks In good typography, curly quotes are used in text: - The left (or opening) single quote (‘). - The right (or closing) single quote (’). - The left (or opening) double quote (“). - And the right (or closing) double quote (”). But in software code, straight quotes are important and mustn’t be replaced by curly quotes. The following example lets you validate your content to ensure that curly quotes and straight quotes are used in the right context. ## Schematron patterns > **Tip:** We separate Schematron patterns to ensure that the rules are evaluated independently. The following code checks that straight quotation marks are used only in code: ```xml Straight quotation marks   Found straight quotation mark (") in text. Use typographical quotation marks instead.   ``` The following code checks that typographical quotation marks are **not** used in code: ```xml Typographical quotation marks Found typographical quotation mark in code. Use straight quotation marks instead.     ``` --- title: "Validating cross-references" source: https://dev.pageseeder.com/reference/sample_code/schematron/validating_cross-references.html last_updated: 2026-09-14T15:59:05+10:00 tokens: ~737 --- # Validating cross-references PageSeeder supports the expression of linked collections using [xrefs](/reference/glossary/cross_reference.md), including cases where part of the collection is outside PageSeeder. ## Basics ### Cross-reference rule Rules applying to cross-references match the `` element, `` element or both: ```xml ``` Cross-references that belong to an `` tend to have specific requirements. In that case, the following rule is more appropriate: ```xml ``` ### Message The message returned by Schematron when an assertion fails when reporting a condition is met allows the user to quickly identify the problem so that it can be fixed. On the `` or `` element, users can see the type of cross-reference, level and the content of the reference, so the `@type` and `@level` attributes and `text()` are useful to help identify the cross-reference. The `@href` attribute can also be useful in cases where users are familiar with the file structures or name. In the context of an xref fragment, the position of the cross-reference can also be useful using `position()` or `count(preceding-sibling::blockxref)+1`. The latter is more reliable in contexts where the position might be affected by the XPath used in the rule. To know where to fix the problem, it is often useful to provide either the fragment or section ID. #### Examples Cross-references in default fragment: ```text Cross-reference '' of type '' in fragment ... ``` Can be used to display: *Cross-reference 'Program schedule' of type 'embed' in fragment 15 ...* Cross-references in xref-fragments: ```text Cross-reference '' at position # in fragment ... ``` Can be used to display: *Cross-reference 'Program schedule' at position #17 in fragment 5 ...* ## Validating the reference The most frequent constraint on a cross-reference is to ensure its integrity, that is, ensure that it is neither archived nor unresolved. ### Checking that a cross-reference is resolved A cross-reference which cannot be resolved includes the `@unresolved` attribute. The following assertion checks that a cross-reference is resolved: ```xml The cross-reference '' is unresolved. ``` --- title: "Validating images" source: https://dev.pageseeder.com/reference/sample_code/schematron/validating_images.html description: "Sample code to validate images within PSML documents with Schematron" last_updated: 2026-09-14T15:59:05+10:00 tokens: ~1688 --- # Validating images Images in PSML documents often have constraints beyond what the PSML schema requires. This article provides some sample code for common use cases. ## Basics ### Image rule Most rules applying to images match the `` element: ```xml ``` ### Message The message returned by Schematron when reported or when an assertion fails should allow the user to quickly identify the problem so that it can be fixed. On the `` element, you can use the attributes `@src`, `@uriid` and `@alt` to help the user identify the problematic image. But note, however, that the `@alt` attribute is not always present. To know where to fix the problem, it is often useful to provide either the fragment or section ID. For example: ```xml Image '' at '' in fragment ``` Can be used to display: *Image '**Program schedule**' at '**/images/program\_sch.png**' in fragment **43**.* ## Validating the image reference From version 5.8, images are no longer simple declarations, but are proper references. So PageSeeder is able to check that images references correspond to actual image files. ### Checking that an image is resolved Similar to unresolved cross-references, unresolved image references are flagged as unresolved using the `@unresolved` attribute. Unresolved images might occur after an upload or if an image file is deleted. The following rule checks that the images are resolved: ```xml The image at is unresolved. ``` *The extra check that `@uriid` exists is for PageSeeder documents from before version 5.8, when `@unresolved` was introduced. Documents after this point have `@unresolved` for unresolved images.* ## Validating dimensions The following rules define assertions on the `@width` and `@height` attributes of the `` element. ### Checking that dimensions are defined The following rule defines an assertion to check that the `@width` and `@height` attributes have been defined on the image element. ```xml The width of this image was not defined: . The height of this image was not defined: . ``` ### Checking that dimensions meet criteria The following rule checks that an image fits within dimensions specified by a minimum and maximum value for width and height. In this example, we have defined the minimum and maximum dimensions as variables to make it easier to configure. ```xml The width of image at '' is too large. Width is (max=px). The width of image at '' is too small. Width is (min=px). The height of image at '' is too large. Height is (max=px). The height of image at '' is too small. Height is (min=px). ``` > **Note:** In the example above, we defined several assertions, but the same requirements could also be validated with less assertions. This would essentially affect the number of errors reported and the error message displayed to the user. For example, the following rule has the same requirements for the dimensions, but only a single failure is reported with a less precise message.  ```xml Image at '' does not meet dimensions criteria. Dimensions specified were (W×H): × but required dimensions are minimum × and maximum × . ``` ## Validating image path The path to an image is defined in the `@src` attribute.  ### Checking that an image is not archived The following rule checks that the image is not in the archive folder. ```xml Image at '' is archived. ``` ### Checking that images are in specific folder From PageSeeder 5.8, the path of resolved images is automatically generated and stored in the `@src` attribute. ```xml Image at '' is not in folder ''. ``` --- title: "Validating properties" source: https://dev.pageseeder.com/reference/sample_code/schematron/validating_properties.html last_updated: 2026-09-14T15:59:05+10:00 tokens: ~1343 --- # Validating properties PageSeeder properties often have specific constraints associated with them including: - A minimum or maximum number of characters. - A list of allowable values. - A datatype. - A regular expression. ## Basics ### Property rule Most rules applying to images match the `` element based on its name: ```xml ``` Alternatively, the datatype can be used. ```xml ``` ### Message Messages generated by Schematron rules should allow the user to quickly identify the problem. One technique is for the message to include the `@name` or `@title` attributes from the `` element. It can also help to include a value using the `@value` attribute for single-valued properties or the  `` element for multi-valued properties. Another locator is the `@id` attribute of the `` or `
` element. > **Note:** Keep validation in mind when specifying the ID for a  \ when creating the document template.  For example: ```xml Property '' in fragment '' ``` Can be used to display: *Property '`isbn`' in properties fragment '`book-metadata`'.* ## Single value vs. multiple values Some properties only have a single value using a `@value` attribute while other properties contain zero or multiple values specified in the `` element. Whether a property is single-valued or multi-valued is determined by the `@count` attribute. Validation should expect having to deal with either option but not both. ### Value test One significant difference between single-valued and multi-valued properties: - The `@value` attribute is always present for a single-valued property, so tests should expect that `@value` will match 1 value. - `` elements are only present for multi-valued properties if a value has been specified, so tests should expect that `value` will match 0 or more values. ### Property count Properly designed document templates should ensure that a property is consistent across a collection of documents. However, when data is uploaded from external sources, it can happen that one document has the property expressed for a single value and another document has it expressed as multi-value.  In cases where some documents are inconsistent with the document template or other documents, the following tests can determine the `@value`  and `@count` attributes: Using the `` element is not reliable because it isn’t necessarily specified. #### Single-valued ```xml Property '' should be single-valued. ``` #### Multi-valued ```xml Property '' should be multi-valued. ``` ## Validating XML schema datatypes A common constraint is to check that a property matches a specific [XML Schema datatype](https://www.w3.org/TR/xmlschema-2). > **Note:** To use the XML schema datatypes, make sure the XML Schema namespace is both declared (using `xmlns`) *and* mapped (using ``) ```xml ``` ### Limitations PageSeeder doesn’t use a schema-aware Schematron validator; therefore, the following techniques are limited to the **built-in XML Schema datatypes**. ### Dates To validate that a property value matches a date, it’s sufficient to check that it can be casted as an `xs:date` XML Schema value. ```xml The value of property '' should be a date as 'yyyy-mm-dd' but was ''. ``` ### Integers To validate that a property has an integer value, it’s sufficient to check that it can be casted as an `xs:integer` XML Schema value. ```xml The value of property '' should be an integer but was ''. ``` ## Patterns Regular expressions are a common way to check whether a value is valid against the constraints of a pattern. To do this, use the [XPath 2.0 matches()](https://www.w3.org/TR/xpath-functions) function. ```xml The value of property '' should match pattern but was ''. ``` --- title: "Schematron" source: https://dev.pageseeder.com/reference/sample_code/schematron.html description: "Schematron sample code and patterns for validating PageSeeder documents, including boilerplate schemas, PSML best practices, cross-reference checks, term usage tracking, document assignment validation, debugging techniques, and quickfix implementation examples." last_updated: 2026-09-14T15:59:05+10:00 tokens: ~2207 --- # Schematron sample code This article contains some general Schematron code samples to enable a quick start when writing Schematron validation code in PageSeeder. For more specific code samples, *see*: - [validating images](/reference/sample_code/schematron/validating_images.md) - [validating cross-references](/reference/sample_code/schematron/validating_cross-references.md) - [validating headings](/reference/sample_code/schematron/validating_headings.md) - [validating properties](/reference/sample_code/schematron/validating_properties.md) ## Basic Schematron The following is a boilerplate Schematron schema. It has placeholders for different types of validation rules. ```xml [your message] [your message] ``` ## Example Schema The following schema is designed to validate some generic best practice rules for PSML. ```xml This document contains over 20 sections. Consider whether to split it into multiple documents. This document does not have a Doc ID. This document has no label. Fragment '' has no title. Fragment '' has over 2000 characters. ``` ## Check cross-referenced document A rule to check the content of an [xref](/reference/glossary/cross_reference.md) target document. ```xml Document has no heading2. ``` ## Check terms used in a publication A schematron which when run on a [publication](/reference/glossary/publications.md) root document will check which defined terms are used in the publication. *Requires PageSeeder 5.9800 or higher.* ```xml           Usage                           The following         defintions are used in this publication:                          ``` ## Check documents assigned to me A schematron to check which documents are assigned to me and have status Complete or In Progress. *Requires PageSeeder 5.9811 or higher.* ```xml                Document                     Document is assigned to you and COMPLETE.                   Document is assigned to you and IN PROGRESS.       ``` ## Debug Schematron code If you need to debug Schematron and you're not sure what your getting in a variable, you can used code similar to this: ```xml       ``` ## Quickfix A schematron to identify and fix headings that contain markup such as formatting. *Requires PageSeeder 6.0 or higher.* ```xml ``` **schema/pattern/heading\_no\_markup.sch** ```xml No markup in heading           Heading should not contain markup   ``` **schema/properties.sch** ```xml           Remove the markup from the heading ``` **quickfix/remove-markup-from-heading.xsl** ```xml           ``` --- title: "PSML" source: https://dev.pageseeder.com/reference/sample_code/psml.html description: "This document provides PSML code templates and samples, including basic document structure, tables, properties fragments, cross-references, and fragment templates for PageSeeder document creation and editing." last_updated: 2026-09-14T15:58:53+10:00 tokens: ~1114 --- # PSML sample code Following are some [PSML](/reference/glossary/psml.md) code samples that can be used as templates. ## Basic PSML document ### `` A basic document with placeholders for content: ```xml
[your document title]
[your first paragraph]
``` ## Basic table ### `` A basic table structure with header row. ```xml
Title Author Alice's Adventures in Wonderland Lewis Carol Gulliver's Travels Jonathan Swift
Books
``` ## Properties fragment ### `` A specialized structure, the `` is suited to the capture, editing and validation of *name/value* pairs. ```xml
English Spanish
``` ## Cross-reference fragment ### `` An editing interface specialized for [cross-references](/reference/glossary/cross_reference.md). Users find this [interface](/guide/configuration/psml/psml_xrefs_editor.md) very productive for creating, editing and ordering links.  ```xml ``` ## Fragment template Adding this to the [document-template](/guide/configuration/psml/psml_document_template.md) allows users to add a specific fragment type using the standard editing environment. ```xml ``` ## Cross-reference ### `` When coding the creation of `` or `` elements, it is useful to remember that the server automatically expands minimally-expressed links. This allows developers to only code for the key location and title data: ```xml the title to be displayed the title to be displayed ``` ```xml the title to be displayed ``` Except for an `` or `` using the `uriid` attribute, which is generated by the system, xrefs can be created even if the other end of the link does not exist. Or the collection of linked documents is only partially complete. To process the links, any user with the appropriate rights can go to the **Administration** menu, **Group maintenance** page, and select the option to **Resolve...**. PageSeeder then resolves the ``, ``, and `` elements, adds the implied attributes and values and creates a `` element in the destination document. --- title: "XSLT" source: https://dev.pageseeder.com/reference/sample_code/xslt.html description: "This document provides XSLT sample code and resources for running XSLT transformations from Eclipse or command line, including a starter template for creating new pages with PageSeeder layouts." last_updated: 2026-09-14T15:58:39+10:00 tokens: ~210 --- # XSLT sample code Click the following links for information on [How to run XSLT from Eclipse](/get_started/tutorials/how_to_run_xslt_from_eclipse.md) or [How to run XSLT from the command line](/get_started/tutorials/how_to_run_xslt_from_the_command_line.md). ## Stub for a new page Sample code to use as a stub for a new page in the layout. ```xml

[title of the page]

```   --- title: "Berlioz" source: https://dev.pageseeder.com/reference/sample_code/berlioz.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~524 --- # Sample code for Berlioz Here is some sample code to use for Berlioz applications. ## Services ### Simple services.xml A simple service configuration to automatically bundling and minimizing styles and scripts, returning the navigation, parsing the file based on the Berlioz path and any user currently logged in. ```xml ``` ## Global configuration The code below are meant to be copied and pasted into a Berlioz configuration file (`config-[mode].xml`). ### Berlioz properties The core Berlioz properties. ```xml ``` #### Bastille properties Some common Bastille properties. ```xml ``` --- title: "CSS" source: https://dev.pageseeder.com/reference/sample_code/css.html last_updated: 2026-08-11T16:01:44+10:00 tokens: ~612 --- # CSS sample code ## Custom document styles Here are some styles that could be applied to particular content in a document (in this example, a `` is displayed with text orange and centered, a dotted orange line on top but no other borders) ```css /* Specific to type and block label 'xyz' */ .document-type-references .psml-content .label-xyz { border: none;  border-top: 2px dotted orange; color: orange; font-style: italic; text-align: center; } ``` > **Obsolete:** In version 5, you needed to import the default document styles using the following CSS import: ```css /* import default document styles */ @import url(../../../../weborganic/document/css/psml-content.css); ``` When switching to version 6, you must remove this line when using legacy code. For further information regarding the customized display of content in PageSeeder, *see* [How to change the display of PSML using CSS](/get_started/tutorials/how_to_customize_the_style_of_psml_documents.md) and for further reference regarding PageSeeder CSS, *see* [PSML document styles (CSS)](/guide/configuration/psml/psml_document_style.md). This example can be deployed by editing the CSS when on the following page: **Project dashboard** \> **Template** \> **Types** ## Custom block style In this example, we use a darker background color for a warning block (`` ) ```css /* Custom warnings */ .psml-content div.label-warning {   background: #d42132 !important;   color: white;   border: none; } /* Also change the label name color */ .psml-content div.label-warning::before {   color: white !important; } /* This allows code to be more readable */ .psml-content div.label-warning code {   background-color: rgba(0,0,0,.25);   color: white; } /* Don't forget the dark theme */ @media (prefers-color-scheme: dark) { .psml-content div.label-warning {     background: #713f00 !important;   } } ``` ## Section styling The following example sets a different background for an entire section (`
` ) ```css #section-info {   background: repeating-linear-gradient( 135deg, #f3f3e7, #f3f3e7 4px, #fff 4px, #fff 8px );   border: 3px solid #f3f3e7;   padding: 1rem; } #section-info::before {   border-bottom: 3px solid #7732;  color: #773;   content: 'Section below cannot be edited';   display: block;   font-size: 18px;   margin-bottom: 1rem;   padding-bottom: 1rem;    text-align: center; } ``` --- title: "ANT" source: https://dev.pageseeder.com/reference/sample_code/ant.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~162 --- # Ant sample code Some sample code from Ant build files for use with the publisher. ## Basic Ant build file A basic Ant build file using the Ant library. ```xml ``` --- title: "Sample Code" source: https://dev.pageseeder.com/reference/sample_code.html last_updated: 2026-09-14T15:59:05+10:00 tokens: ~91 --- # Sample code This section provides stubs and sample code to help with your PageSeeder development. - [Schematron](/reference/sample_code/schematron.md) - [PSML](/reference/sample_code/psml.md) - [ANT](/reference/sample_code/ant.md) - [XSLT](/reference/sample_code/xslt.md) - [CSS](/reference/sample_code/css.md) - [Berlioz](/reference/sample_code/berlioz.md) --- title: "weborganic" source: https://dev.pageseeder.com/reference/folders_and_files/weborganic.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~84 --- # weborganic folder ### `/weborganic` The weborganic folder contains all the scripts, styles and images which are part of PageSeeder by default. > **Warning:** There is no reason to modify or add any file in this folder. Project-specific customizations should go into the [template](/reference/folders_and_files/template.md) folder. --- title: "Default template folder" source: https://dev.pageseeder.com/reference/folders_and_files/default_template.html last_updated: 2026-08-11T16:33:28+10:00 tokens: ~106 --- # Default template folder `/WEB-INF/template/default` This folder contains all the default PageSeeder templates. This includes: - the built-in document types (default, [references document type](/reference/glossary/references_document.md), help) - the default [publish scripts](/reference/glossary/publish_script.md) - the default [notification templates](/guide/configuration/emails/templates.md) - the index templates --- title: "publish-config" source: https://dev.pageseeder.com/reference/folders_and_files/project_template/publish/publish-config.html last_updated: 2026-09-14T15:49:08+10:00 tokens: ~1033 --- # publish-config.xml ## Overview > **Note:** In earlier versions of PageSeeder, this file was `publishConfig.xml` instead of `publish-config.xml`. This file binds a [publish script](/reference/glossary/publish_script.md) to an option in the user interface. Publish scripts are used for tasks such as the following: - Import arbitrary document formats to PSML for editing. - Export PSML to arbitrary document formats for presentation or interchange. - Deliver PSML documents to a remote file system, API, or [web server](/reference/glossary/berlioz.md). When processing PSML documents, the publish config makes it possible to bind the script to any of the following: - Document - Folder - Group For detailed information, see the documentation for ``. ### Example file ```xml Export ALLsource document Export ALLabstract document Publish to local website Import Word document as worksection (v0.1) Publish document to website (http://allspec.allette.com.au) Publish folder to website (http://allspec.allette.com.au) ``` --- title: "Member" source: https://dev.pageseeder.com/reference/folders_and_files/project_template/member.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~131 --- # Member template folder **`/WEB-INF/config/template/[project]/member`** This folder contains configuration files for member details. > **Note:** The folder name is capitalized and case-sensitive! ## Details form configuration This folder is usually the recipient for details form specific `[detailsform].xml` file: ```text /WEB-INF/config/template/[project]/member/[details].xml ``` The *details form* can be set in your group properties. ## Perspectives This folder is only used for the *standard* perspective. --- title: "Member details configuration" source: https://dev.pageseeder.com/reference/folders_and_files/project_template/member_details.html description: "A file used to configure the details that can be associated to a group member" last_updated: 2026-09-05T15:56:52+10:00 tokens: ~644 --- # Member details configuration `/WEB-INF/config/template/[project]/member/[details].xml` This file can be used to configure additional fields to members of a group. ## Overview Groups can be configured so that members can have up to 15 custom fields associated with their membership. These fields can be used to store additional, arbitrary information. > **Note:** Details fields are associated with the group membership, not the user directly. So each group can get its own set of fields. This file can be configured for who can edit or view the fields. > **Note:** When editing this configuration file in PageSeeder, pressing **ctrl-space** displays autocomplete options to make editing easier. ### Detail field definition The following table describes the list of attributes for each detail field. By default, the fields in the details form are 100 characters long. | **Name** | **Description** | **Value** | **Default** | | --- | --- | --- | --- | | position | The position of the field and must be an integer between 1 and 15  | Required | | | name | A field name containing only letters and numbers | Required | | | title | A user-friendly display name for each field | | | | visibility | Determines who is allowed to see the field value. Possible values are `group`, `member` and `manager`.  | | `manager` | | editable | A boolean flag (`true` or `false`) determines whether the field is editable by the member through the user interface. | | `false` | | type | Determines the form field in the user interface. The default layout supports `text` and `date` but other types could be supported.  | | `text` | #### Shared details The details configuration can be shared with other groups with the same [owner](/reference/glossary/group_owner.md) and the same `details` name. To enable this feature, set the `@shared` attribute on the `` element to `true`. ### Sample member details file Following is a sample file. ```xml ``` --- title: "Document type style" source: https://dev.pageseeder.com/reference/folders_and_files/project_template/psml/document_type_style.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~122 --- # Document type `/WEB-INF/config/template/[project]/psml/[documenttype]/style` This folder contains all the styles organized by [document type](/guide/configuration/psml.md). ** CSS  Style** ```text /WEB-INF/config/template/[project]/psml/[documenttype]/style/document.css ``` ** Document Icon ** > **Obsolete:** This `template-icon.png` file is obsolete and ignored as if PageSeeder v6. ```text /WEB-INF/config/template/[project]/psml/[documenttype]/style/template-icon.png ``` --- title: "Document type" source: https://dev.pageseeder.com/reference/folders_and_files/project_template/psml/document_type.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~150 --- # Document type For any document types, the following folders and files under: `/WEB-INF/config/template` ## Document Template (PSML format) ```text /WEB-INF/config/template/[project]/psml/[documenttype]/document-template.psml ``` ## Document Config (XML format) ```text /WEB-INF/config/template/[project]/psml/[documenttype]/document-config.xml ``` ## Editor Config (XML format) ```text /WEB-INF/config/template/[project]/psml/[documenttype]/editor-config.xml ``` ## Schematron (Schematron XML format) ```text /WEB-INF/config/template/[project]/psml/[documenttype]/default.sch ``` --- title: "PSML" source: https://dev.pageseeder.com/reference/folders_and_files/project_template/psml.html last_updated: 2026-09-05T23:26:52+10:00 tokens: ~31 --- # PSML template folder **`/WEB-INF/config/template/[project]/psml`** This folder contains the PSML configuration files. --- title: "Label configuration" source: https://dev.pageseeder.com/reference/folders_and_files/project_template/label.html last_updated: 2026-09-05T15:41:44+10:00 tokens: ~482 --- # Label configuration `/WEB-INF/config/template/[project]/label/label-config.xml` This file contains the configuration files for the labels used in the [project](/reference/glossary/project.md). To access the user interface for this information, click the current project – the first value to the right of the “Home icon, on the horizontal menu bar. ## File content This file determines which labels are available through the user interface. Labels that have been imported as part of a document are visible and able to be processed, but unless they have been included in this file, they are not available through the interface. Note the difference between [object labels](/reference/glossary/object_labels.md) and [content labels](/reference/glossary/content_labels.md). ```xml ``` --- title: "Publish" source: https://dev.pageseeder.com/reference/folders_and_files/project_template/publish.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~108 --- # Publish template folder **`/WEB-INF/config/template/[project]/publish`** This folder contains the publish configuration (`publish-config.xml`) that determines how a project interacts with the Publisher. > **Note:** The actual code for the publishing tasks is on the Publisher. Log in to the Publisher through the **Toolbox** page located under the **Dev** tab in the **Developer perspective**. Requires administrator role.   --- title: "Notification" source: https://dev.pageseeder.com/reference/folders_and_files/project_template/notification.html last_updated: 2026-09-05T15:40:36+10:00 tokens: ~119 --- # Notification folder **`/WEB-INF/config/template/[project]/notification`** This folder has the XSLT templates that generate the content of custom system [notifications](/reference/glossary/notification.md) and control the formatting of messages. For reference, have a look at the [default notification folder](/reference/folders_and_files/default_template/notification.md). The list of templates is described as part of the [email API](/guide/configuration/emails.md) --- title: "Config folder" source: https://dev.pageseeder.com/reference/folders_and_files/config_folder.html last_updated: 2026-09-08T11:46:27+10:00 tokens: ~605 --- # Config folder `/WEB-INF/config` This folder contains your PageSeeder configuration. > **Tip:** Please ensure that you have a copy of this folder outside your deployed solution. We recommend that you backup this folder. Typically the some of the configuration files would also be maintain in a version control system. The PageSeeder configuration includes: - the [database properties](/guide/configuration/properties/database_properties.md) - the [global properties](/guide/configuration/properties/global_properties.md) - the [group properties](/reference/glossary/group_properties.md) - your custom [project templates](/reference/glossary/project_template.md) - An optional `analytics.xml` file - An optional `identity-config.xml` file - *In PageSeeder v6.0 and lower the file was `external-identity.xml`.* ## `analytics.xml` file Use this file to inject some code into the user interface. This is typically use for Web analytics. ```xml ``` ## `identity-config.xml` file Use this file to specify Open ID providers and external portal apps to support SSO. ```xml                     ``` This file is returned by the [/identity-config](/api/services/get-identity-config_get.md) service. --- title: "template" source: https://dev.pageseeder.com/reference/folders_and_files/template.html last_updated: 2026-08-11T16:36:41+10:00 tokens: ~94 --- # Template folder ### `/WEB-INF/config/template` This folder is the repository of templates, scripts, and configuration files specific to each PageSeeder project. For security reasons, these files are not exposed to the Web and are located inside the `/WEB-INF` directory, however, they contain `style` folders for CSS, javascript and images which are exposed to the Web. --- title: "Project template folder" source: https://dev.pageseeder.com/reference/folders_and_files/project_template.html last_updated: 2026-08-11T16:31:05+10:00 tokens: ~40 --- # Project template folder `/WEB-INF/config/template/[project]` This folder contains all the customizations for a [project](/reference/glossary/project.md). --- title: "Other files" source: https://dev.pageseeder.com/reference/folders_and_files/other_files.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~4 --- # Other files --- title: "Index folder" source: https://dev.pageseeder.com/reference/folders_and_files/default_template/index.html last_updated: 2026-09-05T15:40:23+10:00 tokens: ~63 --- # Index folder `/WEB-INF/template/default/index` This folder contains all the templates organized by media type to generate the PageSeeder Index. See the [Index](/reference/index.md) for more information about the fields produced by the default. --- title: "Notification folder" source: https://dev.pageseeder.com/reference/folders_and_files/default_template/notification.html last_updated: 2026-09-05T15:40:36+10:00 tokens: ~80 --- # Notification folder `/WEB-INF/template/default/notification` This folder has the XSLT templates that generate the content of default system [notifications](/reference/glossary/notification.md) and control the formatting of messages. To customize these messages, see the project-specific notification templates.   --- title: "Publish folder" source: https://dev.pageseeder.com/reference/folders_and_files/default_template/publish.html last_updated: 2026-09-05T15:41:05+10:00 tokens: ~52 --- # Publish folder `/WEB-INF/template/default/publish` This folder contains the default publishing option available within PageSeeder. To customize these options, see the project-specific publish folder.   --- title: "Documents folder" source: https://dev.pageseeder.com/reference/folders_and_files/documents_folder.html last_updated: 2026-08-11T16:17:39+10:00 tokens: ~143 --- # Documents folder The location of this folder on the host file system is specified by the`documentFolder`global property. If not specified, it the documents folder directly under the PageSeeder installation folder. > **Warning:** You must back up this folder! `` This is the default location for user-created documents in a PageSeeder group. ```text /{project}/{group}/documents ``` Other default, user-facing folders are the following: ```text /{project}/{group}/archive ``` ```text /{project}/{group}/attachments ``` ```text /{project}/{group}/images ``` --- title: "Log files" source: https://dev.pageseeder.com/reference/folders_and_files/state_folder/logs.html last_updated: 2026-09-08T13:59:02+10:00 tokens: ~1596 --- # Log files `/WEB-INF/state/logs` The logs files are automatically generated by PageSeeder during its normal operation. You can search and browse the contents of the log files available from **Logs** pages in the System administration. > **Note:** There is no folder for recent logs because entries listed on the **Recent logs** page are kept in memory. They only contain the most recent events that occurred in your system. All logs files use utf-8 with a daily rollover and maximum file size of 10MB. You can change the location of the logs files using the `logsFolder` [global property](/guide/configuration/properties/global_properties.md). The internal file organization remains the same. The XLOG format is a PageSeeder specific format which collates individual log events as XML. While the file itself is not a valid XML document, it can only be parsed as XML when wrapped in a document element (by inserting an `` start element at the beginning and an `` end element at the end). > **Note:** Some events such as Tomcat start up and out of memory errors might be sent to system out/error which is usually logged on Linux under `/opt/pageseeder/tomcat/logs/catalina.out`. For out of memory errors, Linux usually creates a large `.hprof` file under `/home/pageseeder` which should be deleted after it is downloaded for analysis. ## `access` folder This folder contains records of access to API services and pages by end-users. You can browse the access logs from the **Logs \> Access logs** page in the system administration. The following is a sample event reported by the access log: ```xml ``` You can change how long the access log files are retained using the `logsAccessHistory` global property. ## `general` folder This folder contains log messages output by PageSeeder and not captured by other logs. They use the XLOG format. This includes bugs, stack traces, debug information and system initialization. They use a plain text format. To see the logs, go to the **Logs \> General logs** page in the system administration. The following is an example.  ```text 2022-05-12T12:26:17.948 [main] INFO  com.pageseeder.Update - Running Database Update 2022-05-12T12:26:18.740 [main] INFO  com.pageseeder.Update - Connected to database 2022-05-12T12:26:18.792 [main] INFO  com.pageseeder.Update - Found database version 5.99 2022-05-12T12:26:18.797 [main] INFO  com.pageseeder.Update - Database is up to date 2022-05-12T12:26:18.986 [ps-background-p2] INFO  c.p.publish.PublishSchedulerThread - Publish Scheduler Thread Started 2022-05-12T12:26:19.008 [ps-background-p2] INFO  com.pageseeder.NotificationThread - Notification Thread Started 2022-05-12T12:26:30.681 [main] INFO  com.pageseeder.Initialise - Publisher: Starting file cleaners 2022-05-12T12:26:31.360 [main] INFO  com.pageseeder.Initialise - Generating Help Index 2022-05-12T12:26:31.435 [main] INFO  com.pageseeder.Initialise - Help Index Content added 379 documents to indexing queue in 75ms 2022-05-12T12:26:31.993 [main] INFO  o.p.berlioz.servlet.BerliozConfig - Loading the etag seed w109b7jmzypf ``` ## `index` folder These log files are generated by the index process. Indexing events indicate whether indexing jobs are successful or not. They use the XLOG format. To see the logs, go to the **Logs \> Index logs** page in the system administration. The following is a sample event reported by the index log: ```xml ``` This folder also contains XML files for the daily summary of the logs files.  ## `mail` folder These logs files are generated by incoming and outgoing PageSeeder emails. They use the XLOG format. To see the logs, go to the **Logs \> Mail logs** page in the system administration. *Requires PageSeeder v6.* The following are sample events reported by the mail log: ```xml         ``` This folder also contains XML files for the daily summary of the logs files.  ## `process` folder These logs files are generated by the asynchronous processes such as when files are moved or archived. They use the XLOG format. To see the logs, go to the **Logs \> Process logs** page in the system administration. This folder also contains XML files for the daily summary of the logs files.  ## `publish` folder These logs files are generated by the publisher. They use the XLOG format. To see the logs, go to the **Logs \> Publish logs** page in the system administration. This folder also contains XML files for the daily summary of the logs files.  --- title: "Cache files" source: https://dev.pageseeder.com/reference/folders_and_files/state_folder/cache_files.html last_updated: 2026-09-08T13:36:26+10:00 tokens: ~796 --- # Cache files `/WEB-INF/state/cache` To improve both security and performance, PageSeeder stores files in the cache folder. These include image thumbnails and the system cache. There is generally no need to change these files manually. > **Note:** The file organization and format of the cache files might change between releases and is handled automatically by PageSeeder. ## Image thumbnails When a user views an image, PageSeeder automatically generates a low resolution thumbnail of it to make serving the image faster. You can safely delete files in the `/WEB-INF/state/cache/thumbnail` folder** **as they are automatically recreated by PageSeeder, but this might affect performance if your system contains a lot of images. > **Note:** PageSeeder automatically deletes associated image thumbnails when an image or group is archived or deleted. ## System cache PageSeeder automatically stores the following system files using [ehcache](https://www.ehcache.org/). | Cache | Key | Contents | Purpose | | --- | --- | --- | --- | | account-lockout | Username | Failed sign in attempts info (object) | security | | client-origins | Origin URL | CORS support (boolean) | performance | | edit-comparisons | Edit IDs + dates | Diff between edits (XML) | performance | | external-favicons | Host | Favicons used in URLs (Image) | performance | | file-inspection | File path | Result of file inspection (object) | performance | | group-state | Group ID | Dates of latest updates (object) | performance | | membership-etags | Member ID | Etag (long) | performance | | profile-pictures | Member ID | Profile picture (image) | performance | | publication-tocs | Publication ID + host (+ version) | Table of Contents of publications (object) | performance | | publication-tocs-version | performance | | reset-password-lockout | Email | Failed sign in attempts info (object) | security | | url-hosts | Host | Date last checked (long) | performance | | url-metadata | Host | Metadata (object) | performance | | user-details | Member ID | Group flags (object) | performance | | validation-results | Group ID + URI ID | Schematron validation results (object) | performance | | webhook-events | Event ID | Webhook events (object) | performance | | webhook-failed-jobs | Job ID | Webhooks failed jobs (object) | performance | | webhook-jobs | Job ID | Webhooks jobs (object) | performance | | xml-documents | Group ID + URI ID | PSML content (object) | performance | > **Warning:** Manually modifying or deleting these files might corrupt your system. Use the **Server status \> Caching** page in the system administration to view and manage the cache contents. ## API services The following services let you manage the cache more effectively: - [/caches \[GET\]](/api/services/cache-summary_get.md) - [/caches/clear \[POST\]](/api/services/clear-all-cache_post.md) - [/caches/\{name\} \[GET\]](/api/services/get-cache_get.md) - [/caches/\{name\}/clear \[POST\]](/api/services/clear-cache_post.md) - [/caches/\{name\}/elements \[GET\]](/api/services/list-cache-elements_get.md) - [/caches/\{name\}/elements/\{key\}/remove \[POST\]](/api/services/remove-cache-element_post.md) --- title: "Publish files" source: https://dev.pageseeder.com/reference/folders_and_files/state_folder/publish_files.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~536 --- # Publish files `/WEB-INF/state/publish` The publish files are generated when publish scripts are run in PageSeeder. They are temporary files, don’t need to be backed up and are cleared regularly by PageSeeder processes. They are not to be modified directly on the file system, but if disk space is an issue, they can be safely cleared when the PageSeeder server is stopped. ## `session` folder The session files are the output files from the publish scripts. They are located under a sub-folder with a unique name generated for the current user and are accessed by PageSeeder when presenting the output after the publish script is completed (for example, a report or a Zip archive document to download). Once the script is completed, the output file isn’t needed so it can in theory be removed safely, but that is not needed as a PageSeeder process is checking once a day and removing any session file/folder that was not created **in the last 12 hours**. ## `working` folder The working folder contains all the temporary files used by the publish scripts (export, process, publish or upload). Each running script has its own working folder based on the object it is running on: a group, a document or folder, an uploaded document: - For a group: `/[host]/[group path]/ps-group` - For a document/folder: `/[host]/[path]/[ps-uri or ps-folder]` - For an uploaded document: `/[host]/ps-user/[username]/ps-upload` These are valid examples: ```text /ps.pageseeder.com/ps/project1/group1/ps-group /ps.pageseeder.com/ps/project1/group1/documents/mydoc1.psml/ps-uri /ps.pageseeder.com/ps/project1/group1/documents/ps-folder /ps.pageseeder.com/ps/ps-user/jsmith/newdoc.docx/ps-upload ``` These working folders are always emptied before the corresponding script is run to make sure the script uses the correct data. These files can be useful for debugging purposes and, therefore, have a longer lifespan than session files – a PageSeeder process is checking once a day and removing any working file/folder that was not created **in the last three days**. They can also safely be removed manually once the publish script is completed. --- title: "Index files" source: https://dev.pageseeder.com/reference/folders_and_files/state_folder/index_files.html last_updated: 2026-09-05T15:35:36+10:00 tokens: ~437 --- # Index files `/WEB-INF/state/index` Index files are generated by PageSeeder as part of the indexing process performed by [Lucene](https://lucene.apache.org/core). They include the indexes and catalogs for the indexes. > **Warning:** Do not modify or delete these files directly in the file system! They are modified frequently by PageSeeder and use lock files for concurrency. Updating indexes is often required after a new PageSeeder release is installed, to include additional index fields. - As an administrator, you can update all indexes from the **Server status \> Indexing** page in the system administration. - Group managers can update the index for their group on the the **Administration \> Group maintenance** page of the group administration. See [index](/reference/index.md) for an explanation of how indexing works in PageSeeder. These files can be safely backed up once the PageSeeder server has been stopped. If some index files are somehow deleted, it is safer to remove the entire folder and then re-index the corresponding group. ## Indexes Individual indexes are stored in folders. There are three types of indexes: - **Group indexes** – are stored in folders based on their group ID. - **Help index** – is stored in the `help` folder. - **URL index** – is stored in the `url` folder. ## Catalogs Catalogs are XML files that contain the [field definitions](/reference/index/field_definitions.md) used in the group indexes for a project. They are automatically updated during the indexing process. You shouldn’t modify a catalog file. To see the indexing catalog, go to the **Administration \> Indexing catalog** page of your project administration. You must have the role of a project manager to view that page. --- title: "State folder" source: https://dev.pageseeder.com/reference/folders_and_files/state_folder.html last_updated: 2026-08-11T16:17:39+10:00 tokens: ~212 --- # State folder `/WEB-INF/state` This folder contains all the files generated by PageSeeder during its operations. > **Tip:** Backing up this folder is not strictly necessary because the files can be generated and the system can operate without a copy, however, we strongly recommend that you backup these files for security and performance. This includes: - the [cache](/reference/folders_and_files/state_folder/cache_files.md) - the [index](/reference/folders_and_files/state_folder/index_files.md) for each group - the [logs](/reference/folders_and_files/state_folder/logs.md) - the temporary [publish](/reference/folders_and_files/state_folder/publish_files.md) files > **Note:** The logs folder might be in a different location if the `logsFolder` [global property](/guide/configuration/properties/global_properties.md) is specified.  --- title: "Advanced" source: https://dev.pageseeder.com/reference/advanced.html last_updated: 2026-08-11T16:12:46+10:00 tokens: ~258 --- # Advanced This section documents many of the more advanced aspects of PageSeeder. Note the warning below.  > **Warning:** Be aware that this section includes information on various aspects of PageSeeder which are experimental, obsolete or unsupported.  Our apologies for any potential confusion. However, after careful consideration, we have determined that continuing to publish out-of-date material beside the current documentation was the best solution for developers maintaining, or migrating from, previous versions of PageSeeder. This situation is only temporary and we appreciate your patience. ## Advanced data API The data API provides an umbrella for documentation related to schemas, properties and other data interfaces for PageSeeder. ![Data API](/content/images/api/data_api.webp) These include: - Configuration and system [properties](/guide/configuration/properties.md). - [Folders and files](/reference/folders_and_files.md) to manage customizations. - The format of PageSeeder documents [PSML](/psml.md). --- title: "Security" source: https://dev.pageseeder.com/reference/security.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~95 --- # Security We do our best to make sure our software is free of security vulnerabilities. Despite our efforts, there may still be vulnerabilities. If you think you have found a potential vulnerability in PageSeeder, please tell us as quickly as possible. We are grateful to hear about any issues you find. To report an issue, please email general\_info \[at\] allette.com.au --- title: "Glossary" source: https://dev.pageseeder.com/reference/glossary.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~24 --- # Glossary The glossary contains a useful list of concepts and definitions used by PageSeeder. --- title: "Legend & explanations" source: https://dev.pageseeder.com/reference/index/legend_and_explanations.html last_updated: 2026-09-05T15:35:57+10:00 tokens: ~633 --- # Legend and explanations Explanations and legends relating to the index documentation. ## Index terminology The terms used in the index documentation are borrowed from Apache Lucene. | Term | Abbr. | Meaning | | --- | --- | --- | | **Stored** | S | The content of the field is stored in the index and available in search results. | | **Compressed** | Z | The content of the field is stored in the index using compressed format and might be available in search results. | | **Analyzed** | A | The content has been tokenized so that individual terms and phrases can be searched. When a field is analyzed; facets for this field are made of individual terms. | | **Indexed** | I | The content has been indexed as it is; searches can only match the full content (prefix and fuzzy searches are possible also). When a field is simply indexed (as opposed to analyzed), facets values use the entire field value. | | **Int** | N | The field is interpreted as a numeric field so that it can be stored and sorted efficiently. | | **Long** | L | The field is interpreted as a numeric field so that it can be stored and sorted efficiently. | ## Cardinality The cardinality denotes the number instances if the field is supported by the kind of indexable item. | Term | Abbr. | Meaning | | --- | --- | --- | | **1** | | If the field is supported, it is always available | | **0..1** | ? | If the field is supported, it might be available | | **0..N** | \* | If the field is supported, there might be multiple instances | | **1..N** | + | If the field is supported, there is at least one instance | ## Legend For brevity, the documents use icons to denote the different kinds of indexable items. | Icon | Description | | --- | --- | | ![folder\_icon.svg](/content/images/icons/folder_icon.svg) | Folders | | ![word\_icon.svg](/content/images/icons/word_icon.svg) | Microsoft Word document | | ![pdf\_icon.svg](/content/images/icons/pdf_icon.svg) | *PDF* document | | ![html\_icon.svg](/content/images/icons/html_icon.svg) | HTML document | | ![xml\_icon.svg](/content/images/icons/xml_icon.svg) | XML document | | ![psml\_icon.svg](/content/images/icons/psml_icon.svg) | PageSeeder document (PSML) | | ![file\_icon.svg](/content/images/icons/file_icon.svg) | Any other type of document | | ![image\_icon.svg](/content/images/icons/image_icon.svg) | Image (`.gif`, `.bmp`, `.png` or `.jpeg`) | | ![task\_icon.svg](/content/images/icons/task_icon.svg) | Task | | ![comment\_icon.svg](/content/images/icons/comment_icon.svg) | Comment | --- title: "Index fields" source: https://dev.pageseeder.com/reference/index/index_fields.html last_updated: 2026-09-08T11:44:30+10:00 tokens: ~2611 --- # Index fields A summary table of all the index fields in PageSeeder and items for which they are available. A more detailed definition of each field can be found in [Index field definitions](/reference/index/field_definitions.md). For more explanations on the abbreviations used in this document see [Legend & explanations](/reference/index/legend_and_explanations.md). > **Note:** Setting the group property `indexXFields` to `true` and then re-indexing the group adds all document metadata fields extracted by Tika to the index with the prefix `x-`(also known as X-Fields). ## Core fields | | | ![Folder icon](/content/images/icons/folder_icon.svg) | ![Word icon](/content/images/icons/word_icon.svg) | ![PDF icon](/content/images/icons/pdf_icon.svg) | ![HTML icon](/content/images/icons/html_icon.svg) | ![XML icon](/content/images/icons/xml_icon.svg) | ![PSML icon](/content/images/icons/psml_icon.svg) | ![Image icon](/content/images/icons/image_icon.svg) | ![Comment icon](/content/images/icons/comment_icon.svg) | ![Task icon](/content/images/icons/task_icon.svg) | ![URL icon](/content/images/icons/url_icon.svg) | ![File icon](/content/images/icons/file_icon.svg) | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | psid | `SI` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | pstitle | `ST` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | pstitle-sort | `I` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | psdescription | `ST` | Y | Y | Y | Y | Y | Y | Y | | Y | Y | Y | | pstype | `SI` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | pssubtype | `SI` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | psmediatype | `SI` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | pscreateddate | `SI?` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | psmodifieddate | `SI` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | pscontent | `ZT` | | Y | Y | Y | Y | Y | | Y | Y | Y | Y | | pswordcount | `SI` | | Y | Y | Y | Y | Y | | Y | Y | Y | Y | | pslabel | `SI*` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | psgroupname | `SI*` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | psgroupid | `SI*` | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | ## Media specific | | | ![Folder icon](/content/images/icons/folder_icon.svg) | ![Word icon](/content/images/icons/word_icon.svg) | ![PDF icon](/content/images/icons/pdf_icon.svg) | ![HTML icon](/content/images/icons/html_icon.svg) | ![XML icon](/content/images/icons/xml_icon.svg) | ![PSML icon](/content/images/icons/psml_icon.svg) | ![Image icon](/content/images/icons/image_icon.svg) | ![Comment icon](/content/images/icons/comment_icon.svg) | ![Task icon](/content/images/icons/task_icon.svg) | ![URL icon](/content/images/icons/url_icon.svg) | ![File icon](/content/images/icons/file_icon.svg) | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | psancestor | `I+` | Y | Y | Y | Y | Y | Y | Y | Y | Y | | Y | | psassignedto | `SI` | | Y | Y | Y | Y | Y | Y | | Y | Y | Y | | psassignedtoid | `SIL?` | | Y | Y | Y | Y | Y | Y | | Y | Y | Y | | psauthor | `SI?` | | | | | | | | Y | Y | | | | psauthorid | `SIL?` | | | | | | | | Y | Y | | | | psblock-\[name\] | `ZT*` | | | | | | Y | | | | | | | psblocklabelname | `SI*` | | | | | | Y | | | | | | | pscomment-assignedto | `SI` | | | | | | | | Y | | | | | pscomment-assignedtoid | `SIL?` | | | | | | | | Y | | | | | pscomment-duedate | `SI?` | | | | | | | | Y | | | | | pscomment-priority | `SI` | | | | | | | | Y | | | | | pscomment-status | `SI` | | | | | | | | Y | | | | | pscontextexternal | `SI` | | | | | | | | Y | Y | | | | pscontextfragment | `SI` | | | | | | | | Y | Y | | | | pscontexturidocumenttype | `SI?` | | | | | | | | Y | Y | | | | pscontexturiid | `SIL` | | | | | | | | Y | Y | | | | pscontexturimediatype | `SI?` | | | | | | | | Y | Y | | | | pscontexturititle | `ST?` | | | | | | | | Y | Y | | | | pscontexturiurltype | `SI?` | | | | | | | | Y | Y | | | | psdiscussionid | `SIL` | | | | | | | | Y | | | | | psdocid | `SC?` | Y | Y | Y | Y | Y | Y | Y | | | | Y | | psdocumenttype | `SI` | | | | | | Y | | | | | | | psduedate | `SI?` | | Y | Y | Y | Y | Y | Y | | Y | Y | Y | | pseditable | `SI` | | | | | | Y | | | | | | | psfilename | `ST` | Y | Y | Y | Y | Y | Y | Y | | | | Y | | psfolder | `SI` | Y | Y | Y | Y | Y | Y | Y | | | | Y | | psfragmentlabel | `SI*` | | | | | | Y | | | | | | | psfragmenttype | `SI*` | | | | | | Y | | | | | | | psgraphicsrc | `SI*` | | | | | | | | | | | | | psgroupcount | `SN` | | | | | | | | | | Y | | | psheight | `SIN?` | | | | | | | Y | | | | | | pshost | `SI` | | | | | | | | | | Y | | | psimagealt | `ST` | | | | | | | Y | | | | | | psimagelabel | `SI*` | | Y | Y | Y | Y | Y | Y | | | Y | Y | | psimagesrc | `SI*` | | | | | | | Y | | | | | | psinline-\[name\] | `SI*` | | | | | | Y | | | | | | | psinlinelabelname | `SI*` | | | | | | Y | | | | | | | pslastediteddate | `SI?` | | | | | | Y | | | | | | | pslatestversion | `SI` | | Y | Y | Y | Y | Y | Y | | | Y | Y | | pslatestversiondate | `SI?` | | Y | Y | Y | Y | Y | Y | | | Y | Y | | pslinklabel | `SI*` | | Y | Y | Y | Y | Y | Y | | | Y | Y | | pslistrole | `SI*` | | | | | | Y | | | | | | | psmedia-createddate | `SI?` | | Y | Y | | | Y | Y | | | | | | psmedia-modifieddate | `SI?` | | Y | Y | | | Y | Y | | | | | | psmetadata-\[name\] | `SI*` | | Y | Y | Y | Y | Y | Y | | | Y | Y | | psmetadatachecked | `SI?` | | | | | | | | | | Y | | | psmetadataname | `SI*` | | Y | Y | Y | Y | Y | Y | | | Y | Y | | psowned | `SI` | Y | Y | Y | Y | Y | Y | Y | | | | Y | | pspagecount | `SN` | | | Y | | | | | | | | | | pspixelcount | `IL?` | | | | | | | Y | | | | | | psplaceholder | `SI*` | | | | | | Y | | | | | | | psprefixcontent | `ZT*` | | | | | | Y | | | | | | | pspreformatrole | `SI*` | | | | | | Y | | | | | | | pspriority | `SI` | | Y | Y | Y | Y | Y | Y | | Y | Y | Y | | psproperty-\[name\] | `SI*` | | | | | | Y | | Y | Y | | | | pspropertyname | `SI*` | | | | | | Y | | | | | | | pspublicationid | `SI*` | | | | | | Y | | Y | Y | | | | pspublicationroot | `SI?` | | | | | | Y | | | | | | | psreadonlyinline | `SI*` | | | | | | Y | | | | | | | psreadonlyproperty | `SI*` | | | | | | Y | | | | | | | psreversexrefconfig | `SI*` | | Y | Y | Y | Y | Y | Y | | | Y | Y | | psreversexrefcount | `SN` | | Y | Y | Y | Y | Y | Y | | | Y | Y | | psreversexreflabel | `SI*` | | Y | Y | Y | Y | Y | Y | | | Y | Y | | psreversexreftype | `SI*` | | Y | Y | Y | Y | Y | Y | | | Y | Y | | psrootpublicationid | `SI?` | | | | | | Y | | | | | | | psrootpublicationtype | `SI?` | | | | | | Y | | | | | | | pssize | `SIN?` | | Y | Y | Y | Y | | Y | | | Y | Y | | pssource | `SI` | | | | | | | | | | Y | | | psstatus | `SI` | | Y | Y | Y | Y | Y | Y | | Y | Y | Y | | psstatuschangeddate | `SI?` | | Y | Y | Y | Y | Y | Y | | Y | Y | Y | | pstablerole | `SI*` | | | | | | Y | | | | | | | pstaskdefinitionid | `SIL` | | | | | | | | | Y | | | | psurl | `SI` | | | | | | | | | | Y | | | psurlmediatype | `SI?` | | | | | | | | | | Y | | | psurltype | `SI` | | | | | | | | | | Y | | | psversionid | `SI?` | | | | | | Y | | | | | | | pswidth | `SIN?` | | | | | | | Y | | | | | | psxrefconfig | `SI*` | | Y | Y | Y | Y | Y | Y | | | Y | Y | | psxrefcount | `SN` | | Y | Y | Y | Y | Y | Y | | | Y | Y | | psxreflabel | `SI*` | | Y | Y | Y | Y | Y | Y | | | Y | Y | | psxreftype | `SI*` | | Y | Y | Y | Y | Y | Y | | | Y | Y | ## Legend For brevity, the documents use icons to denote the different kind of indexable items. ### Media types | Icon | *input* media type | Description | | --- | --- | --- | | ![Folder icon](/content/images/icons/folder_icon.svg) | | Folders | | ![word\_icon.svg](/content/images/icons/word_icon.svg) | `application/word` | Word document | | ![PDF icon](/content/images/icons/pdf_icon.svg) | `application/pdf` | *PDF* document | | ![HTML icon](/content/images/icons/html_icon.svg) | `text/html` | HTML document | | ![XML icon](/content/images/icons/xml_icon.svg) | `application/xml text/xml */*+xml` | XML document | | ![PSML icon](/content/images/icons/psml_icon.svg) | `application/vnd.pageseeder.psml+xml` | PSML document | | ![URL icon](/content/images/icons/url_icon.svg) | `application/vnd.pageseeder.url+xml` | URL (external URI) | | ![Other file icon](/content/images/icons/file_icon.svg) | `*/*` (any other) | Any other type of document | | ![Image icon](/content/images/icons/image_icon.svg) | `image/*` | Image (`.gif`, `.bmp`, `.png` or `.jpeg`) | | ![Task icon](/content/images/icons/task_icon.svg) | | Task | | ![Comment icon](/content/images/icons/comment_icon.svg) | | Comment | > **Note:** The input media type is the MIME type received by the index engine. It is slightly different from the *psmediatype* index field. ### Field types  **Lucene field types legend** | S | *Stored* | The field value is stored in the index in full and is available in search results | | --- | --- | --- | | Z | *Compressed* | The value is stored in the index in a compressed format | | I | *Indexed* | The value is indexed as it is and is case sensitive | | **C** | *Case insensitive * | The value is indexed as lower case and searches are case insensitive | | T | *Tokenized* | The value is split into tokens which is not case sensitive | | N | *Number* | The value is stored as a integer value | | L | *Long* | The value is stored as a long value | | ? | *Optional* | When applicable for the mediatype, the field might not always appear in the index | | \* | *Zero-or-more* | When applicable for the mediatype, the field might appear in the index multiple times | | + | *One-or-more* | When applicable for the mediatype, the field appears in the index at least once | > **Note:** If a field is not tokenized, it must be searched using its exact value including correct case (for example, “smith” or “john smith” wont match “John Smith”). --- title: "Index field definitions" source: https://dev.pageseeder.com/reference/index/field_definitions.html last_updated: 2026-09-08T11:44:30+10:00 tokens: ~17133 --- # Index field definitions This document provides detailed information about the fields that are captured in PageSeeder’s document index, most of which is exposed through the standard [search](/reference/glossary/search.md) interface with no additional configuration required. The  primary tools for adding custom semantics to the index are [document types](/guide/configuration/psml.md) and [labels](/reference/glossary/labels.md). For an overview of where these fields are used, *see* [Index fields](/reference/index/index_fields.md). ## Summary Core fields available for almost all indexed items. For an explanation of the icons used on this page, *see* [Legend of document icons](/reference/index/legend_and_explanations.md). ** Index version ** shows when new fields were added to the index (blank means always existed). ### Core fields | Name | Type | Card. | Description | Index version | | --- | --- | --- | --- | --- | | psid | Stored+Indexed | 1 | A unique identifier for the item: the URI ID or XLink ID | | | pstitle | Stored+Indexed+Tokenized | 1 | The title of the XLink or URI | | | pstitle-sort | Indexed | 1 | Used for sorting by title | | | psdescription | Stored+Indexed+Tokenized | 1 | URI Description | | | pstype | Stored+Indexed | 1 | `document` \| `documentversion` \| `comment` \| `task` \| `folder` | | | pssubtype | Stored+Indexed | 1 | `document` \| `comment` \| `task` \| `folder` \| ` image ` \| `video` \| `audio` \| `office` \| `archive` | | | psmediatype | Stored+Indexed | 1 | Media type (MIME) | | | pscreateddate | Stored+Indexed+Date | 0..1 | Created date | | | psmodifieddate-numeric | Indexed+Long | 1 | REMOVED- Last modified as a number to allow quick sorting | 5005 | | psmodifieddate | Stored+Indexed+Date | 1 | Last modified date as an ISO 8601 date | | | pscontent | Compressed+Indexed+Tokenized | 1 | Full text content | | | pswordcount | Stored+Indexed+Int | 0..1 | Number of words in text content | 5005 | | pslabel | Stored+Indexed | 1..N | Any label(s) for the item (comment label, document label)  | | | psgroupname | Stored+Indexed | 0..N | The full group name of the context group(s) | 5005 | | psgroupid | Stored+Indexed | 0..N | The ID of the context groups(s) | 5005 | ### Media-specific | Name | Type | Card. | Description | Index version | | --- | --- | --- | --- | --- | | psancestor | Indexed | 1..N | All ancestor folders | | | psassignedto | Stored+Indexed | 1 | Full name of assigned to member | | | psassignedtoid | Stored+Indexed+Long | 1 | Member ID of assigned to member | 5003 | | psauthor | Stored+Indexed | 0..1 | Author of comment/task | | | psauthorid | Stored+Indexed+Long | 0..1 | Author member ID of comment/task | 5003 | | psblock-\[name\] | Indexed+Tokenized | 0..N | Text value of all block labels in item | | | psblocklabelname | Stored+Indexed | 0..N | Name(s) of any block labels used | 5002 | | pscomment-assignedto | Stored+Indexed | 1 | Full name of assigned to member of comment | 5401 | | pscomment-assignedtoid | Stored+Indexed+Long | 1 | Member ID of assigned to member of comment | 5401 | | pscomment-duedate | Stored+Indexed+Date | 0..1 | Due date of comment | 5401 | | pscomment-priority | Stored+Indexed | 1 | Priority of comment | 5401 | | pscomment-status | Stored+Indexed | 1 | Status of comment | 5401 | | pscontextexternal | Stored+Indexed | 1 | Whether the context of comment/task is an external URI | 5405 | | pscontextfragment | Stored+Indexed | 1 | Context fragment of comment/task | 5004 | | pscontexturidocumenttype | Stored+Indexed | 0..1 | Context URI document type of comment/task | 9203 | | pscontexturiid | Stored+Indexed+Long | 1 | Context URI ID of comment/task | 5004 | | pscontexturimediatype | Stored+Indexed | 0..1 | Context URI media type of comment/task | 9203 | | pscontexturititle | Stored+Indexed+Tokenized | 0..1 | Context URI title  of comment/task | 9203 | | pscontexturiurltype | Stored+Indexed | 0..1 | Context URI, URL type of comment/task | 9203 | | psdiscussionid | Stored+Indexed+Long | 1 | The ID of the comment discussion | | | psdocid | Stored+Indexed+Case insensitive | 0..1 | Document ID | | | psdocumenttype | Stored+Indexed | 1 | Document type | | | psduedate | Stored+Indexed+Date | 0..1 | Due date of task/document | | | pseditable | Stored+Indexed | 1 | Editable flag | | | psfilename | Stored+Indexed+Tokenized | 1 | File name | | | psfolder | Stored+Indexed | 1 | Full path of the containing folder | | | psfragment | Stored+Indexed | 1 | REMOVED - Fragment ID | 5402 | | psfragmentlabel | Stored+Indexed | 0..N | Any fragment label(s) used | | | psfragmenttype | Stored+Indexed | 0..N | Fragment types used | 5402 | | psgraphicsrc | Stored+Indexed | 0..N | REMOVED - use psimagesrc | 5005 | | psgroupcount | Stored+Indexed+Int | 1 | The number of groups containing a link to or discussion on this URL | 5405 | | psheight | Stored+Indexed+Int | 0..1 | Height in pixels of an image | | | pshost | Stored+Indexed | 1 | The hostname for an external URI (URL) | 5004 | | psimagealt | Stored+Indexed+Tokenized | 0..N | Alt text of all images in document | 9900 | | psimagelabel | Stored+Indexed | 0..N | Label on image in item | 5405 | | psimagesrc | Stored+Indexed | 0..N | Source of all images in document | | | psinline-\[name\] | Stored+Indexed | 0..N | Text value of all inline labels in item | | | psinlinelabelname | Stored+Indexed | 0..N | Name(s) of any inline labels used | 5402 | | pslastediteddate | Stored+Indexed+Date | 0..1 | Last edited date | | | pslatestversion | Stored+Indexed | 1 | Latest document version | | | pslatestversiondate | Stored+Indexed+Date | 0..1 | Date latest version was created | 5007 | | pslinklabel | Stored+Indexed | 0..N | Label on link in item | 5405 | | pslistrole | Stored+Indexed | 0..N | The role of a list/nlist in document | 9900 | | psmedia-createddate | Stored+Indexed+Date | 0..1 | Created date extracted from binary file | 5006 | | psmedia-modifieddate | Stored+Indexed+Date | 0..1 | Last modified date extracted from binary file | 5006 | | psmetadata-\[name\] | Stored+Indexed | 0..N | Text value of document metadata property | | | psmetadatachecked | Stored+Indexed | 0..1 | The last date/time when the metadata was checked against the source URL | 5405 | | psmetadataname | Stored+Indexed | 0..N | Name(s) of any metadata properties used | 9201 | | psowned | Stored+Indexed | 1 | Is document owned by this group | 5002 | | pspagecount | Stored+Indexed+Int | 0..1 | Number of pages in PDF | 5005 | | pspixelcount | Indexed+Long | 0..1 | Width x height of an image | | | psplaceholder | Stored+Indexed | 0..N | The name of a placeholder in document | 9900 | | psprefixcontent | Compressed+Indexed | 0..N | The untokenized prefix plus tokenized heading or para content | 5403 | | pspreformatrole | Stored+Indexed | 0..N | The role of a preformat in document | 9900 | | pspriority | Stored+Indexed | 1 | Priority | | | psproperty-\[name\] | Stored+Indexed | 0..N | Text value of PSML or comment property | | | pspropertyname | Stored+Indexed | 0..N | Name(s) of any properties used | 9201 | | pspublicationid | Stored+Indexed | 0..N | The ID of a publication this object is part of | 5403 | | pspublicationroot | Stored+Indexed | 0..1 | `true` if document is a publication root | 5402 | | psreadonlyinline | Stored+Indexed | 0..N | The name of a read only inline label in document | 9900 | | psreadonlyproperty | Stored+Indexed | 0..N | The name of a read only property in document | 9900 | | psreversexrefconfig | Stored+Indexed | 0..N | Config on forward XRefs in item | 9900 | | psreversexrefcount | Stored+Indexed+Int | 1 | Number of reverse XRefs in item | | | psreversexreflabel | Stored+Indexed | 0..N | Label on reverse XRefs in item | | | psreversexreftype | Stored+Indexed | 0..N | Forward type on reverse XRefs in item | 9200 | | psrootpublicationid | Stored+Indexed | 0..1 | The ID of the publication this document is the root of | 5402 | | psrootpublicationtype | Stored+Indexed | 0..1 | The type of the publication this document is the root of | 91100 | | pssize | Stored+Indexed+Int | 0..1 | File size in bytes | | | pssource | Stored+Indexed | 1 | The allowed values for a URL are `external`, `virtual` or `pageseeder` | 5405 | | psstatus | Stored+Indexed | 1 | Status | | | psstatuschangeddate | Stored+Indexed+Date | 0..1 | Date status was last changed | | | pstablerole | Stored+Indexed | 0..N | The role of a table in document | 9900 | | pstaskdefinitionid | Stored+Indexed+Long | 1 | The ID of the task definition comment | | | psurifolder | Stored+Indexed | 1 | REMOVED - use psfolder | | | psurl | Stored+Indexed | 1 | The URL for an external URI (URL) | 5004 | | psurlmediatype | Stored+Indexed | 0..1 | The media type for the URL source | 5405 | | psurltype | Stored+Indexed | 1 | The configured type for this URL | 5405 | | pswidth | Stored+Indexed+Int | 0..1 | Width in pixels of an image | | | psxrefconfig | Stored+Indexed | 0..N | Config on forward XRefs in item | 9900 | | psxrefcount | Stored+Indexed+Int | 1 | Number of forward XRefs in item | | | psxreflabel | Stored+Indexed | 0..N | Label on forward XRefs in item | | | psxreftype | Stored+Indexed | 0..N | Type on forward XRefs in item | 9200 | ## Fields details ### psancestor | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | No | Indexed | text | 1..N | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(All except URL)* | The full path of the folder where the document is located, as well as all its parent folders, are indexed as *psancestor* fields. This field does not include a trailing ‘/’. This field is used to be able to narrow down the location of an item without knowing precisely its folder. It can also be used to compute the number of items within a folder and its descendants. **Examples:** ```text "/ps/acme/test/Images" ``` ```text "/ps/acme/test" ``` ```text "/ps/acme" ``` ```text "/ps" ``` ### psassignedto | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1 | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg)  ![Task icon](/content/images/icons/task_icon.svg) *(* *All except comment and folder)* | The full name of the person the task or document was assigned to. **Example:** ```text "John Smith" ``` ### psassignedtoid | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | long | 0..1 | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg)  ![Task icon](/content/images/icons/task_icon.svg) *(* *All except comment and folder)* | The member ID of the person the task or document was assigned to. **Example:** ```text 123 ``` ### psauthor | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..1 | ![Task icon](/content/images/icons/task_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) *(Task and comment)* | The *psauthor* is the full name of the person who posted a comment or task. If the member changes their name, that is only reflected in items posted after the name was changed. **Example:** ```text John Smith ``` ### psauthorid | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | long | 0..1 | ![Task icon](/content/images/icons/task_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) *(Task and comment)* | The *psauthorid* is the member ID of the person who posted a comment or task. **Example:** ```text 123 ``` ### psblock-*\[name\]* | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Compressed | Analyzed | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg) *(PSML only)* | The content of each block label in the document as a separate instance of this field. ### psblocklabelname | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg) *(PSML only)* | The name(s) of any block labels used in the document. *Introduced in index version 5002 in PageSeeder version 5.9100.* ### pscomment-assignedto | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1 | ![Comment icon](/content/images/icons/comment_icon.svg)  *(Comment only)* | The full name of the person the comment was assigned to. *Introduced in index version 5401 in PageSeeder version 5.9600.* **Example:** ```text "John Smith" ``` ### pscomment-assignedtoid | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | long | 0..1 | ![Comment icon](/content/images/icons/comment_icon.svg)  *(Comment only)* | The member ID of the person the comment was assigned to. *Introduced in index version 5401 in PageSeeder version 5.9600.* **Example:** ```text 123 ``` ### pscomment-duedate | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Analyzed | datetime | 0..1 | ![Comment icon](/content/images/icons/comment_icon.svg)  *(Comment only)* | The due date of the comment. *Introduced in index version 5401 in PageSeeder version 5.9600.* **Example:** ```text "2012-07-06T19:00:00+11:00" ``` ### pscomment-priority | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..1 | ![Comment icon](/content/images/icons/comment_icon.svg)  *(Comment only)* | The priority of the comment. *Introduced in index version 5401 in PageSeeder version 5.9600.* **Examples:** ```text "High" ``` ```text "Low" ``` ### pscomment-status | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1 | ![Comment icon](/content/images/icons/comment_icon.svg)  *(Comment only)* | The status of the comment. *Introduced in index version 5401 in PageSeeder version 5.9600.* **Examples:** ```text "Open" ``` ```text "Closed" ``` ### pscontent | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Compressed | Tokenized | text | 1 | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg)  ![URL icon](/content/images/icons/url_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(All except images, folders and other files)* | The *pscontent* includes all the textual content of the index item. This field is not available for images, folders or documents that cannot be parsed for content. For URLs, the *pscontent* is the URL itself. **Example:** ```text "An Alice said..." ``` ### pscontextexternal | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1 | ![Task icon](/content/images/icons/task_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) *(Task and comment)* | The *pscontextexternal* flag indicates id the comment/task context is an external URI (URL). *Introduced in index version 5405 in PageSeeder version 5.9900.* **Example:** ```text "true" ``` ```text "false" ``` ### pscontextfragment | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1 | ![Task icon](/content/images/icons/task_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) *(Task and comment)* | The *pscontextfragment* is the URI fragment that a comment or task was posted on. If there was no specific fragment, it is `default`. **Example:** ```text 34 ``` ```text details ``` ### pscontexturiid | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | long | 1 | ![Task icon](/content/images/icons/task_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) *(Task and comment)* | The *pscontexturiid* is the ID of the URI a comment or task was posted on. If there was no URI (i.e. general context), it is `0`. **Example:** ```text 123 ``` ### pscontexturititle | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Tokenized | text | 0..1 | ![Task icon](/content/images/icons/task_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) *(Task and comment)* | The *pscontexturititle* is the title of the URI a comment or task was posted on. *Introduced in index version 9203 in PageSeeder version 6.0000.* **Example:** ```text "My document" ``` ### pscontexturidocumenttype | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..1 | ![Task icon](/content/images/icons/task_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) *(Task and comment)* | The *pscontexturidocumenttype* is the document type of the URI a comment or task was posted on. *Introduced in index version 9203 in PageSeeder version 6.0000.* **Example:** ```text "appendix" ``` ### pscontexturimediatype | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..1 | ![Task icon](/content/images/icons/task_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) *(Task and comment)* | The *pscontexturimediattype* is the media typeof the URI a comment or task was posted on. *Introduced in index version 9203 in PageSeeder version 6.0000.* **Example:** ```text "image/png"   ``` ### pscontexturiurltype | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..1 | ![Task icon](/content/images/icons/task_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) *(Task and comment)* | The *pscontexturiurltype* is the title of the external URI a comment or task was posted on. *Introduced in index version 9203 in PageSeeder version 6.0000.* **Example:** ```text "youtube" ``` ### pscreateddate | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | datetime | 0..1 | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(ALL)* | The date the document, comment or task was created or uploaded to PageSeeder. **Example:** ```text "2012-07-06T19:00:00+11:00" ``` ### psdescription | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Tokenized | text | 1 | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(All except comment/task)* | The *psdescription* is the description entered in the URI properties of each document. It can be used as an abstract and is generally returned in search results when there was no match in the content or other fields. **Example:** ```text "The purpose of this document is ..." ``` ### psdiscussionid | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | long | 1 | ![Comment icon](/content/images/icons/comment_icon.svg)  *(Comment only)* | The ID of the comment discussion. **Example:** ```text "123" ``` ### psdocid | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Case insensitive | text | 0..1 | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(All files, folders and URLs)* | The *psdocid* field takes the document ID given to the specified document. This field is only available if a document ID has been assigned to the URI. *Before PageSeeder v6 this field was tokenized.* **Examples:** ```text "ID-52634-GHG" ``` ```text "PK771622" ``` ### psdocumenttype | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1 | ![PSML icon](/content/images/icons/psml_icon.svg) *(PSML only)* | The *psdocumenttype* field stores the document type of a document. If a document doesn’t have a document type, the value of this field is set to ‘none’ so documents which do not have a document type can be detected. This field is only available to PSML documents. **Examples:** ```text "component" ``` ```text "book" ``` ### psduedate | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Analyzed | datetime | 0..1 | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(* *All except comment and folder)* | The date the task or document is due. **Example:** ```text "2012-07-06T19:00:00+11:00" ``` ### pseditable | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1 | ![PSML icon](/content/images/icons/psml_icon.svg) *(PSML only)* | The *pseditable* flag indicates whether the document is editable. Its only possible values are `true` and `false`. This field is only available to PSML documents. **Examples:** ```text "true" ``` ```text "false" ``` ### psfilename | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Analyzed | text | 1 | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg)  *(Files and folders)* | The *psfilename* is name of the file corresponding to the document. This field is only available for documents and folders. To improve searching the following are tokenized: - the file extension; - any non-alphanumeric character, and; - the “dot” as a separate word. **Examples:** ```text "acme.xml" ``` ```text "My Image.jpg" ``` ### psfolder | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Stored | Indexed | text | 1 | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) *(Files and folders)* | The *psfolder* full path of the folder where the document is located. This field is only available for documents and folders. This field does not include a trailing ‘/’. **Example:** ```text "/ps/acme/test/Images" ``` ### psfragmentlabel | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg) *(PSML only)* | Any fragment label(s) used in the document. ### psfragmenttype | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg)*(PSML only)* | Any fragment type(s) used in the document. ### psgroupcount | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | int | 1 | ![URL icon](/content/images/icons/url_icon.svg) *(URLs only)* | The number of groups containing a document with a link/xref to or discussion on this URL *Introduced in index version 5405 in PageSeeder version 5.9900.* **Example:** ```text 3 ``` ### psgroupid | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Stored | Indexed | numeric | 0..N | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(ALL)* | The *psgroupid* fields store the IDs of the context group(s) for the object. This field is indexed but not analyzed, so it’s not possible to search individual terms within each field value. *Introduced in index version 5005 in PageSeeder version 5.9400 and made numeric in version 6.0000. * **Examples:** ```text "123" ``` ### psgroupname | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Stored | Indexed | text | 0..N | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(ALL)* | The *psgroupname* fields store the full names of the context group(s) for the object. This field is indexed but not analyzed, so it’s not possible to search individual terms within each field value. *Introduced in index version 5005 in PageSeeder version 5.9400.* **Examples:** ```text "acme-specs" ``` ### psheight | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | int | 0..1 | ![Image icon](/content/images/icons/image_icon.svg) *(Images only)* | The *psheight* is the height in pixels of an image. The field is not always available inside an image. **Examples:** ```text 768 ``` ```text 600 ``` ### pshost | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1 | ![URL icon](/content/images/icons/url_icon.svg) *(URLs only)* | The *pshost* field is the hostname of the URL (external URI). **Example:** ```text "example.org" ``` ### psid | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1 | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(ALL)* | The *psid* is a unique identifier for the indexed item. For documents it is the URI ID. For comments it is the XLink ID. **Examples:** ```text 123 ``` ```text 3572843214 ``` ### psimagealt | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Tokenized | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg)*(PSML only)* | The alt (alternative) text description on any image in the document. *Introduced in index version 9900 in PageSeeder version 6.1000.* ### psimagelabel | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(* *All except comment, task and folder)* | Each *psimagelabel* field represents a label on an image in the document. *Introduced in index version 5405 in PageSeeder version 5.9900.* **Example:** ```text "screenshot" ``` ### psimagesrc | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg) *(PSML only)* | Each *psimagesrc* field instance contains the value of the source an image in a PSML document. There should be as many field instances as there are images in the document. **Example:** ```text "/ps/acme/test/Images/sample.png" ``` ### psinline-*\[name\]* | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text/date | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg) *(PSML only)* | The content of each inline label in the document as a separate instance of this field. If `name` ends with `-date`, it is indexed as a date and if it ends with `-text`, it is tokenized and case-insensitive. Currently only ISO format `yyyy-mm-dd` is supported for dates. ### psinlinelabelname | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg) *(PSML only)* | The name(s) of any inline labels used in the document. *Introduced in index version 5402 in PageSeeder version 5.9700.* ### pslabel | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Stored | Indexed | text | 0..N | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(ALL)* | The *pslabel* fields store verbatim, all labels applied to the item (document label, comment label, etc.). It doesn’t include content labels. Since multiple labels can be applied to an item, multiple fields can be stored. This field is indexed but not analyzed, so it’s not possible to search individual terms within each field value. **Examples:** ```text "test" ``` ```text "bug" ``` ```text "for_review" ``` ### pslastediteddate | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | datetime | 1..0 | ![PSML icon](/content/images/icons/psml_icon.svg) *(PSML only)* | The last time the document was edited. This only applies to PSML documents after an edit was made. **Example:** ```text "2012-03-31T14:21:04+10:00" ``` ### pslatestversion | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1 | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(* *All except folder, comment and task)* | The latest version of the document available, if the document has had a version (blank if no version). **Example:** ```text "1.0" ``` ### pslatestversiondate | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | datetime | 0..1 | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(* *All except folder, comment and task)* | The created date for the latest version. *Introduced in index version 5007 in PageSeeder version 5.9501.* **Example:** ```text "2012-07-06T19:00:00+11:00" ``` ### pslinklabel | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(* *All except comment, task and folder)* | Each *pslinklabel* field represents a label on an image in the document. *Introduced in index version 5405 in PageSeeder version 5.9900.* **Example:** ```text "video" ``` ### pslistrole | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg)*(PSML only)* | The role of any list or nlist in the document. If there is no role the value is empty but still listed in facets. *Introduced in index version 9900 in PageSeeder version 6.1000.* ### psmedia-createddate | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | datetime | 0..1 | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) *(Word, PDF, PSML, Images)* | The created date extracted from the binary file (different from the `pscreateddate` except for PSML documents). *Introduced in index version 5006 in PageSeeder version 5.9500.* **Example:** ```text "2012-07-06T19:00:00+11:00" ``` ### psmedia-modifieddate | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | datetime | 0..1 | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) *(Word, PDF, PSML, Images)* | The modified date extracted from the binary file (different from the `psmodifieddate` except for PSML documents). *Introduced in index version 5006 in PageSeeder version 5.9500.* **Example:** ```text "2012-07-06T19:00:00+11:00" ``` ### psmediatype | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Stored | Indexed | text | 1 | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(ALL)* | The *psmediatype* is the media type of the indexed item. All items except items of type ‘fragment’ have a media type.  The following table shows the media type associated with each icon (wildcards are used to indicate any value). | Icon | Media type | | --- | --- | | ![Folder icon](/content/images/icons/folder_icon.svg) | `application/vnd.pageseeder.folder` | | ![Word icon](/content/images/icons/word_icon.svg) | `application/word` | | ![PDF icon](/content/images/icons/pdf_icon.svg) | `application/pdf` | | ![HTML icon](/content/images/icons/html_icon.svg) | `text/html` | | ![XML icon](/content/images/icons/xml_icon.svg) | `application/xml` `text/xml` `*/*+xml` | | ![PSML icon](/content/images/icons/psml_icon.svg) | `application/vnd.pageseeder.psml+xml` | | ![File icon](/content/images/icons/file_icon.svg) | `*/*` | | ![Image icon](/content/images/icons/image_icon.svg) | `image/*` | | ![Task icon](/content/images/icons/task_icon.svg) | `application/vnd.pageseeder.task+xml` | | ![Comment icon](/content/images/icons/comment_icon.svg) | `application/vnd.pageseeder.comment+xml` | **Examples:** ```text "text/xml" ``` ```text "image/png" ``` ```text "application/vnd.pageseeder.comment+xml" ``` ### psmetadata-*\[name\]* | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text/date | 0..N |   ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(All files and URLs)* | The content of each metadata property in the document as a separate instance of this field. If `name` ends with `-text`, it is tokenized and case-insensitive. ### psmetadataname | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N |   ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(All files and URLs)* | The name(s) of any metadata properties used in the document. *Introduced in index version 9201 in PageSeeder version 6.0000.* ### psmetadatachecked | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | datetime | 0..1 | ![URL icon](/content/images/icons/url_icon.svg) *(URLs only)* | The last date and time when the metadata was checked against the source URL for example by using the **Reprocess** option. The format is an ISO 8601 date and time and the resolution for the index is the second. *Introduced in index version 5405 in PageSeeder version 5.9900.* **Example:** ```text "2020-07-14T12:31:00+10:00" ``` ### psmodifieddate | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Stored | Indexed | datetime | 1 | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(ALL)* | The *psmodifieddate* field is an ISO 8601 date and time representation of an indexed item. The date resolution for the index is the second. **Example:** ```text 2012-07-14T12:31:00+10:00 ``` ### psowned | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1 | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) *(All files and folders)* | The *psowned* flag indicates whether the document is owned by the current group (it’s in the group’s [default folder](/reference/glossary/group_folder.md)). *Introduced in index version 5002 in PageSeeder version 5.9100.* **Examples:** ```text "true" ``` ```text "false" ``` ### pspagecount | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | int | 1 | ![PDF icon](/content/images/icons/pdf_icon.svg) *(PDF only)* | Each *pspagecount* field is the total number of pages in the PDF. *Introduced in index version 5005 in PageSeeder version 5.9400.* **Example:** ```text 12 ``` ### pspixelcount | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | No | Indexed | text | 0..1 | ![Image icon](/content/images/icons/image_icon.svg) *(Images only)* | The *pspixelcount* is the total number of pixels in an image calculated as *psweight* × *psheight*. It is only available if both the width and height are available for the image **Examples:** ```text 786432 ``` ```text 48000 ``` ### psplaceholder | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg)*(PSML only)* | The name of any placeholder in the document. *Introduced in index version 9900 in PageSeeder version 6.1000.* ### psprefixcontent | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Compressed | Tokenized except prefix | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg) *(PSML only)* | This field contains heading or para content tokenized and any `@prefix` untokenized. It only contains para content when `@prefix` exists. *Introduced in index version 5403 in PageSeeder version 5.9800.*   ### pspreformatrole | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg)*(PSML only)* | The role of any preformat element in the document. If there is no role the value is empty but still listed in facets. *Introduced in index version 9900 in PageSeeder version 6.1000.* ### pspriority | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..1 | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg)  ![Task icon](/content/images/icons/task_icon.svg) *(* *All except comment and folder)* | The latest priority of the task or document. **Examples:** ```text "High" ``` ```text "Low" ``` ### psproperty-*\[name\]* | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text/date | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(PSML, comment and task)* | The content of each property in the document, comment or task as a separate instance of this field. If `name` ends with `-text`, it is tokenized and case-insensitive. ### pspropertyname | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg) *(PSML only)* | The name(s) of any properties used in the document. *Introduced in index version 9201 in PageSeeder version 6.0000.* ### pspublicationid | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg)  *(PSML, task, comment)* | This field only exists if the document, comment or task is part of a publication. It contains the ID of a publication. *Introduced in index version 5403 in PageSeeder version 5.9800.* > **Note:** Documents of transcluded fragments are not considered part of the publication so that the search doesn’t return duplicate or extra content which isn't part of the publication. Workflows and document level comments/tasks for a transcluded fragment are considered part of the publication as they could have a bearing on the fragment. ### pspublicationroot | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..1 | ![PSML icon](/content/images/icons/psml_icon.svg) *(PSML only)* | This field only exists if the document is the root of a publication and always has the value ` true`. *Introduced in index version 5402 in PageSeeder version 5.9700.* ### psreadonlyinline | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg)*(PSML only)* | The name of any inline label which is inside a section or document with `edit="false"`but not inside the metadata element. *Introduced in index version 9900 in PageSeeder version 6.1000.* ### psreadonlyproperty | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg)*(PSML only)* | The name of any property which is inside a section or document with `edit="false"`but not inside the metadata element. *Introduced in index version 9900 in PageSeeder version 6.1000.* ### psreversexrefconfig | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(* *All except comment, task and folder)* | Each *psreversexrefconfig* field represents a config on a reverse (incoming) xref in the document. If there is no config the value is empty but still listed in facets. *Introduced in index version 9900 in PageSeeder version 6.1000.* **Example:** ```text "citation" ``` ### psreversexrefcount | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | int | 1 | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(* *All except comment, task and folder)* | Each *psreversxrefcount* field is the total number of reverse (incoming) xrefs in the document. **Example:** ```text 12 ``` ### psreversexreflabel | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(* *All except comment, task and folder)* | Each *psreversexreflabel* field represents a label on a reverse (incoming) xref in the document. **Example:** ```text "important" ``` ### psreversexreftype | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(* *All except comment, task and folder)* | Each *psreversexreftype* field represents a forward type on a reverse (incoming) xref in the document. *Introduced in index version 6000 in PageSeeder version 6.0000.* **Example:** ```text "transclude" ``` ### psrootpublicationid | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..1 | ![PSML icon](/content/images/icons/psml_icon.svg) *(PSML only)* | This field only exists if the document is the root of a publication. It contains the ID of this publication. *Introduced in index version 5402 in PageSeeder version 5.9700.* ### psrootpublicationtype | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..1 | ![PSML icon](/content/images/icons/psml_icon.svg) *(PSML only)* | This field only exists if the document is the root of a publication. It contains the type of this publication. *Introduced in index version 91100 in PageSeeder version 6.2000.* ### pssize | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Analyzed | text | 0..1 |   ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg)   ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(All files except PSML)* | The size, in bytes, of the file corresponding to the document. This field does not apply to folders, PSML documents, comments or tasks as they can be edited and the file size doesn’t reflect their size accurately. **Examples:** ```text 7013 ``` ```text 44986 ``` ### pssource | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1 | ![URL icon](/content/images/icons/url_icon.svg) *(URLs only)* | The kind of URL source. Allowed values are `external`, `virtual` or `pageseeder`. *Introduced in index version 5405 in PageSeeder version 5.9900.* **Example:** ```text "virtual" ``` ### psstatus | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1 | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(* *All except comment and folder)* | The latest status of the document or task. *As of index version 91101 in PageSeeder version 6.3 it defaults to “None” for documents without workflows.* **Examples:** ```text "Open" ``` ```text "Closed" ``` ### psstatuschangeddate | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..1 | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg)  ![Task icon](/content/images/icons/task_icon.svg) *(* *All except comment and folder)* | ### pssubtype | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Stored | Indexed | text | 1 | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(ALL)* | The *pssubtype* is used to further separate each type (currently mainly for documents). PageSeeder defines the following subtypes of index items: | pstype  | pssubtype | Description | Media Type | | --- | --- | --- | --- | | `folder` | `folder` | A URI which corresponds to a folder | application/ vnd.pageseeder.folder | | `document` | `document` | A PSML document | application/ vnd.pageseeder\* | | | `image` | | image/\* | | | `video` | | video/\* | | | `audio` | | audio/\* | | | `office` | | application/ vnd.openxmlformats\*,  \*word, \*excel, application/msword | | | `archive` | | \*x-gzip, \*x-tar, \*zip, \*java-archive | | | `pdf` | | application/pdf | | | `math` | *Since index version 9201.* | application/mathml+xml, application/x-tex | | | `other` | | \* | | `fragment` | `fragment` | A URI fragment | application/ vnd.pageseeder.psml+xml | | `comment` | `comment` | A comment | application/ vnd.pageseeder.comment+xml | | `task` | `task` | A normal task | application/ vnd.pageseeder.task+xml | | `task` | `workflow` | A workflow. *Since index version 5005.* | application/ vnd.pageseeder.task+xml | ### pstablerole | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![PSML icon](/content/images/icons/psml_icon.svg)*(PSML only)* | The role of any table in the document. If there is no role the value is empty but still listed in facets. *Introduced in index version 9900 in PageSeeder version 6.1000.* ### pstaskdefinitionid | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | long | 1 | ![Task icon](/content/images/icons/task_icon.svg) *(Task only)* | The ID of the task definition comment. This is the latest comment in the task with `status="Open"` and previous status not `Open`, or for workflows, the latest comment. The following fields take their values from the definition comment: `pssubtype, pslabels, pscreateddate, psauthor, psdescription`. **Example:** ```text "123" ``` ### pstitle | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Tokenized | text | 1 | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(ALL)* | The *pstitle* is a title for the indexed item. For XLinks, it is generally the comment title. For documents, it is the user title, or filename if no title was specified by the user. **Examples:** ```text "Test Document" ``` ```text "Important information" ``` ### pstitle-sort | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | No | Tokenized | text | 1 | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(ALL)* | The *pstitle-sort* is the same as *pstitle* but converted to lower case and not analyzed. It is used for sorting by title. **Examples:** ```text "Test Document" ``` ```text "Important information" ``` ### pstype | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Stored | Indexed | text | 1 | ![Folder icon](/content/images/icons/folder_icon.svg) ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(ALL)* | The *pstype* is used to separate each type of indexed item. PageSeeder defines the following types of index items: | pstype | Description | icon(s) | | --- | --- | --- | | `folder` | A URI which corresponds to a folder | ![Folder icon](/content/images/icons/folder_icon.svg) | | `document` | A URI which corresponds to a document | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) | | `documentversion` | A version of a document (must have group property `indexVersions=true ` ) | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) | | `url` | A URL | ![URL icon](/content/images/icons/url_icon.svg) | | `fragment` | A URI fragment | *No longer supported* | | `comment` | A comment | ![Comment icon](/content/images/icons/comment_icon.svg) | | `task` | A task | ![Task icon](/content/images/icons/task_icon.svg) | ### psurl | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1 | ![URL icon](/content/images/icons/url_icon.svg) *(URLs only)* | The *psurl* field is the full URL of the URL (external URI). **Example:** ```text "http://example.org/test.html" ``` ### psurlmediatype | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..1 | ![URL icon](/content/images/icons/url_icon.svg) *(URLs only)* | The media type for the URL source. *Introduced in index version 5405 in PageSeeder version 5.9900.* **Example:** ```text "text/html" ``` ### psurltype | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1 | ![URL icon](/content/images/icons/url_icon.svg) *(URLs only)* | The configured type for this URL or `default` if there is no type. *Introduced in index version 5405 in PageSeeder version 5.9900.* **Example:** ```text "youtube" ``` ### psversionid The id of the version—only set for version indexing. | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 1..0 | ![PSML icon](/content/images/icons/psml_icon.svg) *(PSML only)* | ### pswidth | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | int | 0..1 | ![Image icon](/content/images/icons/image_icon.svg) *(Images only)* | The *pswidth* is the width in pixels of an image. This field is not always available inside an image. **Examples:** ```text 1024 ``` ```text 800 ``` ### pswordcount | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Stored | Indexed | int | 0..1 | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) ![Comment icon](/content/images/icons/comment_icon.svg) ![Task icon](/content/images/icons/task_icon.svg) *(All except images, folder and other files)* | The *pswordcount* is the number of words (space separated characters) in the content. *Introduced in index version 5005 in PageSeeder version 5.9400.* **Example:** ```text 123 ``` ### psxrefconfig | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(* *All except comment, task and folder)* | Each *psxrefconfig* field represents a config on a forward (outgoing) xref in the document. If there is no config the value is empty but still listed in facets. *Introduced in index version 9900 in PageSeeder version 6.1000.* **Example:** ```text "citation" ``` ### psxrefcount | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | int | 1 | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(* *All except comment, task and folder)* | Each *psxrefcount* field is the total number of forward (outgoing) xrefs in the document. *Introduced in index version 5005 in PageSeeder version 5.9400.* **Example:** ```text 12 ``` ### psxreflabel | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(* *All except comment, task and folder)* | Each *psxreflabel* field represents a label on a forward (outgoing) xref in the document. **Example:** ```text "important" ``` ### psxreftype | Stored | Indexed | Data type | Cardinality | Availability | | --- | --- | --- | --- | --- | | Yes | Indexed | text | 0..N | ![Word icon](/content/images/icons/word_icon.svg) ![PDF icon](/content/images/icons/pdf_icon.svg) ![HTML icon](/content/images/icons/html_icon.svg) ![XML icon](/content/images/icons/xml_icon.svg) ![PSML icon](/content/images/icons/psml_icon.svg) ![Image icon](/content/images/icons/image_icon.svg) ![File icon](/content/images/icons/file_icon.svg) ![URL icon](/content/images/icons/url_icon.svg) *(* *All except comment, task and folder)* | Each *psxreftype* field represents a type on a forward (outgoing) xref in the document. *Introduced in index version 9200 in PageSeeder version 6.0000.* **Example:** ```text "transclude" ``` --- title: "Folders and files" source: https://dev.pageseeder.com/reference/folders_and_files.html last_updated: 2026-08-11T16:24:56+10:00 tokens: ~401 --- # Folders and files This is a directory of the files that control key functionality in the PageSeeder application. The overall file organization is the same for both the PageSeeder server and the PageSeeder Publisher. > **Note:** The content of this section provides guidance for important files, but it isn’t a comprehensive listing. Also, the organization of files for systems that inherit their install from an earlier version of PageSeeder might be significantly different to this documentation. Additional information is in the [configuration guide](/guide/configuration.md). ### Webapp folders Unless specified otherwise, all the following `/{paths}` start from the root of the Web app directory. For the main server, this is: They include: - The [default template](/reference/folders_and_files/default_template.md) folder for the PageSeeder installation, including default built-in document types, scripts, and configuration files. - The [config](/reference/folders_and_files/config_folder.md) folder contains your entire PageSeeder configuration including your custom [project template folders](/reference/folders_and_files/project_template.md). - The [state](/reference/folders_and_files/state_folder.md) folder contains files generated by the system. - The `weborganic` folder contains all files that are visible to the Web but private to PageSeeder. This folder is part of a normal installation and there should be no reason to change anything in this folder. ## System folders System folders include: - The [documents folder](/reference/folders_and_files/documents_folder.md). --- title: "Document type" source: https://dev.pageseeder.com/reference/glossary/document_type.html description: "Document types in PageSeeder function as templates that customize content structure, presentation, editing interfaces, document location and naming, content constraints, validation, and import/export processing." last_updated: 2026-09-08T11:52:18+10:00 tokens: ~108 --- # Document type In PageSeeder, a document type can be compared to a ‘template’ in Word or FrameMaker. Document types are used to customize aspects of the content such as: - Content structure, presentation and editing interface. - Location and naming of documents. - Constraints and validation of content. - Any special import / export processing. For further information, *see* [document types](/guide/configuration/psml.md). --- title: "MathML" source: https://dev.pageseeder.com/reference/glossary/mathml.html description: "MathML is a W3C standard for mathematical content on the web, supported in PageSeeder for display and storage. Use `.mml` or `.mathml` file extensions for documents, or `application/mathml+xml` for fragments. PageSeeder renders math xrefs automatically and supports MathML export to Word and PDF formats." last_updated: 2026-09-05T17:34:47+10:00 tokens: ~1054 --- # MathML [MathML](https://www.w3.org/Math/whatIsMathML.html) is intended to facilitate the use and re-use of mathematical and scientific content on the Web. It is supported for display and storage in PageSeeder. > **Note:** To display a mathematical expression using MathML, use the `math` xref type. PageSeeder doesn’t support any inline label to render MathML.  *See also* [AsciiMath](/reference/glossary/asciimath.md). ## MathML documents Use the file extension `.mml` or `.mathml` for MathML documents. PageSeeder can render the MathML equation: ![MathML – Equation document example (view)](/content/images/glossary/mathml_doc_example_render.webp) Or you can view the source: ![MathML – Equation document example (source)](/content/images/glossary/mathml_doc_example_source.webp) ## MathML fragments Use the media type `application/mathml+xml` for MathML media fragments. > **Note:** You don’t need to declare the MathML namespace inside a media fragment. So `` is equivalent to ``. **Example** ```xml [ 1 0 0 1 ] ``` Renders as: ![Mathml – Matrix example](/content/images/glossary/mathml_matrix_example.webp) ## Math xrefs PageSeeder automatically renders xrefs of type `math` pointing to MathML documents or fragments. To let users select MathML documents to include in their content, you need to create a math xref config. ```xml ``` OR ```xml ``` *See* [PSML xref config](/guide/configuration/psml/psml_xref_config.md) for details. ### Example The following is an example of a math xref to a MathML document. The source in your PSML document includes the MathML content wrapped into a `` element within the xref. ```xml σ = 1 N ∑ i = 1 N ( x i − μ ) 2 ``` Renders as: ![MathML – Standard deviation](/content/images/glossary/mathml_math_xref_view_v60000.webp) If you enable the **Outline transclusions** option, it shows as: ![MathML – Xref example](/content/images/glossary/mathml_math_xref.webp) ## Publishing MathML PageSeeder supports MathML in both Word and PDF. Microsoft Office supports MathML, so MathML content is directly exported to the Word document. When publishing PDF documents, PageSeeder first renders your MathML as a PNG image to include in your PDF. --- title: "Subproject" source: https://dev.pageseeder.com/reference/glossary/sub_project.html description: "A subproject is a project organized hierarchically below another project or subproject, following a naming convention with hyphens (e.g., acme-marketing under acme)." last_updated: 2026-09-08T14:03:03+10:00 tokens: ~65 --- # Subproject Is a [project](/reference/glossary/project.md) below another project or subproject. For example, the projects: - **acme-marketing** would be a subproject of **acme.** - **acme-marketing-clients** would be a subproject of **acme-marketing.** --- title: "Microsoft Excel" source: https://dev.pageseeder.com/reference/glossary/microsoft_excel.html description: "Microsoft Excel support in PageSeeder includes saving search results as CSV for import and using Excel worksheets to build document collections. See Open XML for additional details." last_updated: 2026-08-11T16:29:59+10:00 tokens: ~102 --- # Microsoft Excel Is supported by PageSeeder in several different ways. The most common being the following: - Saving the results of a search in CSV format so the data can be imported into Excel. - The use of an Excel worksheet to build a document collection – *see* this [tutorial](/get_started/tutorials/upload_excel_as_psml.md) for further details. *See* [Open XML](/reference/glossary/open_xml.md). --- title: "Author" source: https://dev.pageseeder.com/reference/glossary/author.html description: "An author is the person who submits comments, versions, notes, or edits to PageSeeder. Authors can be registered members with account details or non-members who provide a name." last_updated: 2026-09-08T13:55:47+10:00 tokens: ~622 --- # Author The person who submitted a [comment](/reference/glossary/comment.md), [version](/reference/glossary/version.md), [note](/reference/glossary/edit_note.md) or edit to PageSeeder. In the user interface, PageSeeder displays a human-readable name to identify the author. ## Members When the author has an account on PageSeeder, the author is the [member](/reference/glossary/member.md) and might include other details such as an email address and username. In that case, the API uses the [\ element](/api/elements/element_author.md), inserting all the [\ element](/api/elements/element_member.md) attributes to represent an author: ```xml Michael Hodges ``` Or an JSON object name `author`: ```json {  "id": 13, "firstname": "Michael" "surname": "Hodges", "username": "mhodges" "status": "activated", "fullname": "Michael Hodges" } ``` If the member hasn’t activated their account, the name is usually “Member” followed by a random number assigned when the account is created. For example, `"Member 67"`. When the user enters their actual name, it is automatically updated. If the member account is deleted from PageSeeder, only the original name is retained, and other details are no longer updated. It appears like a non-member. Adding or removing a member from the group has no affect on the name. If the member account is deleted from the server with the “**Remove name and email from comments****, edits, etc.**” option, all member details are expunged from PageSeeder and the author is shown as “Name removed”. ```xml Name removed ``` ## Non-members When a [comment](/reference/glossary/comment.md) is posted by someone that doesn’t have an account on a [PageSeeder server](/reference/glossary/pageseeder_server.md), they have to provide a human-readable name. ```xml John Citizen ``` Or ```json { "fullname": "John Citizen" } ``` This happens when a [group](/reference/glossary/group.md) is open to the [general public](/reference/glossary/group_public.md). When someone who isn’t a [member](/reference/glossary/member.md) posts a comment using an API call such as [Service: /comments/forurl \[POST\]](/api/services/create-comment-url-public_post.md), they can be prompted for a name. --- title: "Token" source: https://dev.pageseeder.com/reference/glossary/token.html description: "A random string generated by PageSeeder for authentication and authorization, including OAuth access tokens, security tokens for user account operations, and authorization codes." last_updated: 2026-09-08T13:57:02+10:00 tokens: ~423 --- # Token A random string generated by PageSeeder and used for authentication or authorization depending on the type of token used. ## Access token Access tokens are issued for [OAuth clients](/reference/glossary/oauth_client.md) on behalf of a member, to access their account through the API. The OAuth client configuration determines which OAuth authorization flow clients can use to get an access token as well as how long the token is valid for. PageSeeder implements the following standard OAuth endpoints: - `[Server URL]/ps/oauth/authorize` : gets an authorization code. - `[Server URL]/ps/oauth/token` : gets an access token. ## Built-in security tokens Security tokens are always associated with a specific user account. | Type | Purpose | Default lifetime | | --- | --- | --- | | `remember-me` | Remember me cookie used for sign-in | 90 days | | `activate-member` | Account activation  | 2 days | | `change-email` | Change of email address | 12 hours | | `reset-password` | Reset password flow | 12 hours | End users can list and revoke any persistent tokens associated with them from their **security settings and password** page. The expiration of security tokens can be configured in the [organization config](/guide/configuration/organization_customization.md). For example: ```xml ``` ### Other types of token - [Authorization codes](/reference/glossary/authorization_code.md) – are special types of tokens that are short-lived and single-use. - [ID Token](/reference/glossary/id_token.md) – carries identity information about a user. --- title: "Default group setup" source: https://dev.pageseeder.com/reference/glossary/default_group_setup.html description: "Settings for initializing a PageSeeder group, including folder structure for documents, images, attachments, and default files such as the homepage." last_updated: 2026-08-11T16:26:01+10:00 tokens: ~61 --- # Default group setup These are the settings used to initialize a [group](/reference/glossary/group.md). They include the [folder structure](/reference/glossary/folder.md) (documents, image, attachments and more) and files like the homepage. --- title: "Public" source: https://dev.pageseeder.com/reference/glossary/group_public.html description: "Public access in PageSeeder allows non-members to view group content based on settings. Roles control functionality while groups filter content. Permissions are managed through public constraints rather than member restrictions." last_updated: 2026-09-08T12:18:37+10:00 tokens: ~358 --- # Public The conventional meaning for ‘public’ refers to an external, often anonymous, community. In PageSeeder, setting to ‘public’ means you provide access to people who are NOT registered to the same [group](/reference/glossary/group.md) – public just means we don't check for the group membership. A helpful rule for PageSeeder solutions is that [roles](/reference/glossary/role.md) filter functionality and groups filter content. Or put another way, because every group [member](/reference/glossary/member.md) can see all content, permission models are expressed as constraints on the ‘public’ not the ‘members’. To control whether **non-members** can see documents in the group, use the **`Public`** options, under **[advanced options](/reference/glossary/group_config_advanced_options.md)** on the **group configuration page**. To make the group visible to public (this doesn’t make any content visible but allows anyone with an account to request to join the group): ![Group configuration – Visible to public](/content/images/glossary/group_configuration_public_group_v60000.webp) To allow comments added by public: ![Group configuration – Comments added by public](/content/images/glossary/group_configuration_public_add_v60000.webp) To make comments and documents accessible to public: ![Group configuration – Comments accessible by public](/content/images/glossary/group_configuration_public_view_v60000.webp) --- title: "Site prefix" source: https://dev.pageseeder.com/reference/glossary/site_prefix.html description: "The site prefix is a configurable value in PageSeeder's global properties that determines the URL path prefix for all PageSeeder URLs. It defaults to `/ps`, meaning all URLs start with `/ps/*`. Changing it is rarely necessary." last_updated: 2026-09-05T15:50:31+10:00 tokens: ~93 --- # Site prefix Is the prefix assigned to PageSeeder URLs. The value of the site prefix is stored in the [global properties](/guide/configuration/properties/global_properties.md). The default value is  `/ps` and all PageSeeder URLs will start with this. In other words, all URLs match: ``` /ps/* ``` > **Note:** There is generally no reason to change the site prefix. --- title: "Group folder" source: https://dev.pageseeder.com/reference/glossary/group_folder.html description: "A group folder is a container for URIs in a group that acts as the primary mechanism for sharing and organizing documents. It defines scheme, host, port, and path attributes, with every document belonging to at least one group folder." last_updated: 2026-09-14T13:54:35+10:00 tokens: ~585 --- # Group folder Is an object that acts as a container for [URIs](/reference/glossary/uri.md) in a [group](/reference/glossary/group.md). All documents and folders belong to at least one group folder. Each group folder contains its own tree of documents and folders.  The main attributes of a group folder are: | Name | Definition | Default | | --- | --- | --- | | Scheme | Usually `http` or `https` | `websiteScheme` | | Host | For example “localhost” or “example.org” | `websiteAddress` | | Port | The port for the URI | `websitePort` | | Path | The path prefix common to all URIs under the group folder. It ends with a wildcard ‘\*’. For example: `/ps/acme/test/*` |  (no default) |  The default values are defined in the [global properties](/guide/configuration/properties/global_properties.md). ## Role A group folder is bound to its own scheme, host and port, but documents can belong to multiple group folders. Because of this, group folders act as the primary mechanism for [sharing documents](/guide/documents/shared_documents.md) or providing [public access](/reference/glossary/group_public.md) to documents within a group. ## Default group folders Every group is created with two predefined group folders. These inherit the scheme, host and port from the host server.  | Document root | The default top level folder for the documents, for example if group is acme-specs: `[psaddress]/ps/acme/specs/*` | | --- | --- | | Comment root | The container to attach all general comments, for example if group ID is 123: `[psaddress]/ps/servlet/com.pageseeder.general/123/*` | ## Public group folders A public group folder can provide public access to a set of documents within a group even if that group is “private”.  ## Group folders vs folders Both group folders and regular folders are used to organize documents. Group folders are explicitly associated to every document: every document (and folder) belongs to a group folder.  A regular folder shares the same scheme, host and port as its ancestor group folder. The documents within a regular folder share the same group folder, but the relationship between documents and folders is implied by the shared subpath.  ## Group folder administration Group folders can only be configured by project managers or [administrators](/reference/glossary/administrator.md). --- title: "Block xref" source: https://dev.pageseeder.com/reference/glossary/block_xref.html description: "Block xref is a PageSeeder cross-reference type for standalone elements with multiple processing options: None for standard links, Alternate for high-resolution variants, Embed for publishing resolution, Transclude for inline display, and Math for equations." last_updated: 2026-09-05T17:36:31+10:00 tokens: ~268 --- # Block xref A type of [cross-reference](/reference/glossary/cross_reference.md) that references content that is to appear as a standalone element. The different ways a block xref can be processed are the following: - **None** – used when creating a standard link from text to a target document or fragment. - **Alternate** – typically used with images (but can be used for other content such as citations) where an alternate representation might be needed to output a high-resolution print document, rather than a low-resolution, editing view.  - **Embed** – for creating a reference that is resolved by publishing, for example, by [references documents](/reference/glossary/references_document.md). - **Transclude** – a link type that displays the target in the source document as a [transclusion](/reference/glossary/transclusion.md). - **Math** – to display [mathematical equations](/reference/glossary/mathml.md) inline. In PageSeeder [PSML](/reference/glossary/psml.md), block xrefs are expressed using the `` element: ```xml ``` --- title: "Document title" source: https://dev.pageseeder.com/reference/glossary/document_title.html description: "The document title is a metadata property of PageSeeder documents that must not exceed 250 characters. It appears in the document header, differs from the first heading, and is used to generate the filename when creating new documents." last_updated: 2026-09-05T17:33:35+10:00 tokens: ~447 --- # Document title Refers to a property of a [document](/reference/glossary/document.md). All PageSeeder documents, regardless of their media type or content, have a Document title. The Document title is part of the document metadata. It appears in the document header when viewing or editing documents and can be edited through the **document info and metadata panel** or document toolbar. **Document title restrictions** The document title must not exceed 250 characters. ## Document title vs. first heading It is not to be confused with the first heading in the content of PSML documents, which is sometimes casually referred to as the “document title”. ![Document title vs heading](/content/images/glossary/title_vs_heading_v60000.webp) When a PSML document is created, a heading in the content is generally populated with the Document title property. So, unless either the document title or the first heading have been edited subsequently, they have the same value. PageSeeder warns when the document title and the first heading do not match. ## Document title and filename When creating documents, the document title is used to generate the [filename](/reference/glossary/filename.md) of the document and the first heading of the document. ![Document title vs filename](/content/images/glossary/title_vs_filename_v60000.webp) Conversely, when a document title is not specified, it inherits the name of the file. This generally occurs when files are uploaded (for example, images). When uploading a Word document, if there is a Title in the DOCX document properties, this becomes the PSML Document title. The PSML filename is then the same as the DOCX filename. > **Note:** For more information, see [element \](/api/elements/element_displaytitle.md). --- title: "Overwrite" source: https://dev.pageseeder.com/reference/glossary/overwrite.html description: "The Overwrite feature in PageSeeder allows content replacement during upload operations. It flags documents with matching paths, updates PSML fragment content while preserving history, and completely replaces non-PSML files. Protected sections can prevent overwrites using the overwrite=\"false\" attribute." last_updated: 2026-09-08T13:59:18+10:00 tokens: ~678 --- # Overwrite An option or setting which allows content to be replaced during an upload operation. ## Document upload When uploading documents that have the same path as existing documents (matching filename and folder), PageSeeder flags these documents as overwrites in the **upload document dialog**, so that you know which documents will be updated. If you proceed with the upload, the content of these documents is automatically updated. When you overwrite PSML documents, every fragment content that has changed is replaced and marked as edits so you can see what the previous content was in the [document history](/reference/glossary/document_history.md). When you overwrite non-PSML documents, their content is completely replaced by the uploaded file. > **Warning:** When you overwrite a non-PSML file, the previous content is not recoverable because PageSeeder doesn’t keep a copy of the original content. The document information (title, docid, publication id/type, description, labels) isn’t updated by default. If you want to also update the document information, click the **Overwrite metadata and document properties** option. In the API, the options to overwrite and also overwrite the document information are specified using the `overwrite` and `overwrite-properties` of the [loading zone start service](/api/services/start-loading_post.md). ## Image upload By default, PageSeeder warns users when they try to upload an image to a document that would replace an existing image that has the same filename in the same folder. When editing, the **Overwrite** option is available when using the upload **Upload** option in the **image dialog**. When enabled, the uploaded image replaces any existing image without warning. ## Protected sections Sections in PSML documents can be protected from changes during upload by setting the `overwrite` attribute to `false` on the [\ element](/psml/elements/element_section.md). For example: ```xml
``` When a document is uploaded over an existing document, PageSeeder checks the structure of the existing document for protected sections. If the uploaded document contains the same section, the content within the protected section of the existing document is preserved and is not affected by the upload. > **Tip:** Protected sections are useful in cases when documents include content that might be updated outside PageSeeder and content that is maintained by an editor within PageSeeder. It’s possible to remove the section protection by uploading the same document with the section’s  `overwrite` attribute set to `true`. --- title: "Duplicate" source: https://dev.pageseeder.com/reference/glossary/duplicate.html description: "This article explains how PageSeeder modeling uses links to avoid data duplication while managing trade-offs between redundancy and dependencies, covering publish, shallow, and collection duplicate patterns." last_updated: 2026-09-08T12:19:55+10:00 tokens: ~568 --- # Duplicate Computer science has long discussed the issue of redundancy vs dependency and from time-to-time, it is a topic that arises in PageSeeder modeling. The purpose of this article is to explain how modeling with links can address use cases that might otherwise require data duplication. However, the trade-off of using links to avoid redundancy can be the creation of dependencies. Consider the following scenarios: - Teacher and student views of a text book, where the teacher view has additional notes on a topic. - Multiple parties simultaneously reviewing a document but wanting comments to be visible to only the other members of their party. - Document fragments appearing in multiple parts of a publication but only requiring a single update. ## Publish duplicate (also known as a **Filter duplicate**) This pattern is the safest and easiest way to manage duplicate content. Only a single copy of the data exists for editing and review. A developer processes this as input and duplicates the content in the output format. The difference between a “publish duplicate” and a “filter duplicate” is that publish is “additive” (add teacher notes to the common text) and filter is “subtractive” (strip the teacher notes from the student text). ## Shallow duplicate This pattern is how the [documents page](/reference/glossary/folder_view.md) copies a single file. With a shallow duplicate, any links that terminate outside the source document are copied to the duplicated document but the link destination is unchanged. In other words, if *docA* links to *docB*, when *docA* is duplicated to create *docC*, it also links to *docB*. > **Note:** Edit notes, comments, tasks, versions and workflows are not duplicated. ![Folders page – Duplicate](/content/images/glossary/folder_view_page_duplicate_v60000.webp) ## Collection duplicate This pattern replicates an entire collection of content and updates the path references to reflect the new location. It must be coded for each circumstance, but this tutorial provides some guidance for developers: [Creating document collections](/get_started/tutorials/how_to_create_document_collections_from_a_template.md). This is similar to exporting a collection and then re-importing it to a different group. --- title: "Comment formatting" source: https://dev.pageseeder.com/reference/glossary/comment_format.html description: "Comments in PageSeeder support Markdown formatting, allowing users to add basic document elements like headings, lists, links, bold, and italic text through simple text syntax that remains unobtrusive and intuitive." last_updated: 2026-08-11T16:28:18+10:00 tokens: ~235 --- # Comment formatting Comments posted by email or through the user interface are stored in plain text. However, to leverage the formatting capabilities of modern browsers, comments can include basic formatting through the use of the popular language, [Markdown](/reference/glossary/markdown.md). Markdown supports all the common document objects from a simple, text syntax, for example, headings, numbered and unnumbered (bullet) lists, links, bold, and italic. A key design objective of Markdown is that the raw format is unobtrusive. In fact, many people use Markdown conventions when they type email or plain text documents. These include asterisks around `*inline text*` for emphasis (formatted as *inline text*), or a number and full stop for a numbered list: `1. Some text.` `2. Some more text.` These are transformed by Markdown into a more typographically correct list like the following: 1. Some text. 2. Some more text.  --- title: "Numbered paragraphs" source: https://dev.pageseeder.com/reference/glossary/numbered_paragraphs.html description: "Guidance on implementing complex numbering schemes for paragraphs in PageSeeder, covering import/export configurations, related features like numbered headings and lists, with references to Microsoft Word integration." last_updated: 2026-08-11T16:29:34+10:00 tokens: ~279 --- # Numbered paragraphs A significant amount of development effort has been invested to ensure that even the most complex numbering schemes can be supported in PageSeeder. In many cases, this is achievable with less effort than using Microsoft Word or similar applications and produces superior results. However, the issue of numbering can span the entire document lifecycle, which makes it hard to cover in a single article. For understanding how numbering works in PageSeeder, a good place to start is the [Microsoft Word DOCX – import config usage](/guide/publishing/ant_api/extensions/microsoft_word_docx_import_config_usage.md) or [Export Microsoft Word DOCX config usage](/guide/publishing/ant_api/extensions/microsoft_word_docx_export_config_usage.md). When setting up numbered paragraphs, it is important to also consider [numbered headings](/reference/glossary/numbered_headings.md) and [lists](/reference/glossary/list.md). For further understanding of the complexities of numbering in Word, consider reading [Word’s Numbering Explained.](https://wordmvp.com/FAQs/Numbering/WordsNumberingExplained.htm) --- title: "group config – advanced options" source: https://dev.pageseeder.com/reference/glossary/group_config_advanced_options.html description: "This document outlines advanced configuration options for PageSeeder groups, covering group settings like ownership and welcome messages, member registration and roles, and comment moderation policies." last_updated: 2026-09-14T15:53:56+10:00 tokens: ~625 --- # group config – advanced options These settings can be found in **Advanced Options** on the **group configuration page** located under group administration. For more information about the API, *see* [Service: edit-group](/api/services/edit-group_patch.md). ## Group - **Parent project** – the name of the parent project (readonly). - [Group owner](/reference/glossary/group_owner.md) – Owner of the group. - [Template](/reference/glossary/project_template.md) – Usually the same as the project for this group. - **Related Website URL** – URL of external website for this group, to be available on the group homepage. - **Welcome message** – included in the email sent to new members of the group, and is one of the most commonly edited options when quickly creating a group. - **Allow contributors in this group to edit all URLs on the server** – This allows contributors or higher in the group to edit title, description, labels, URL, metadata or archive/unarchive any [URL](/reference/glossary/url.md) across the whole server. > **Deprecated:** - **Access Log **(**deprecated)** – (access logs are now controlled by [global properties](/guide/configuration/properties/global_properties.md)) *–* Indicates whether the access log for the group is saved. ## Member - [Self Registration](/reference/glossary/member_registration.md) – The type of self-registration process. - [Member default role](/reference/glossary/role.md) – The default [role](/reference/glossary/role.md) of members when registering. - [Member default notification](/reference/glossary/notification.md) – The default member notification. - **Group Visible to** – Name of group this group is visible to (usually the same as name). Set to [public](/reference/glossary/group_public.md) to allow self registration. - **Moderator** – If joining is moderated, who is the moderator. - [Details form](/guide/configuration/custom_member_details.md) – Name of the template for collecting member details. ## Comments - [Comments can be added by](/reference/glossary/comment.md) – The minimum member role required to add comments. - [Comments and group accessible to public](/reference/glossary/group_public.md) – Indicates whether the public can view comments and the group. - Comment moderation: - [Moderate all comments](/reference/glossary/moderator.md) – Indicates whether all comments are moderated. - [Moderate emailed comments](/reference/glossary/moderator.md) – Indicates whether all emailed comments are moderated. --- title: "Search" source: https://dev.pageseeder.com/reference/glossary/search.html description: "PageSeeder's search capability, built on Apache Lucene technology, provides end users and developers with multiple interfaces to find and retrieve content efficiently." last_updated: 2026-09-08T14:02:36+10:00 tokens: ~84 --- # Search Built on the [Apache Lucene](https://lucene.apache.org/core) technology, PageSeeder offers end users and developers several interfaces to find and retrieve content using the search capability. For more information, see [PageSeeder search](/api/services/group-search_get.md) and [index XML](/reference/glossary/index_xml.md). --- title: "Batch processing" source: https://dev.pageseeder.com/reference/glossary/batch_processing.html description: "Batch processing in PageSeeder can be performed in two ways: through the user interface via search results or by configuring publish tasks at the folder level using task config. The Ant API also enables batch processing without the UI." last_updated: 2026-08-11T16:37:57+10:00 tokens: ~191 --- # Batch (or “bulk”) processing There are two ways to batch process PageSeeder [documents](/reference/glossary/document.md) through the user interface. One is using the search results, and the other is to configure a [publish task](/reference/glossary/publish_task.md) to run at the [folder](/reference/glossary/folder.md) level using the [task config](/guide/publishing/ant_api/tasks/task_config.md). The search results page, in the format-sheet edit sheet format, allows users to process multiple files at once using one of the following functions. ![Batch options from selected search results](/content/images/glossary/batch_options_v60000.webp) Batch processing without the user interface can be done through the [Ant API](/guide/publishing/ant_api.md). --- title: "Project template" source: https://dev.pageseeder.com/reference/glossary/project_template.html description: "The project template is a configurable set of files that controls group behavior within a project, applying hierarchically from default to global to project-specific templates, with support for document types, labels, email templates, and publish scripts." last_updated: 2026-09-14T13:54:31+10:00 tokens: ~1144 --- # Project template The project template is a set of files that configure the behavior of groups within a project. When you create a new project or group – there is no project template – unless you start customizing [labels](/reference/glossary/labels.md), or adding [document types](/reference/glossary/document_type.md). It’s only when you edit the document types that we create the relevant files automatically for you and prefill them. If you add new document types for that project, we automatically create the project [template folder](/reference/glossary/template_folder.md) and any related required files and prefill them with sample content to quick start the process. If you change the labels, we also create the project template folder and the labels file with the labels for that project. Any file that is created for the project template automatically creates the project template folder. ## How templates are applied Templates are generally additive and apply from most specific first to least specific – the project template extends the [global template](/reference/glossary/global_template.md) which extends the [default template](/reference/glossary/default_template.md). ![Project template hierarchy](/content/images/glossary/project_template_hierarchy.svg) The *effective project template* is the collection of all the files that are taken into account in the project when you include the default and global template. To compute the effective template, PageSeeder includes the files from all the applicable templates (default, global and the local project). If some configuration files have the same name and path, the file from the most specific template takes precedence. > **Tip:** Avoid overriding the [built-in document types](/reference/glossary/builtin_document_types.md) (default, help, and references) in the default template. It makes it harder to explain the behavior to end-users and might have some unexpected side-effects. Extending them by adding a [Schematron](/reference/glossary/schematron.md) or custom styles is generally okay. ## Example ![Effective project template](/content/images/glossary/effective_project_template.webp) ## Labels [Labels](/reference/glossary/labels.md) are used in many contexts within a project. PageSeeder doesn’t define any default labels – the labels configuration in the default template is empty. Use the global template to define labels to use everywhere in PageSeeder. If you define both global template labels and project template labels, the project template labels override the global template labels. ## Email templates [Email templates](/guide/configuration/emails.md) let you change the content, wording, and style of the emails sent by PageSeeder. > **Tip:** If you only need to customize the branding of your emails (logo, color scheme, styles, footer or domain), use the [organization](/reference/glossary/organization.md) configuration. If the project template is the global template, then PageSeeder uses these custom email templates instead of the default ones. If you define template emails for non-project specific notifications (for example, to change password) on a project that isn’t the global template, you need to specify the project template in API requests, otherwise, PageSeeder uses the global or default template. ## Publish scripts [Publish scripts](/reference/glossary/publish_script.md) let you define publish, export and import actions for your project. > **Note:** The **publish scripts page** only shows scripts defined in the current project template, not the global or default templates. ## Template configuration The template configuration includes: - [Document types](/reference/glossary/document_type.md) (for PSML document). - [Media types](/reference/glossary/media_type.md) (for non-PSML document). - [URL types](/guide/configuration/url_types.md) – global template only. - [Publication types](/reference/glossary/references_document.md) - [Schematron](/reference/glossary/schematron.md) validation patterns. - [Xref types](/guide/configuration/psml/psml_xref_config.md) ## Template files If you’re an administrator, you can view and manage the template files directly on the **template configuration page**. If you add a new document type for the project, PageSeeder automatically creates a folder and any related required file, and prefills them with sample content to quick start the process. For example, if you change the labels, we also create a `label` folder and the `label-config.xml` file with the labels for that project. --- title: "Xref list editor" source: https://dev.pageseeder.com/reference/glossary/xref_list_editor.html description: "A specialized PSML fragment editor for managing cross-references, allowing users to add, delete, and reorganize xrefs within xref-fragment elements. Typically configured for the second fragment of references documents." last_updated: 2026-09-05T17:36:25+10:00 tokens: ~154 --- # Xref list editor This is a specialized PSML fragment editor to add to, delete or reorganize a list of [xrefs](/reference/glossary/xref.md) (cross-references).  Edits to the [\](/psml/elements/element_xref-fragment.md) element invoke this editor. By default, the second fragment of a [references document](/reference/glossary/references_document.md) is configured to invoke the xref list editor. Adding an `` must be done through the [PSML document template](/guide/configuration/psml/psml_document_template.md) – there is no way to add one through the standard end-user interface. --- title: "Schematron" source: https://dev.pageseeder.com/reference/glossary/schematron.html description: "Schematron is an ISO standard offering robust XML validation with customizable error messages. PageSeeder supports Schematron for document validation through PSML Schematron, sample code, and validation tools." last_updated: 2026-09-14T15:59:05+10:00 tokens: ~146 --- # Schematron An ISO standard with powerful validation capabilities and configurable error messages. Further information about the standard is available via the [Schematron Wikipedia page](https://en.wikipedia.org/wiki/Schematron). *Also see* [XSD files](/reference/glossary/xsd_files.md). Information regarding support for Schematron in PageSeeder can be found in the following: - [PSML Schematron](/guide/configuration/psml/psml_schematron.md) - [Sample code](/reference/sample_code/schematron.md) - [Validating documents](/guide/documents/validating_pageseeder_documents.md). --- title: "Fragment identifier" source: https://dev.pageseeder.com/reference/glossary/fragment_id.html description: "A fragment identifier uniquely identifies a fragment within a PageSeeder document, enabling precise updates to specific document sections without replacing the entire document or affecting other content." last_updated: 2026-09-05T17:36:31+10:00 tokens: ~278 --- # Fragment identifier A unique identifier for a [fragment](/reference/glossary/fragment.md) within a [document](/reference/glossary/document.md). The [fragment ID](/psml/elements/element_fragment.md) provides developers with a more precise mechanism for updating documents that have been created outside PageSeeder. In a conventional environment, uploading and overwriting an existing file would replace the document. However, by adding new fragment IDs to an existing PSML file before uploading and overwriting, the fragments are added to the document without replacing existing fragments. Likewise, using a fragment ID it is possible to update only a select part of an existing document, say ‘monthly sales figures’, without any change to the rest of the document. In this circumstance, the overwrite is simply recorded as an edit by the person uploading the document. > **Warning:** By managing fragment IDs externally, developers are delegating responsibility from PageSeeder to themselves. There is some inherent risk in this and it’s not recommended for new developers or those working on their own. --- title: "Jetty" source: https://dev.pageseeder.com/reference/glossary/jetty.html description: "Jetty is a servlet engine and HTTP server commonly used for deploying Berlioz applications. While not a hard dependency, Berlioz has been extensively tested on Jetty, with version 9 being recommended. Apache Tomcat serves as an alternative." last_updated: 2026-09-14T15:45:10+10:00 tokens: ~86 --- # Jetty A servlet engine and HTTP server where most [Berlioz](/reference/glossary/berlioz.md) apps are deployed. Although Berlioz doesn’t depend on Jetty, it has been extensively tested on Jetty. It is best to use [Jetty 10 or later](https://www.eclipse.org/jetty). An alternative to Jetty is [Apache Tomcat](https://tomcat.apache.org/). --- title: "URI pattern" source: https://dev.pageseeder.com/reference/glossary/uri_pattern.html description: "A URI pattern is a URL-like notation used by PageSeeder and Berlioz to match URLs and identify which service or user interface component to invoke. It uses curly brackets for dynamic URI variables." last_updated: 2026-09-14T15:53:41+10:00 tokens: ~384 --- # URI pattern A URI pattern (or [URL](/reference/glossary/url.md) pattern) is simple URL-like notation to match URLs. They are used by the PageSeeder services and [Berlioz](/reference/glossary/berlioz.md) to identify the user interface to render or service to invoke from a URL. ## Usage In PageSeeder and Berlioz, each service or user interface component is bound to one or more URI patterns. When they process incoming URLs, they try to match the URLs to these patterns to identify the process to invoke for that URL. ## Origin and notation The URI pattern language used by PageSeeder originates from the URI templates specification. A URI template performs the opposite transformation by generating a URL from a template and replacing the URL variables inside the template. URI templates use curly brackets to represent the dynamic components of the URI (called URI variables). For example, `{id}`. ## Pattern matching When a URL matches a specific pattern, any URI variable is resolved and supplied to the server. For example: The URL below ```text /comments/123 ``` matches the following pattern ```text /comments/{id} ``` and resolves the URI variable `id` so that ```text id=123 ``` ## Matching conflict If a URL matches multiple patterns, there are several ways of resolving the conflict. In PageSeeder, the default rule is to match the longest static part of the pattern, that is the longest string without including the URI variables. An alternative rule would be to match the first defined pattern instead. --- title: "Version" source: https://dev.pageseeder.com/reference/glossary/version.html description: "A version is a named snapshot of a single document identified by a number, date, or free text, optionally with labels and notes. Versions can be categorized as minor or major for flexible document management and release control, and can be applied to multiple documents simultaneously through bulk versioning." last_updated: 2026-09-08T13:59:50+10:00 tokens: ~311 --- # Version A version is a “named” snapshot of a single [document](/reference/glossary/document.md). A name can be any of the following: - **number** – 1.1 - **date** – 2019-08-29 - **free text** – First Draft and it might be complemented by a text note and/or [labels](/reference/glossary/labels.md). The version only includes local content, not [transclusions](/reference/glossary/transclusion.md). A collection of documents can be “versioned” simultaneously and with the same name, but any version applies to only a single document. ## Minor and major versions Versions to be categorized as “minor” or “major”. This allows for the flexible management and release of documents. Major versions might be used as the trigger to publish externally but minor versions might be for internal review. For example, if the [export](/guide/publishing/ant_api/tasks/task_export.md) ANT task `version` attribute is set to `4.0`, then content created after 4.0 won’t be exported. This can prevent content being prematurely released. ## Bulk versioning A feature that allows a version to be set for an entire tree, or sub-tree, of documents in a single action. For more information, *see* [batch processing](/reference/glossary/batch_processing.md). --- title: "Folders and files" source: https://dev.pageseeder.com/reference/glossary/folders_and_files.html description: "This document explains files and folders in PageSeeder across multiple contexts, with references to glossary entries for documents and folders, plus developer information on directory structure and system files." last_updated: 2026-08-11T16:24:56+10:00 tokens: ~105 --- # Folders and files Files and folders in PageSeeder can be used in multiple contexts. For general explanations, see the glossary entries for [document](/reference/glossary/document.md) or [folder](/reference/glossary/folder.md). Developers seeking information about the directory structure and system files used by PageSeeder can go to the [folders and files](/reference/folders_and_files.md) reference documentation. --- title: "Webhook" source: https://dev.pageseeder.com/reference/glossary/webhook.html description: "A webhook is an HTTP callback mechanism that notifies client applications when specified events occur in PageSeeder at server, project, group, or document level, supporting JSON or XML formats." last_updated: 2026-09-08T14:05:33+10:00 tokens: ~243 --- # Webhook A mechanism that lets PageSeeder notify a [client app](/reference/glossary/oauth_client.md) with an HTTP callback when a specified event occurs. PageSeeder can send either JSON or XML content for events occurring at server, project, group or document level. ## Defining webhooks You can define one or more webhooks for any registered OAuth client. You can configure which events and format you want for each webhook. In the user interface, PageSeeder lets you define webhooks in the **OAuth \> ****Webhooks** page in the **administration**.  Using the API, you can create, edit and delete webhooks using the following services: - [POST /clients/\{client\}/webhooks](/api/services/webhooks_post.md) - [PATCH /clients/\{client\}/webhooks/\{webhook\}](/api/services/webhook_patch.md) - [DELETE /clients/\{client\}/webhooks/\{webhook\}](/api/services/webhook_delete.md) Follow the [webhooks configuration guide](/api/usage/webhooks.md) for more details. --- title: "Reverse cross-reference" source: https://dev.pageseeder.com/reference/glossary/reverse_xref.html description: "Reverse cross-references in PageSeeder are bidirectional links that allow target documents to reference their source documents. They are expressed using the `` element, enabling automatic tracking of all documents that link to a given document." last_updated: 2026-09-08T11:47:42+10:00 tokens: ~212 --- # Reverse cross-reference For a bi-directional link, the reverse [cross-reference](/reference/glossary/cross_reference.md) (or *reverse xref*) is the component that exists on the link target and refers to the link source. By default, PageSeeder xrefs are bidirectional. This means that, by processing a document, it is possible to know what other documents link to them. Reverse xrefs are expressed using the `` element. ## Terminology In link terminology, the **source** document refers to the document containing the original cross-reference. The **target** document refers to the document being pointed at. By definition, reverse cross-references are bidirectional. The forward direction refers to the reference from the source to the target. The reverse direction refers to the reference from the target back to the source. --- title: "Image shell" source: https://dev.pageseeder.com/reference/glossary/image_shell.html description: "An outdated technique using documents as wrappers for images and metadata like credits and captions, now superseded by media templates with metadata elements." last_updated: 2026-09-05T17:34:50+10:00 tokens: ~173 --- # Image shell > **Note:** This technique is no longer recommended. The preferred alternative is to create a [media template](/guide/configuration/media_types.md) that includes the relevant metadata using the [\ element](/psml/elements/element_metadata.md) instead. An implementation technique that uses a document as a wrapper for one or more images, plus any associated metadata such as credits and captions. During editing, the image shell is referenced using a normal [cross-reference](/reference/glossary/cross_reference.md). However, when the document is [published](/reference/glossary/publish.md), the contents can be processed differently depending on the output format. --- title: "Member" source: https://dev.pageseeder.com/reference/glossary/member.html description: "This document explains how PageSeeder manages user membership and roles within groups, which determine content access and functionality. It covers account creation requirements, member details configuration, and provides an example of using PageSeeder to manage access to external websites like student class groups." last_updated: 2026-09-14T15:54:44+10:00 tokens: ~845 --- # Member The groups that a user is a member of, determine the content they can see. The [role](/reference/glossary/role.md) attached to each specific group membership, determines the functionality the user has. Membership and role for any group is unrelated to what it might be on any other group. Membership of projects and groups is different to having an *account* on the server. This is an aspect of PageSeeder that can be confusing to new users. Simply creating an account on a PageSeeder server, although critical, is usually not enough to provide a new user with meaningful access to content. Generally, a new user must first create an account, then join at least one group. The exception to this rule is anyone who joins the server in the role of [administrator](/reference/glossary/administrator.md). Key information for all member accounts is the following: - **firstname** and **surname** – both fields are limited to 50 characters (*required*); - **username** – must be less than 100 characters, unique, and can have letters, numbers, ‘.’, ‘\_’, ‘-’ but can’t be all numbers (*optional*); - **email** – must be less than 100 characters, unique, and a valid email address (*required*). ## Member details By default, member information is minimal, however, there is a way to extend the [member details](/guide/configuration/custom_member_details.md) information. This is done by adding fields to an account for a particular group. Although these fields can be configured with additional permission, when modeling, it is important to understand that the fields belong to the account, but only for that group. Meaning that the field contents are not accessible outside the group or that the same field names could have different meanings in another group. ### Using PageSeeder to access an external website An unmodified PageSeeder server can be used to manage access to a Berlioz website. An example use case might be something like the following: - Members belonging to a group for students also belong to a group called `class_10a`. - One of the `class_10a` members could also belong to a group for teachers. - Information stored at the intersection of these groups might be the rolling weekly average mark for each student. Students could see only their own mark. - Where the teacher intersects with the group, an additional, editable field could be visible for the teacher to store progress notes about each student. These would be visible only to the teacher. - As a group member, the teacher can assign a task to all members of the `class_10a` group, students can respond to the teacher or the class. - No one outside the group can post any comments or view any documents. - At the end of the term, the students could leave the `class_10a` group and new students could join. The previous accounts could be recalled but wouldn't be available in the day to day list of members. These combinations of group membership and role allow for the teacher and students to belong to multiple, simultaneous classes at the same time as providing flexible, secure access to both communal and personal information. Keeping the extra information in the group instead of the user account means the model can scale without becoming overly complex. This functionality associated with extended member details is also accessible through the native PageSeeder interface. --- title: "Personal group" source: https://dev.pageseeder.com/reference/glossary/personal_group.html description: "A personal group is a private PageSeeder space for members to receive messages and store documents. Named `member-[memberid]-home`, it's accessible only to the member and administrators with specific permissions." last_updated: 2026-09-14T13:46:50+10:00 tokens: ~380 --- # Personal group A personal group is a reserved PageSeeder group used as a private space for PageSeeder members to receive messages and store personal documents. ## Group vs Project The name of the personal group is always `member-[memberid]-home`. The personal project `member-[memberid]` is the container for the personal groups of a given member. For the moment, members can only have one personal group ‘home’ within that project. This could change in future releases. ## User interface When a user has a personal group, its parent project appears as the full name of the user in the project list of the *navigation menu*. ## Security A particular feature of the personal group is that it’s only accessible to the member and cannot be accessed by system administrators unless the `adminEnable` [global property](/guide/configuration/properties/global_properties.md) includes the value `access-personal`. ## Creation There are several ways personal groups can be created: 1. An administrator can create a personal group manually from the user interface when looking at the personal details of a member – if a member doesn’t have a personal group. 2. An administrator can create personal groups by selecting that option when importing members. 3. Personal groups can also be created programmatically through the API using the service [/members/\{member\}/creategroup \[POST\]](/api/services/create-personal-group_post.md) or [/members \[POST\]](/api/services/members_post.md) with `personal-group=true`. --- title: "FOConfig" source: https://dev.pageseeder.com/reference/glossary/fo_config.html description: "FOConfig is the former name of pdf-export-config, an XML language used to define the layout and formatting of PDF documents generated by PageSeeder." last_updated: 2026-08-11T16:30:43+10:00 tokens: ~74 --- # FOConfig *also known as* **FO Config** FOConfig is the previous name of what is now [pdf-export-config](/guide/publishing/ant_api/extensions/pdf_export_config.md), a simple XML language to express the layout of [PDF documents](/reference/glossary/pdf_documents.md) generated by PageSeeder. --- title: "Global template" source: https://dev.pageseeder.com/reference/glossary/global_template.html description: "The Global template is a custom project template applied server-wide that defines document types, publish scripts, labels, and URL types for all projects, specified via the globalTemplate property in global properties." last_updated: 2026-09-08T11:52:34+10:00 tokens: ~408 --- # Global template The Global template (previously known as *custom folder*) is a custom [project template](/reference/glossary/project_template.md) that applies to **all** [projects](/reference/glossary/project.md) on the server. It is specified by the optional `globalTemplate` property in [global properties](/guide/configuration/properties/global_properties.md). It defines [document types](/guide/configuration/psml.md), [publish scripts](/reference/glossary/publish_script.md) and [labels](/reference/glossary/labels.md) for use in all projects. > **Note:** By definition, a URL doesn’t change simply because multiple groups reference it. This is why the management of URLs is at the server level, not within individual projects. For this reason, a global template is the only way to specify [URL types](/guide/configuration/url_types.md). If the **global template page** exists, it is accessible through the system administration and provides shorthand options to update the labels and types it defines. ## Configuration To specify an existing project template to be the global template, make that project name the value of the `globalTemplate` property in the [global properties](/guide/configuration/properties/global_properties.md), visible on the **server properties page**. If no project name is in the `globalTemplate` property, the [default template](/reference/glossary/default_template.md) is used. > **Tip:** There is no way to edit the global properties through the user interface. Updates require an [administrator](/reference/glossary/administrator.md) with access to the file system and a text editor. --- title: "Labels" source: https://dev.pageseeder.com/reference/glossary/labels.html description: "Labels are PageSeeder's mechanism for adding semantics to artifacts, divided into object labels (documents, fragments) and content labels (inline, block text). They support various types including document, fragment, comment, upload, creation, version, and cross-reference labels." last_updated: 2026-09-08T11:44:53+10:00 tokens: ~460 --- # Labels Labels are a convenient mechanism for adding semantics to PageSeeder artifacts. They are divided in two broad categories: - [object labels](/reference/glossary/object_labels.md) – apply to PageSeeder objects such as [documents](/reference/glossary/document.md), [fragments](/reference/glossary/fragment.md), etc. - [content labels](/reference/glossary/content_labels.md) – apply to text content inside PageSeeder documents. The following table summarizes the different types of labels used in PageSeeder: | Type | Label | Applies to | | --- | --- | --- | | Content   | [Inline label](/reference/glossary/inline_label.md) | Inline content inside a block of text (equivalent to a `
` in HTML) | | [Block label](/reference/glossary/block_label.md) | Blocks of text (equivalent to a `
` in HTML) | | Object   | [Document label](/reference/glossary/document_label.md) | A PageSeeder document | | [Fragment label](/reference/glossary/fragment_label.md) | A document fragment | | Comment label | A [comment](/reference/glossary/comment.md) or [task](/reference/glossary/task.md) or [workflow](/reference/glossary/workflow.md) | | Upload label | A document on upload | | Creation label | A document when it is created | | Version label | A specific [version](/reference/glossary/version.md) of a document | | [Edit note label](/reference/glossary/edit_note_label.md) | A note on a document edit | | [Cross-reference (xref) label](/reference/glossary/cross_reference_label.md) | A [cross-reference](/reference/glossary/cross_reference.md) | Label names can contain the following characters: `[a-z][A-Z][0-9][-_]` For further information regarding allowable values for PageSeeder objects, *see* [datatypes](/psml/datatypes/pageseeder_datatypes.md) and [label config](/reference/folders_and_files/project_template/label.md). --- title: "Inline label" source: https://dev.pageseeder.com/reference/glossary/inline_label.html description: "Inline labels in PageSeeder associate custom styles or semantics to running content within text blocks, functioning like character styles in word processors. Expressed as `content` in PSML, they apply to HTML span elements." last_updated: 2026-09-08T12:19:45+10:00 tokens: ~187 --- # Inline label Designed to associate custom styles or semantics to running pieces of content inside a text block (paragraph). Inline labels play the equivalent role for PageSeeder as “character” or “inline” styles play in traditional publishing or word processing systems. They are a type of [content label](/reference/glossary/content_labels.md) for HTML inline-level elements (SPAN). As [PSML](/reference/glossary/psml.md), inline labels are expressed as: ```xml content ``` where `XXXX` is the name of the label. For more detailed information, *see* [element \](/psml/elements/element_inline.md). To add formatting or semantics to paragraphs, use [block labels](/reference/glossary/block_label.md). --- title: "Section title" source: https://dev.pageseeder.com/reference/glossary/section_title.html description: "Section titles are fixed labels in PSML documents that appear within sections but cannot be edited through standard interfaces, helping structure documents and reduce user training by defining ordered sections in document templates." last_updated: 2026-09-05T17:35:54+10:00 tokens: ~315 --- # Section title A section title is stored outside the editable area of a [section](/reference/glossary/section.md). It is displayed but cannot be removed or altered using the standard editing interface. This can be a useful way of building [documents](/reference/glossary/document.md) that are composed of specifically defined, or ordered, sections. Properly used, section titles can also reduce the amount of training required by end-users. Sections are configured in the [PSML document template](/guide/configuration/psml/psml_document_template.md). Following is an example of a section title before and after the section has been edited. ## PSML The markup for a section title uses the `` element and is as follows: ```xml <section id="description"> <title>Description
``` If it is meant to be displayed to end-users, but shouldn’t be printable or considered part of the table of content, the appropriate mark up is the `@title` attribute on the `
` element as follows: ```xml
``` ![Document – Section title](/content/images/glossary/section_title_v60000.webp) --- title: "Context path" source: https://dev.pageseeder.com/reference/glossary/context_path.html description: "A location value used by PageSeeder functions for importing and exporting data. Refer to Universal Portable Format for detailed explanation." last_updated: 2026-09-05T15:50:31+10:00 tokens: ~60 --- # Context path A location value used by several PageSeeder functions, mostly to do with importing or exporting data. For a detailed explanation, *see* [Universal Portable Format](/psml/universal_format/universal_portable_format.md). --- title: "License" source: https://dev.pageseeder.com/reference/glossary/license.html description: "PageSeeder offers six license types: Developer (localhost only), Evaluation (90-day trial), Standard (permanent, production), Hosted (managed service), Service Provider (rebranding capabilities), and OEM (source code access)." last_updated: 2026-08-11T16:30:03+10:00 tokens: ~503 --- # License PageSeeder is available under more than one license. What follows is the non-legal explanation of the different options. ## Developer A complete, fully functional license that is constrained to the *localhost* and *\[x\].localhost* addresses. Anything developed with this license can run, without modification, on a production server. A developer license is capable of modifying and testing the configuration files collectively known as the [Organization customization](/guide/configuration/organization_customization.md). ## Evaluation Provides complete functionality, including [Organization customization](/guide/configuration/organization_customization.md) configuration files, and it isn’t limited to *localhost*. The evaluation license is typically limited to a 90 day period. A server running on an eval license can be updated to a Standard license without requiring any change to the software. To get an evaluation license click [here](https://license.pageseeder.com/public/issue.html). ## Standard A complete, permanent license that doesn’t include support for [Organization customization](/guide/configuration/organization_customization.md) configuration files and requires a valid URL to generate a license. ## Hosted Anytime Allette Systems manages PageSeeder on a user’s behalf, they gain indemnification against any terms and conditions of the software agreement. Although, all end users are bound by the PageSeeder user agreement. This requires, for example, that users won’t use the software to conduct illegal activities. ## Service provider This license allows users to re-brand many aspects of PageSeeder, including the ability to change logos and colors on the user interface and email messages. This is done through [Organization customization](/guide/configuration/organization_customization.md) configuration files. ## OEM For partners that want access to the PageSeeder code for deep integration or modification – includes long-term escrow of the source code. --- title: "HTML" source: https://dev.pageseeder.com/reference/glossary/html.html description: "HTML is a key component in PageSeeder that provides the editing interface for PSML documents, enabling users to view and modify content in a web-based environment." last_updated: 2026-08-11T16:31:24+10:00 tokens: ~34 --- # HTML A key component in PageSeeder, HTML is used to provide an editing interface for [PSML](/reference/glossary/psml.md) documents. --- title: "Assignee" source: https://dev.pageseeder.com/reference/glossary/assignee.html description: "An assignee is a group member assigned to a task or document workflow. Only contributors or managers can be assigned, one at a time. Unassigned tasks lack an assignee and can be reassigned via comment or workflow dialogs." last_updated: 2026-08-11T16:37:57+10:00 tokens: ~191 --- # Assignee The group [member](/reference/glossary/member.md) who is currently assigned a [task](/reference/glossary/task.md) or document [workflow](/reference/glossary/workflow.md). Tasks and workflows can be assigned to any group member with the [role](/reference/glossary/role.md) of contributor or manager. They can only be assigned to a single member at a time. If a task or workflow doesn’t have an assignee, it is *unassigned*. You can change the assignee of a task using the **comment dialog**. Similarly, you can assign a document workflow in the **workflow dialog**. When you re-assign a task, if the needed member name doesn’t display in the drop-down, you can start typing the name in the **Assignee** field and select a name from the drop-down. --- title: "PageSeeder file system" source: https://dev.pageseeder.com/reference/glossary/pageseeder_file_system.html description: "PageSeeder's file system inherits from the underlying operating system, creating potential compatibility issues when moving files between case-sensitive and case-insensitive environments. Developers must account for environment differences." last_updated: 2026-08-11T16:37:02+10:00 tokens: ~350 --- # PageSeeder file system > **Warning:** Directly interacting with the host file system is not advised! Use the API or user interface to move files in or out of PageSeeder. It is important to understand that the PageSeeder file system is inherited from the operating system hosting the [PageSeeder server](/reference/glossary/pageseeder_server.md).  In the event that a user moves files from a noncase-sensitive desktop environment to a case-sensitive server environment, this can lead to confusion. This is something that developers need to be aware of if their development environment is different to their production system. Other file system-related topics are: - [archive](/reference/glossary/archive.md) - [autosave](/reference/glossary/auto-save.md) - [date and time](/reference/glossary/date_and_time.md) - [delete](/reference/glossary/delete.md) - [download](/reference/glossary/download.md) - [Document ID (or DocID)](/reference/glossary/document_id_docid.md) - [duplicate](/reference/glossary/duplicate.md) - [filename](/reference/glossary/filename.md) - [file size](/reference/glossary/file_size.md) - [file system](/reference/glossary/file_system.md) - [folder](/reference/glossary/folder.md) - [overwrite](/reference/glossary/overwrite.md) - [properties](/reference/glossary/properties.md) - [search](/reference/glossary/search.md) - [URI ID / uriid](/reference/glossary/uri_id.md) --- title: "Document" source: https://dev.pageseeder.com/reference/glossary/document.html description: "PageSeeder terminology defines a document as anything with a URI ID that is not a URL, including PSML files, binary files (DOCX, PDF), archives, images, and text files. Processing is organized by MIME type to enable custom workflows." last_updated: 2026-09-14T13:54:30+10:00 tokens: ~326 --- # Document PageSeeder terminology defines a document as anything that has a [URI ID](/reference/glossary/uri_id.md) and is not a [URL](/reference/glossary/url.md). This includes the following: - Editable [PSML](/reference/glossary/psml.md) documents. - [DOCX](/reference/glossary/word_docx_format.md) and [PDF](/reference/glossary/pdf_documents.md) files (or other externally created binary files). - Archive file formats, such as ZIP. - Image formats, such as JPEG and Portable Network Graphics (PNG). - Text files in arbitrary formats, such as non-PageSeeder XML. The presence of a uri id means that PageSeeder is using an [XLink](/reference/glossary/xlink.md) to represent the document.  For more information on this topic, *see* [PageSeeder objects](/guide/document_modeling/pageseeder_objects.md). For files with content outside the PageSeeder XML namespace, processing is organized by MIME type. This makes it possible to trigger custom processes when files with a certain format are uploaded. For example, DOCX or PDF files. ## Related terminology - [Document type](/reference/glossary/document_type.md) - [Document template](/reference/glossary/document_template.md) - [documentinfo](/reference/glossary/documentinfo.md) - [\ documentinfo](/psml/elements/element_documentinfo.md) --- title: "Organization" source: https://dev.pageseeder.com/reference/glossary/organization.html description: "An aspect of the service provider license that enables branding customization of the PageSeeder interface and related messages, including lost password notifications and group invitations." last_updated: 2026-08-11T16:31:10+10:00 tokens: ~51 --- # Organization An aspect of the service provider [license](/reference/glossary/license.md) that supports branding of the PageSeeder interface and messages, such as lost password and group invitations. --- title: "Weekly digest" source: https://dev.pageseeder.com/reference/glossary/weekly_digest.html description: "Weekly digest is a notification method that allows members to receive a single email once weekly containing the latest comments and discussions from a group, with configuration managed through global properties." last_updated: 2026-08-11T16:37:48+10:00 tokens: ~575 --- # Weekly digest Weekly digest is a method of [notification](/reference/glossary/notification.md), allowing the [member](/reference/glossary/member.md) to keep up to date with the latest [comments](/reference/glossary/comment.md) and discussion related to a [group](/reference/glossary/group.md) by receiving a single email once weekly. > **Note:** Announcements are always sent immediately to group members regardless of their notification settings. ## Email template When a member has set their notification to [daily](/reference/glossary/daily_digest.md) or weekly digest, they receive the [comment-digest email](/guide/configuration/emails/templates/comment-digest.md) instead of the [new-comment email](/guide/configuration/emails/templates/new-comment.md), unless the comment was sent as an announcement or is an [essential](/reference/glossary/notification.md) notification. The `frequency` attribute of the [notification element](/guide/configuration/emails/templates/comment-digest.md) is then set to `weekly`. ## Configuration Administrators can configure daily digest email using the [global properties](/guide/configuration/properties/global_properties.md). Use the `notifyDailyTime` global property to set the time of the day the daily and weekly digest emails are sent to group members. Use the `notifyWeekly​Day` global property to set the day of the week the digest emails are sent to the group. It must be one of `monday`, `tuesday`, `wednesday`, `thursday`, `friday`, `saturday`, or `sunday`. Daily and weekly digest comment notifications can be disabled by setting the `notifyProcess` global property to `false`. > **Note:** Digest emails can only be configured globally – they cannot be configured differently for individual groups. ## Changing the notification Members can change their notification settings for each group by editing the membership in the **groups and invitations page**. [Administrators](/reference/glossary/administrator.md) can also edit the notification settings on behalf of users from the user’s **account profile page** and [managers](/reference/glossary/manager.md) from the group administration, **manage members page**. ![Edit membership – Notification settings](/content/images/glossary/edit_membership_notification_settings_v60000.webp) --- title: "Daily digest" source: https://dev.pageseeder.com/reference/glossary/daily_digest.html description: "Daily digest is a notification method that sends group members a single email once daily containing the latest comments and discussions, with configurable timing through global properties." last_updated: 2026-08-11T16:37:48+10:00 tokens: ~519 --- # Daily digest Daily digest is a method of [notification](/reference/glossary/notification.md), allowing the [member](/reference/glossary/member.md) to keep up to date with the latest [comments](/reference/glossary/comment.md) and discussion related to a [group](/reference/glossary/group.md) by receiving a single email once daily. > **Note:** Announcements are always sent immediately to group members regardless of their notification settings. ## Email template When a member has set their notification to daily or [weekly](/reference/glossary/weekly_digest.md) digest, they receive the [comment-digest email](/guide/configuration/emails/templates/comment-digest.md) instead of the [new-comment email](/guide/configuration/emails/templates/new-comment.md) unless the comment was sent as an announcement or is an [essential](/reference/glossary/notification.md) notification. The frequency attribute of the [notification element](/guide/configuration/emails/templates/comment-digest.md) is then set to `daily`. ## Configuration Administrators can configure daily digest email using the [global properties](/guide/configuration/properties/global_properties.md). Use the `notifyDailyTime` global property to set the time of the day the daily and weekly digest emails are sent to group members. Daily and weekly comment notifications can be disabled by setting the `notifyProcess` global property to `false`. > **Note:** Digest emails can only be configured globally – they cannot be configured differently for individual groups. ## Changing the notification Members can change their notification settings for each group by editing the membership in the** group and invitations page**. [Administrators](/reference/glossary/administrator.md) can also edit the notification settings on behalf of users from the user’s **account profile page** and [managers](/reference/glossary/manager.md) from the group administration, **manage members page**. ![Edit membership – Notification settings](/content/images/glossary/edit_membership_notification_settings_v60000.webp) --- title: "List" source: https://dev.pageseeder.com/reference/glossary/list.html description: "In PageSeeder, 'list' refers to ordered or unordered collections of items in documents. Lists are stored across multiple files with incomplete editing views; formatting like item numbering is applied programmatically during publishing via the process task." last_updated: 2026-09-05T17:35:04+10:00 tokens: ~225 --- # List In PageSeeder terminology, ‘list’ is interpreted as the generic description for ordered `(`) or unordered (``) items (`)`in a document, not as the programming term for a type of data structure. Because the PageSeeder information architecture is deliberately oriented to documents/[publications](/reference/glossary/publications.md) being composed of multiple files, the editing and storage view of a list is typically incomplete. Additional values such as prefixing items with a heading number aren’t supported for ``, but require a numbered [\](/psml/elements/element_para.md). When the order of the documents is final and the collection is published, these values are added programmatically by the [process task](/guide/publishing/ant_api/tasks/task_process.md) when the files are sent to a website or [DOCX](/reference/glossary/word_docx_format.md) file. --- title: "Comment" source: https://dev.pageseeder.com/reference/glossary/comment.html description: "Comments are XLinks in PageSeeder that attach to documents, groups, fragments, and versions. Tasks are comments with additional properties like status or due dates. Comments can be restricted to members or open to the public with moderation. Each comment receives a unique ID for external system integration." last_updated: 2026-09-14T13:54:39+10:00 tokens: ~380 --- # Comment A fundamental capability of PageSeeder, comments are a class of [XLink](/reference/glossary/xlink.md) that can be attached to different locations in the data or system. Because commenting is so integral to PageSeeder’s architecture, understanding how they work can help to explain the broader concepts. Comments can be attached to: - [documents](/reference/glossary/document.md) - [groups](/reference/glossary/group.md) - [fragments](/reference/glossary/fragment.md) - [versions](/reference/glossary/version.md) A [task](/reference/glossary/task.md) is simply a comment with additional properties, such as [status](/reference/glossary/status.md) or due date. There are different parts of the user interface that allow existing comments to be edited so that they become tasks. Groups can be configured so that comments can be posted: - Only by a group [member](/reference/glossary/member.md). - By someone not registered to the group ([the public](/reference/glossary/group_public.md)). When a group is open to the public, comments are typically moderated. This means they are first routed to a [Moderator](/reference/glossary/moderator.md) who can delete the comment, edit or move it, before releasing it to the group. PageSeeder generates a unique [comment ID](/reference/glossary/comment_id.md) for every comment. This ID is a useful reference when tasks are significant to external systems such as software code. This allows PageSeeder to function as an issue tracker such as *Jira* or *Bugzilla*. --- title: "Section ID" source: https://dev.pageseeder.com/reference/glossary/section_id.html description: "An ID for a section that must be unique within a document and is constrained by a pattern or enumerated values." last_updated: 2026-09-05T17:35:41+10:00 tokens: ~55 --- # Section ID An ID for a [section](/reference/glossary/section.md). The [section ID](/psml/datatypes/pageseeder_datatypes.md) must be unique within the document and is constrained by a pattern or by enumerated values. --- title: "PageSeeder design objectives" source: https://dev.pageseeder.com/reference/glossary/pagedeeder_design_objectives.html description: "PageSeeder is a web-based XML publishing platform designed for collaborative workflows, prioritizing simplicity in meeting complex requirements and addressing gaps in traditional document processing solutions." last_updated: 2026-08-11T16:30:12+10:00 tokens: ~490 --- # PageSeeder design objectives The PageSeeder approach to XML publishing workflows is different from that of conventional applications. PageSeeder was conceived and implemented as a web-based platform, not adapted from a desktop app. The orientation of the product has always been around collaboration and the constraints that are necessary to effectively and productively coordinate groups of users. The evolution of PageSeeder was also the consequence of factors like: - The gap between unstructured document processing technology and rich, semantic XML is too big and no evidence of it narrowing. - The absence of support, in both web-based solutions and XML applications, for professional document features like complex paragraph numbering and integration with Microsoft Word. - The lack of engagement with the casual developers often left to support users on a part-time basis. The influence of these issues was that the focus of the product design was to find the simplest ways to meet the most demanding requirements. Understanding that the conventional model of “one document = one file” doesn’t work in a collaborative environment, PageSeeder addresses questions, such as: - XML is the intersection of the discipline and rigor of a standards process with people that have impeccable credentials for processing documents. Shouldn’t the value of the standard lead to software that is easier to use and less expensive than non-XML solutions? - Provide collaborative editing and review – the slow rate of change in conventional, single-user desktop software indicates that architecture has been exhausted for productivity gains. - Focus on the needs of [developers](/reference/glossary/developer_view.md) – having spent many years implementing publishing solutions for end users, the architects knew that the real problem for publishing was that end-user requirements are too diverse for general solutions, and the real opportunity is productivity. --- title: "xref" source: https://dev.pageseeder.com/reference/glossary/xref.html description: "Xref documentation covering cross-reference functionality, including standard and reverse xrefs, the xref element, transclusion, and reference resolution techniques." last_updated: 2026-09-23T13:15:29+10:00 tokens: ~81 --- # Xref *See*:  - [Cross-reference (xref)](/reference/glossary/cross_reference.md) - [Reverse cross-reference](/reference/glossary/reverse_xref.md) - [Element \](/psml/elements/element_xref.md) - [Transclusion](/reference/glossary/transclusion.md) - [Resolve references](/reference/glossary/resolve_references.md) --- title: "Developer tools" source: https://dev.pageseeder.com/reference/glossary/developer_tools.html description: "A collection of tools and options available when developer view is enabled. Developer-specific options are marked with a developer icon." last_updated: 2026-08-11T16:21:25+10:00 tokens: ~77 --- # Developer tools A collection of tools and options included when the [developer view](/reference/glossary/developer_view.md) is enabled. Developer specific options are usually indicated using the developer icon. ![Document developer tools](/content/images/glossary/document_developer_tools_v60000.webp) --- title: "Document view" source: https://dev.pageseeder.com/reference/glossary/document-view.html description: "Document view refers to the display of PSML documents in PageSeeder. Once opened, members gain access to additional functions and tools for working with the document content." last_updated: 2026-08-11T16:31:24+10:00 tokens: ~66 --- # Document view Refers to the display of a [PSML (PageSeeder Markup Language)](/reference/glossary/psml.md) document. Once the member opens a document, a new set of functions are available. ![Document view](/content/images/glossary/document_view_v60000.webp) --- title: "XSD files" source: https://dev.pageseeder.com/reference/glossary/xsd_files.html description: "Schema files for PageSeeder validation are available through the schemas section, including documentation for validating various aspects of the system." last_updated: 2026-08-11T16:38:21+10:00 tokens: ~53 --- # XSD files There are a number of schema files that are useful for validating different aspects of PageSeeder. Both the files and documentation are available through [schemas](/reference/advanced/schemas.md). --- title: "Publisher" source: https://dev.pageseeder.com/reference/glossary/publisher.html description: "A reference document that directs users to the Publish engine for information about the Publisher functionality and publishing operations." last_updated: 2026-08-11T16:32:40+10:00 tokens: ~19 --- # Publisher *See* [Publish engine](/reference/glossary/publish_engine.md). --- title: "Developer view" source: https://dev.pageseeder.com/reference/glossary/developer_view.html description: "Developer view is a PageSeeder feature that enables additional tools and information for developers, allowing access to advanced features like publish scripts, custom templates, and API functionality beyond the standard user interface." last_updated: 2026-09-14T13:54:30+10:00 tokens: ~259 --- # Developer view To keep the user interface straightforward for end users, PageSeeder provides a *developer view* (previously referred to as “Developer mode”), which when enabled, turns on additional features, tools and information specifically aimed at developers. We use sensible defaults for the most common scenarios and the user interface lets users customize PageSeeder for their needs, directly from the user interface without any technical knowledge. However, for more complex situations, developers – or users with some level of technical expertise – need to be involved to write [publish scripts](/reference/glossary/publish_script.md), custom [document templates](/reference/glossary/document_template.md) or create apps using the PageSeeder API. > **Tip:** The developer icon denotes developer-specific features or content. You can enable the developer view in your [preferences](/reference/glossary/preferences.md): ![Developer option in account preferences](/content/images/glossary/developer_option_v60000.webp) --- title: "Document label" source: https://dev.pageseeder.com/reference/glossary/document_label.html description: "Labels in PageSeeder documents can be added through document properties, batch processing, or PSML markup, with administrators configuring available labels on the project labels management page." last_updated: 2026-08-11T16:27:35+10:00 tokens: ~105 --- # Document label [Labels](/reference/glossary/labels.md) can be added to a PageSeeder document by the following: - Editing the document’s properties in the **document info and metadata panel**. - Using [ batch processing](/reference/glossary/batch_processing.md). - By markup in [PSML](/psml.md). [Administrators](/reference/glossary/administrator.md) configure labels on the **project labels (manage) page**. --- title: "Webapp" source: https://dev.pageseeder.com/reference/glossary/webapp.html description: "Refers to the folder structure and organization of files located below the Web application server in the system hierarchy." last_updated: 2026-08-11T16:37:34+10:00 tokens: ~19 --- # Webapp Refers to the folder structure below the Web application server. --- title: "Archive" source: https://dev.pageseeder.com/reference/glossary/archive.html description: "Archive is a default PageSeeder folder that preserves document relationships and historical information instead of deleting content, maintaining data integrity while allowing recovery of archived documents, groups, and fragments." last_updated: 2026-09-08T12:22:35+10:00 tokens: ~516 --- # Archive is a default [folder](/reference/glossary/folder.md) in every [group](/reference/glossary/group.md), and it is also a verb that describes a feature of the system. The folder is created by the system when the group is created. How the feature works is easier to understand with some background. The fundamental concept of PageSeeder’s [XLink](/reference/glossary/xlink.md) architecture is that documents, [fragments](/reference/glossary/fragment.md), [sections](/reference/glossary/section.md), [comments](/reference/glossary/comment.md), [tasks](/reference/glossary/task.md), [xrefs](/reference/glossary/cross_reference.md), [memberships](/reference/glossary/member.md) and [groups](/reference/glossary/group.md) are created, then edited by [members](/reference/glossary/member.md). Both the current and historical information is linked together in one or more groups. By definition, all PageSeeder artifacts have dependencies. PageSeeder documents represent the intersection of content, members and time. Because [deleting](/reference/glossary/delete.md) documents breaks these connections, the purpose of the archive is to preserve the relationships. PageSeeder places an archived document in the **archive** folder, then in a subfolder for the current year and month. A reference to an archived PageSeeder document appears like the following: ![Archived ref](/content/images/glossary/archived_xref_v60000.webp) and [reverse links](/reference/glossary/reverse_xref.md) are displayed like this: ![Document references panel – Archived ref](/content/images/glossary/xref_panel_archived_v60000.webp) These visual clues can be used to help users edit out obsolete references. The integrity of the data is also the reason why PageSeeder’s [delete](/reference/glossary/delete.md) feature requires special configuration to access. When you archive a *group*, it is moved to the **archive project**, so that it can be recovered at another stage. Memberships, [comment](/reference/glossary/comment.md)s and fragments can also be archived and recovered. --- title: "Image" source: https://dev.pageseeder.com/reference/glossary/image.html description: "Image in PageSeeder refers to documents with media types starting with `image/` (e.g., `image/jpeg`) or the `` element used to embed images in PSML documents. Text styled as \"Caption\" in Word imports as a block label." last_updated: 2026-09-05T17:34:20+10:00 tokens: ~65 --- # Image Might refer to: - A document with a [media type](/reference/glossary/media_type.md) starting with `image/` for example `image/jpeg`. - The [\ element](/psml/elements/element_image.md) used to include image documents within a PSML document. --- title: "Media icon" source: https://dev.pageseeder.com/reference/glossary/media_icon.html description: "PageSeeder uses consistent icons to quickly identify document media types based on file extensions. These icons help users distinguish between various file formats, including XML, PDF, images, office documents, and more, streamlining document management and recognition." last_updated: 2026-08-11T16:31:24+10:00 tokens: ~481 --- # Media icon Icon that helps you identify the media type of a file or document quickly.To identify the **media type** of a document quickly, PageSeeder uses a consistent set of icons. Multiple media types might share the same icon. For example, all images use the same icon regardless of the actual file format. This is usually because they are treated in the same manner by PageSeeder. The following table shows the icons based on the file extension. | Icon | Extension(s) | Description | | --- | --- | --- | | file-xml | `.xml` | XML document | | file-psml | `.psml` | [PSML](/reference/glossary/psml.md) document | | file-pdf | `.pdf` | PDF document | | file-compressed | `.jar`, `.zip`, `.tar`, `.gz` | File using a known compression format | | file-image | `.gif`, `.png`, `.ico`, `.jpg`, `.jpeg` | Image file | | file-javascript | `.js`, `.json` | JavaScript or JSON file | | file-math | `.mathml`, `.mml`, `.tex` | MathML or Latex file | | file-xml-validate | `.sch`, `.xsd` | Schematron or XML schema file | | file-word | `.doc`, `.docx` | Microsoft Word document | | file-excel | `.xls`, `.xlsx` | Microsoft Excel spreadsheet | | file-powerpoint | `.ppt`, `.pptx` | Microsoft PowerPoint presentation | | file-css | `.css` | CSS file | | file-video | `.mp4`, `.mov`, ... | Video streaming file | | file-audio | `.mp3`, `.wav`, ... | Audio file | | file-text | `.txt`, `.csv`, `.md` | Text or markdown file | | file-properties | `.properties`, `.prp` | Properties file | | file-html | `.html` | HTML document | > **Note:** XML is a common markup language used by many media types. PageSeeder marks as XML any document that uses XML, but it is not processed differently by PageSeeder. PageSeeder identifies a file as an image, audio, or video type based on the corresponding media type. But since web browsers support different coding formats, it doesn’t mean that PageSeeder is able to process or display it. --- title: "Media type" source: https://dev.pageseeder.com/reference/glossary/media_type.html description: "PageSeeder uses media types to trigger document processors for handling specific formats like XML and PDF. Media types consist of a general category and specific subtype separated by a slash, with PageSeeder defining a vendor-specific type for PSML documents. File extensions determine media type mapping." last_updated: 2026-09-08T11:50:22+10:00 tokens: ~545 --- # Media type PageSeeder uses the media type of a [document](/reference/glossary/document.md) as a trigger to invoke document processors that have specific capabilities to process data formats such as XML or [PDF](/reference/glossary/pdf_documents.md). Every PageSeeder document or configuration file has a media type. To help you identify the media type quickly, documents titles or file names are almost always preceded by a [media icon](/reference/glossary/media_icon.md) in the user interface. A media type has two main parts separated by a '/'. The first part defines the general category such as audio content, executable program, image, text message, video stream, etc. The second part provides a specific subtype defined by the file format. There is an [official register of media types](https://www.iana.org/assignments/media-types/media-types.xhtml) maintained by IANA. PageSeeder also defines a vendor-specific media type for [PSML](/reference/glossary/psml.md): `application/vnd.pageseeder.psml+xml` For further information, *see* the articles on [MIME properties](/guide/configuration/properties/mime_properties.md). > **Tip:** Project [managers](/reference/glossary/manager.md) can configure media fragments in the [document template](/reference/glossary/document_template.md) using the [\](/psml/elements/element_media-fragment.md) element. ## File extension mapping PageSeeder doesn’t inspect the content of every file. In most situations, it relies on the file extension to determine what the media type is. For that reason, it is important that files uploaded into PageSeeder use file extensions consistently. > **Tip:** Prefer using lower case extension "`.png`" to the upper case version. Although, it might work in some circumstances, avoid using a mixed case "`.Jpeg`". Administrators can access PageSeeder media type mapping to file extensions in the **server properties page**. There is no need to change this mapping – it is provided for your information only. Contact support, if you require an [IANA registered media type](https://www.iana.org/assignments/media-types/media-types.xhtml) to be mapped to a file extension. --- title: "Document ID (or DocID)" source: https://dev.pageseeder.com/reference/glossary/document_id_docid.html description: "The PageSeeder server assigns unique Document IDs (DocIDs) to documents as server-wide identifiers. User-assigned rather than auto-generated, DocIDs serve as alternative locators to folder paths and filenames, functioning like primary keys. They persist across server uploads unless manually edited." last_updated: 2026-09-08T11:50:47+10:00 tokens: ~370 --- # Document ID (or DocID) The [PageSeeder server](/reference/glossary/pageseeder_server.md) allows any [document](/reference/glossary/document.md) – PSML or binary – to be assigned a server-wide, unique identifier. This value is commonly referred to as the DocID and it has the same use case for both developers and end users. That is, the DocID is an alternative method to folder path and [filename](/reference/glossary/filename.md) for locating a document, like a primary key. Because it is user assigned rather than automatically generated, the Document ID stays the same if the document is uploaded to a different PageSeeder server, unless manually edited or removed. DocID can contain the following characters: \[a-z\]\[A-Z\]\[0-9\]\[-\_\] The following is an example of [PSML](/reference/glossary/psml.md) markup for the DocID: ```xml ... ``` Following are suggestions for processing DocIDs: - Because DocIDs are unique to the domain of the [URI](/reference/glossary/uri.md), they might be in use but not visible to a particular [project](/reference/glossary/project.md) or [group](/reference/glossary/group.md). Using a project-specific prefix can qualify the IDs to ensure they are unique on the server (that is, `[project-prefix]-1234`). ![Document info panel – Document ID](/content/images/glossary/document_info_panel_docid_v60000.webp) --- title: "Resolve references" source: https://dev.pageseeder.com/reference/glossary/resolve_references.html description: "PageSeeder's xref resolution system validates cross-references by checking if target documents exist. Unresolved xrefs appear in red and can be fixed through editing, folder/group resolution, or unarchiving documents." last_updated: 2026-08-11T16:38:11+10:00 tokens: ~221 --- # Resolve references To ensure the integrity of xrefs, when an xref is created. PageSeeder checks that the target document exists. If it does. then the xref is considered resolved. Otherwise, it is considered unresolved, and is displayed in red. This can happen if the target document is deleted or the **Resolve references** option is unticked when uploading. Unresolved xrefs can be resolved by: 1. Editing the fragment containing the xref. 2. Resolving references on the folder containing the *source* document. 3. Resolving references on the group. 4. Unarchiving a document or folder. > **Tip:** Once an image, link or double-ended xref is resolved, a reverse xref is displayed on the target image, URL or document. It is useful to unresolve references when archiving documents so that the targets are not cluttered with broken reverse xrefs pointing to archived documents. --- title: "Document history" source: https://dev.pageseeder.com/reference/glossary/document_history.html description: "Document history tracks all events affecting a PageSeeder document, including uploads, creation, modifications, reverts, workflow changes, versions, edits, drafts, notes, xrefs, images, comments, and tasks, displayed in reverse chronological order." last_updated: 2026-09-05T15:50:31+10:00 tokens: ~129 --- # Document history Document history refers to the list of [events](/reference/glossary/document_event.md) that affected a PageSeeder [document](/reference/glossary/document.md). The **document history panel** displays document events related to the document such as upload, creation, modification, revert, workflow, version, edit, draft, note, xref, image, comment, task. Events are displayed in a list format with most recent first. ![Document history](/content/images/glossary/document_history_v60000.webp) --- title: "Host" source: https://dev.pageseeder.com/reference/glossary/host.html description: "A host in PageSeeder is a valid hostname attribute for group folders and URIs. It can be configured as internal (for documents/folders) or external (for URLs), with support for multiple hosts and aliases managed by administrators." last_updated: 2026-09-08T11:47:06+10:00 tokens: ~501 --- # Host In PageSeeder, a host is one of the attributes of [group folder](/reference/glossary/group_folder.md) and [URI](/reference/glossary/uri.md). It must be a valid hostname as defined by [RFC 3986](https://tools.ietf.org/html/rfc3986#section-3.2.2). ## Default host The default host on your server is the `webSiteAddress` [global property](/guide/configuration/properties/global_properties.md). ## Host configuration Other hosts can be specified. They can only be configured by [administrators](/reference/glossary/administrator.md) on PageSeeder. PageSeeder can support: - Multiple hosts which are considered by PageSeeder to be different. - Host alias which are considered by PageSeeder to be equivalent. ## Internal and external hosts Internal hosts are generally used for documents and folders stored on PageSeeder and can only be added by administrators. Only internal hosts can be used for [group folders](/reference/glossary/group_folder.md). External hosts are used for [URLs](/reference/glossary/url.md) and are automatically added when a URL is added or when a [link](/psml/elements/element_link.md) is created. ## DNS By default, PageSeeder assumes that hosts are reachable. Defining an internal host isn’t enough to ensure that end-users can reach it. You need to ensure that your DNS settings allow the users to reach PageSeeder. For external hosts, PageSeeder uses DNS to resolve the hostname when pulling information for links and URLs. As an administrator, you need to ensure that the machine hosting PageSeeder can resolve the hostname and reach the host. PageSeeder relies on Java to resolve network addresses. You might need to change the default Java DNS cache using the `networkaddress.cache.ttl` system property. ## Virtual hosts If you know that an external host is not reachable, set the host as virtual from the **external hosts page** in the system administration to prevent PageSeeder from attempting to resolve the address and pull information from it.  --- title: "Username" source: https://dev.pageseeder.com/reference/glossary/username.html description: "Username is an optional public identifier for PageSeeder user accounts, required only when no email address exists. It must be unique, 1-100 characters, contain only word characters, underscores, hyphens, or dots, and cannot be all digits. Case-insensitive." last_updated: 2026-09-08T11:45:51+10:00 tokens: ~237 --- # Username It is an optional public identifier for a user account in PageSeeder, and it is only required when the user account doesn’t have an email address. To be valid, it must match the following conditions: - Must be unique (see following note). - Must be between 1 and 100 characters. - Must only contain word characters, underscore, hyphen and dot `[0-9a-zA-Z_-.]+` - Cannot be only digits `[0-9]+`  > **Note:** The username is case-preserving but not case-sensitive, so if a user has chosen the username `jsnow` for their account, another user cannot choose `JSNOW` or any other variation on the case.   ## API In the service API, it can be used as a value for the `{member}` URL parameter. For example, you could use `/api/members/jsnow.json` for service `/members/{member}` with username `jsnow`. When a user has a username, it is returned as the `username` attribute on the [\ element](/api/elements/element_member.md). --- title: "Publish engine" source: https://dev.pageseeder.com/reference/glossary/publish_engine.html description: "The Publish Engine is a core PageSeeder component that executes customizable Ant scripts for import, export, publish, and process operations. It can be distributed across servers to handle CPU-intensive tasks like document composition and transformation." last_updated: 2026-09-14T13:54:40+10:00 tokens: ~134 --- # Publish engine A key component of the PageSeeder solution, the Publish Engine handles all import, export, publish and some process operations by executing customizable Ant scripts. It is included as part of each [PageSeeder server](/reference/glossary/pageseeder_server.md), but one PageSeeder server can use the Publish Engine on a different PageSeeder server so CPU-intensive tasks, such as document composition or transformation, can be distributed. Further information is available, *see* [Publishing](/guide/publishing.md). --- title: "Server message" source: https://dev.pageseeder.com/reference/glossary/server_message.html description: "A server message is a global notification that administrators can set in the PageSeeder dashboard to alert all logged-in users of server-wide events like upgrades or restarts. It displays above the header bar on all pages." last_updated: 2026-08-11T16:34:19+10:00 tokens: ~311 --- # Server message A server message is a global message that an [administrator](/reference/glossary/administrator.md) can enter in the administrator dashboard for display on all pages on the [server](/reference/glossary/pageseeder_server.md). It is generally used to notify ALL users currently logged into that particular PageSeeder server of an imminent server wide event, such as an upgrade or restart. > **Note:** A server message is ***NOT*** an email message – it displays above the header bar in any page. #### Administrator submits server message Administrators go to the dashboard to set the server message to display. ![Administrator dashboard – setting server message](/content/images/glossary/admin_dashboard_server_message_v60000.webp) > **Note:** When a server message is already set, the buttons available to the administrator are **Update** to change the message and **Clear** to stop displaying the server message to users. #### Server message displayed to all users When the server message is active, it is displayed to all users on all screens above the header bar in any page. Users can hide the message by clicking the cross icon. ![Active server message](/content/images/glossary/server_message_active_v60000.webp) --- title: "Member – registration" source: https://dev.pageseeder.com/reference/glossary/member_registration.html description: "The process of adding a member to a group, enabling new participants to join and participate in group activities and resources." last_updated: 2026-09-08T13:55:34+10:00 tokens: ~34 --- # Member – registration The process of joining a [member](/reference/glossary/member.md) to a [group](/reference/glossary/group.md). --- title: "Role" source: https://dev.pageseeder.com/reference/glossary/role.html description: "This document describes how roles determine member permissions in PageSeeder groups, established by group managers. It outlines the default roles and their associated permissions." last_updated: 2026-08-11T16:37:11+10:00 tokens: ~106 --- # Role The role determines the permissions of a [member](/reference/glossary/member.md) in a PageSeeder [group](/reference/glossary/group.md). The role of a member is set by the [manager](/reference/glossary/manager.md) of the group. The following diagram summarizes the default roles and permissions within PageSeeder. ![PageSeeder Permissions Structure](/content/images/glossary/pageseeder_permissions_structure.webp) --- title: "Numbered headings" source: https://dev.pageseeder.com/reference/glossary/numbered_headings.html description: "Numbered headings are PSML heading elements that automatically generate sequential numbers when published. Marked with the `@numbered` attribute, their values depend on document structure and transcluded content." last_updated: 2026-08-11T16:36:49+10:00 tokens: ~231 --- # Numbered headings A numbered heading is a `` element in [PSML](/reference/glossary/psml.md) which is preceded by an automatically generated number when published. ## User Interface In the user interface, a numbered heading appears with one or more x's separated by dots so that the user knows that a number is to precede the heading. The number of x's varies depending on the heading level. ## Source data In PSML, a numbered heading is marked up using the `@numbered` attribute. For example, in PSML, a numbered heading level 1 is marked up as: ```xml My Chapter ``` ## Published data and processing Because the numbering depends on other titles in the same [document](/reference/glossary/document.md), or other documents if the content is [transcluded](/reference/glossary/transclusion.md), it is only resolved when the document is published or processed. --- title: "References document type" source: https://dev.pageseeder.com/reference/glossary/references_document.html description: "The references document type is a built-in PSML document that assembles multiple documents into publications using an xref list editor optimized for adding cross-references and organizing document hierarchy." last_updated: 2026-09-14T13:54:40+10:00 tokens: ~846 --- # References document type The “references” document type is the default way to assemble multiple PSML documents into a [publication](/reference/glossary/publications.md). Along with the “default” document type, the *references* document is one of the built-in PSML document types. ## Xref list editor What distinguishes the references document is a fragment configured to invoke the *xref list* editor. Unlike the standard rich text editor, *xref list* is optimized to quickly add [cross-references](/reference/glossary/cross_reference.md). This makes it well suited to create a collection of links that bind smaller documents into a publication. ## Publication configuration By default, the xref list editor adds all xrefs at the same level in the document hierarchy. To make a document subordinate, click the angle-right  or chevron-right icons to the right of the xref title. When working with numbered documents, this preserves the integrity of either heading or paragraph numbering or any xrefs that reference a particular number. This is the reason to stick to the following concepts: - Always start a document with the first level heading (**H1** or`` in PSML) and let the references document adjust the heading according to the rest of the publication. Remember that the same file could be included in a different position in a different publication. - Create documents around a specific topic, so that the documents can be re-used. - If multiple levels of references documents are used to represent the publication, don't be inconsistent. > **Tip:** For example, where a publication has six chapters, don't use references documents for chapter 1, chapter 2, and chapter 3, then link the files for chapter 4, chapter 5 and chapter 6 directly to the main publication references document. > **Note:** References documents can also be used to assemble non-PSML documents such as PDF files. However, since PageSeeder also uses the heading hierarchy in PSML to build the Table of Contents, only the title of the non-PSML documents appear in the TOC. If you include an xref to a PDF document in your references document and publish it as DOCX, PageSeeder replaces the content with a link in the Word file. ## Template The [template](/reference/glossary/document_template.md) for this default document includes: - A “title” section with a single [fragment](/psml/elements/element_fragment.md) containing the title heading and any content that is not part of the Table of Contents such as title page. - An “xrefs” section with an [xref fragment](/psml/elements/element_xref-fragment.md) where you can specify the list of documents to include. - A TOC marker. We recommend that the title heading match the document title. It is used for the publication title. ![References document structure](/content/images/glossary/references_document_structure.svg) ```xml
``` --- title: "PageSeeder server" source: https://dev.pageseeder.com/reference/glossary/pageseeder_server.html description: "PageSeeder server is a core software component that interfaces with relational databases, Java application servers like Tomcat, and other system components through URLs, the Bridge, or PageSeeder Ant API." last_updated: 2026-08-11T16:37:11+10:00 tokens: ~146 --- # PageSeeder server Is a somewhat ambiguous term. It can be the conceptual term for the overall PageSeeder solution or it can refer to the main software component of the system (and counterpart to the [publish engine](/reference/glossary/publish_engine.md)). As a software component, the PageSeeder server interfaces with a relational database (through JDBC) a Java application server (typically Tomcat) and other components through [URLs](/reference/glossary/url.md), the [Bridge](/reference/glossary/bridge.md) or [PageSeeder Ant API](/reference/glossary/pageseeder_ant_api.md). --- title: "Publication" source: https://dev.pageseeder.com/reference/glossary/publications.html description: "A PageSeeder concept that uses publication IDs and configs to enable collection-level processing. Publication IDs serve as server-wide unique identifiers for root documents, while publication configs allow documents to exist in multiple publications with different numbering schemes and hierarchies." last_updated: 2026-09-14T15:59:05+10:00 tokens: ~268 --- # Publication A PageSeeder concept that was redefined with the release of version 5.96xx. With this version, PageSeeder introduced the [publication ID](/reference/glossary/publication_id.md) and the [publication config](/reference/glossary/publication_config.md). The implementation of these two concepts made collection-level processing easier and more powerful. As a server-wide, unique identifier, the publication ID makes it straightforward to find the root document in collections that use [xrefs](/reference/glossary/cross_reference.md) to embed or transclude content into a single hierarchy. While the publication ID is typically attached to a [references document type](/reference/glossary/references_document.md), any document can be a publication. With the publication config, the same document can simultaneously exist in multiple publications while being numbered according to different schemes, positions in the publication hierarchy or collection-level versioning. *See* [publications and publication types](/guide/configuration/publication_types.md). --- title: "Filename" source: https://dev.pageseeder.com/reference/glossary/filename.html description: "PageSeeder filename guidelines covering allowed characters (ASCII 32-126) and prohibited characters (/ \\ ? % * : | < > \"), with Windows-specific restrictions for spacing, periods, and reserved names." last_updated: 2026-08-11T16:30:20+10:00 tokens: ~374 --- # Filename Whether it is a normal binary file, such as ZIP file, or an Office document, or a PageSeeder [document](/reference/glossary/document.md), any file viewed in PageSeeder has both a filename and [document title](/reference/glossary/document_title.md). However, because these files are physically stored on the file system of the host server, they mustn't have names that violate the naming rules of the host operating system. Because PageSeeder can be run on many different operating systems, the allowable characters in a filename must conform with the following rules: - All characters between, and including, **ASCII 32** (Space) and **ASCII 126** (~) (see the following exceptions). For more detail, *see* this [chart on Wikipedia](https://en.wikipedia.org/w/index.php?title=ASCII&oldid=699929097#ASCII_printable_code_chart). ## Characters NOT allowed in a filename - **/ \\ ? % \* : | \< \> "** > **Note:** Due to Windows restrictions, it’s better: - Not to start or end a filename with a space or a period. - Not to use the following reserved names for the filename: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9. Also, avoid these names followed immediately by an extension; for example, NUL.txt is not recommended. The same constraints apply to [folder](/reference/glossary/folder.md) names. ![Document info panel – Filename](/content/images/glossary/document_info_filename_v60000.webp) --- title: "Fragment template" source: https://dev.pageseeder.com/reference/glossary/fragment_template.html description: "Fragment template is a component of the document template system, used to define reusable structural elements for creating consistent document layouts and formatting." last_updated: 2026-08-11T16:25:42+10:00 tokens: ~27 --- # Fragment template part of the [document template](/guide/configuration/psml/psml_document_template.md). --- title: "Task status" source: https://dev.pageseeder.com/reference/glossary/task_status.html description: "Task status is applied to discussion comments to track actionable items. PageSeeder's default model uses three statuses—Open, Resolved, Closed—with role-based permissions and notifications to manage task lifecycle from creation through completion." last_updated: 2026-09-14T13:54:39+10:00 tokens: ~1256 --- # Task status The task status applies to comments in a discussion. The status of the last comment is the status of the task. ## Task and comments In the course of a discussion, a comment might contain some actionable items. For example, during a discussion on software, an issue might arise and require a developer to fix the problem. To make this change natural and to provide useful background information, any discussion can be turned into a task by setting the status on a comment or reply to a comment. The status of the last comment in the discussion is the task status. ## Configuration The task status is configured as part of the group or project configuration. See below for an explanation on PageSeeder’s default configuration. ### Status and roles The status that a member can set on a comment is based on their role within a group. For more information, see the [status](/reference/glossary/status.md) document. ### Status order The task status has a natural lifecycle order. The list of task status values must be entered in the same order and reflect the order in which the task status is naturally changed. For example, if the task status is to start with 'Open', then naturally progress to 'Resolved' before being set to 'Closed', enter the statuses in the following order: 1. Open 2. Resolved 3. Closed ![Create task modal – Status drop-down](/content/images/glossary/task_modal_status_v60000.webp) ## PageSeeder defaults The default task statuses in PageSeeder assumes a simple model where at least two people are involved. The first person is in charge of *resolving* the task, that is, carry out all necessary actions outlined in the task description. The second person is in charge of *closing *the task by ensuring that there are no outstanding actions. - Any member of the group – except *guests – *can create a task. - A contributor or higher then resolves the problem, either their own task or a task assigned to another member, then - An approver or administrator can look at and close the task. ### Default task status and roles | | Open | Resolved | Closed | | --- | --- | --- | --- | | Approver | Y | Y | Y | | Manager | Y | Y | | | Contributor | Y | Y | | | Reviewer | Y | | | #### State diagram ![default\_task\_statuses.svg](/content/images/glossary/default_task_statuses.svg) ### Status description Natural lifecycle: **Open** → **Resolved** → **Closed** #### status-open Open (active) This is the initial status of a task after it has been created. The description of the task is typically defined in the most recent comment that gained that status. For example, if a task arises from a discussion, set the status to ‘Open’ on the comment that describes the problem or action to take to fix it.  The task requires some actions to be carried out before it can be resolved or closed. The list of actions to be taken are defined in the task description, that is, the last comment that has had its status changed to 'Open'. This status is considered *active*. Any member of the group – except *guests – *can create a task. #### status-resolved Resolved The work described in the task has been done and has resolved the corresponding issue. This status is an indication for the approver that the task must be verified. When a task is resolved, an email notification is sent to *approvers*.  In some cases, the approver can reopen the task and assign it to a member who can then perform the test or verification. Only *contributors* or higher can resolve a task. #### status-closed Closed All actions required to solve the issue have been carried out. An *approver* has verified that the issue is resolved and the task no longer requires any action. If the issue has not been resolved, the task can be reopened. In the user interface, closed tasks are usually no longer listed a period of time after they have been closed. This is normally the final state of a task. ### Notification Normally, email notification is controlled by setting the Notify option to 'silent', 'normal' or 'announce'. This defaults to 'normal', except when using the 'Update this task' feature, where it is always 'silent'. However, when a status is changed, the following [Group Properties](/guide/configuration/properties/group_properties.md) determine if an email notification is sent, even when Notify is set to 'silent': - `broadcastStatusChange` – If `true`, then notification is broadcast to all authors or assigned members for that task. *This can be used to notify the assigned that they have a task to do.* Default is `false`. - `broadcastStatusApprovers` – If the new status is listed here, then notification is broadcast to all approvers in the group. *This can be used to notify approvers that a task is ready for them to review.* Default is empty. ## Example The following example shows the lifecycle of a task to implement a new feature in some software as a result of a discussion. ![Task lifecycle example](/content/images/glossary/task_example.webp) --- title: "Draft" source: https://dev.pageseeder.com/reference/glossary/draft.html description: "PageSeeder automatically saves document drafts every few seconds while editing. Draft status is indicated by colored banners and icons in the document view, with blue for available drafts, red for locked drafts, and yellow for unsaved edits. Users can access all drafts from their my drafts page." last_updated: 2026-08-11T16:23:03+10:00 tokens: ~230 --- # Draft PageSeeder [auto-saves](/reference/glossary/auto-save.md) content that you type in the app as a draft, every few seconds after you stop typing. In the document view, existing drafts are displayed as follows: - A blue banner with draft icon to the left of the fragment if no other user holds a draft on the fragment. - A red lock icon to the left if another user holds a draft. - A yellow banner with draft icon indicates the edits have not yet been saved as a draft. ![Document edit draft](/content/images/glossary/document_edit_draft_v60000.webp) All drafts for an account are available on their **my drafts page**. ## Draft comments A draft comment is only visible to the writer but draft document edits are visible to other users in the fragment history. Draft comments include the content, title, labels and any attachment. ![Comment autosave](/content/images/glossary/comment_autosave_v60000.webp) --- title: "Backup" source: https://dev.pageseeder.com/reference/glossary/backup.html description: "This document outlines backup requirements for PageSeeder, covering both file system and database backups. It details which folders to back up, including documents, configuration, and state files, with guidance on backup procedures and priorities." last_updated: 2026-08-11T16:17:39+10:00 tokens: ~677 --- # Backup Requires backing up both the file system and the database. `` ## File system backup The following is a summary of folders to back up: | Folder (Linux) | Contents | Backup instruction | | --- | --- | --- | | `/opt/pageseeder/documents`  | The source of all non-PSML documents | **Required simultaneously with database backup** | | `/opt/pageseeder/WEB-INF/config`  | A PageSeeder configuration including properties and templates | **Required** | | `/opt/pageseeder/WEB-INF/state`  | Indexes, logs, caches and temporary files | **Recommended (publish can be excluded)** | ### Documents The [documents folder](/reference/folders_and_files/documents_folder.md) holds the source files for most documents and must be regularly backed up. To ensure consistency, the backup must be performed simultaneously with the database backup, ensuring that database references to the files remain accurate. As the documents folder can contain a large number of files and grows over time, it's important to factor this into your capacity planning and management strategy. > **Warning:** If the database and documents folder are not backed up simultaneously, some documents might become dereferenced or reported as missing by PageSeeder. ### Config The [config folder](/reference/folders_and_files/config_folder.md) must be backed up as it contains all files specific to your PageSeeder installation. > **Tip:** Although they do not change frequently, we recommend backing them up alongside other backups. ### State Files in the [state folder](/reference/folders_and_files/state_folder.md) are highly volatile and grow over time. All files in this folder are generated by PageSeeder and are not critical for disaster recovery. While most files can be regenerated, the state folder contains important files that are essential for PageSeeder’s functionality and performance: - **Indexes**: These enable searching and related functions. If lost, PageSeeder administrators need to rebuild them using the administration interface. For installations with many documents or comments, the indexing process can take several hours, delaying full functionality. - **Caches**: These files are automatically regenerated as the system is used. However, their loss can impact performance and degrade the user experience. *PageSeeder must be stopped to backup the `ehcache` files which include the PSML documents cache.* - **Logs**: While not necessary for PageSeeder to function, logs might need to be retained for regulatory compliance. Therefore, they generally need be backed up as part of your retention strategy. The **publish folder** contains only temporary files and can be safely excluded from backups. --- title: "Export" source: https://dev.pageseeder.com/reference/glossary/export.html description: "Export in PageSeeder is a publish script feature using the batch API that converts documents to multiple formats including DOCX, PDF, and PSML, with customizable options via the publish-config file." last_updated: 2026-09-08T13:58:24+10:00 tokens: ~244 --- # Export Like [download](/reference/glossary/download.md) and [publish](/reference/glossary/publish.md), export is simply a meaningful name for [publish scripts](/reference/glossary/publish_script.md) that use PageSeeder’s [batch API](/reference/glossary/pageseeder_ant_api.md). By default, PageSeeder comes with publish scripts that export to the following formats: - [Microsoft Word DOCX format](/reference/glossary/word_docx_format.md) - [PDF documents](/reference/glossary/pdf_documents.md) - or native [PSML – PageSeeder Markup Language](/reference/glossary/psml.md) However, adding support for other XML formats such as Adobe InDesign and Microsoft [Excel](/get_started/tutorials/upload_excel_as_psml.md) is straightforward. ## Modify the Export interface There are times when it is desirable to customize the available export options. To modify the options, edit the [publish-config](/reference/folders_and_files/project_template/publish/publish-config.md) file. --- title: "Administrator" source: https://dev.pageseeder.com/reference/glossary/administrator.html description: "Administrator role in PageSeeder with elevated permissions to configure the server, manage members, projects, groups, templates, logs, and system configuration through the administration dashboard." last_updated: 2026-09-14T13:54:39+10:00 tokens: ~310 --- # Administrator A particular [role](/reference/glossary/role.md) with elevated permission to configure a [PageSeeder server](/reference/glossary/pageseeder_server.md). > **Note:** PageSeeder administrators are some times referred to as ’admins“ in the documentation. The two terms are equivalent. ## System administration An administrator can view the **administration dashboard page**, allowing them to: - Manage members. - Manage projects and groups. - Edit the templates. - View the logs. - Edit the system configuration. - Monitor the server status. - Manage the OAuth configuration. > **Tip:** Only administrators can see the tools icon in the header bar. If you don’t see it, you’re not an administrator. Outside the administration dashboard, this icon denotes functions that require administrator permission. ![System admin menu item](/content/images/glossary/system_admin_menu_v60000.webp) ## Managing projects & groups The permissions of an Administrator are the same as a group [manager](/reference/glossary/manager.md), but they don’t need to be a member. > **Note:** Administrators can view and manage any group in PageSeeder, but only the groups and projects of which they are members displays in their navigation.  --- title: "PageSeeder Ant API" source: https://dev.pageseeder.com/reference/glossary/pageseeder_ant_api.html description: "The PageSeeder Ant API enables batch processing of multiple files through various stages using Apache ANT, serving as the foundation for PageSeeder's publish functionality." last_updated: 2026-08-11T16:32:44+10:00 tokens: ~82 --- # PageSeeder Ant API A common requirement for PageSeeder is to process numerous files through multiple stages. To support this, a version of the PageSeeder API can be called from a batch processing environment, [Apache ANT](https://ant.apache.org/). This is the basis of PageSeeder [publish](/reference/glossary/publish.md). --- title: "Authorization code" source: https://dev.pageseeder.com/reference/glossary/authorization_code.html description: "An authorization code is a short-lived, single-use token issued by PageSeeder during Single-Sign-On or OAuth flows, bound to a specific user and registered OAuth client." last_updated: 2026-09-08T12:22:54+10:00 tokens: ~168 --- # Authorization code The authorization is a one-time use code that is issued by PageSeeder as part of a [Single-Sign-On](/reference/glossary/single_sign-on.md) process or OAuth authorization code flow. It is short-lived and bound to a specific user and a registered [OAuth client](/reference/glossary/oauth_client.md). > **Note:** In the context of a Single-Sign-On, the ‘Authorization code’ might be referred to as ‘Authentication code’ because it can only be used for authentication. Administrators can see the list of authorization codes recently issued by PageSeeder on **OAuth codes page**, under **OAuth \> Authorization codes** in the system administration. --- title: "ID token" source: https://dev.pageseeder.com/reference/glossary/id_token.html description: "An ID token is a JSON web token containing user information claims that PageSeeder uses to verify user identity. PageSeeder validates tokens from registered identity providers, requiring specific claims and matching email addresses to existing user accounts." last_updated: 2026-09-08T12:22:54+10:00 tokens: ~896 --- # ID token An ID token contains claims that carry information about the user. Information in ID tokens let PageSeeder verify that a user is who they claim to be. ID tokens are [JSON web tokens (JWT)](https://wikipedia.org/wiki/JSON_Web_Token). These ID tokens consist of a header, payload, and signature. The header and signature are used to verify the authenticity of the token, while the payload contains the information about the user requested by your client. PageSeeder only accepts tokens from identity providers that have been registered in the identity configuration, and verifies the authenticity of every token. > **Warning:** PageSeeder matches users with their email address. If the email address changes on the external identity provider, it needs to be updated on PageSeeder. ## Example The following describe the structure of a sample ID token. ### Payload The payload contains the claims, for example: ```json {   "iss": "https://id.example.org",   "sub": "example-123456",   "aud": "my_client_id",   "exp": 1516239022,   "iat": 1516239022,   "name": "Jane Doe",   "given_name": "Jane",   "family_name": "Doe",   "email": "janedoe@example.org" } ``` PageSeeder requires the following claims in the payload: - the `iss` (issuer) claim - the `aud` (audience) claim - the `exp` (expiry) claim - the `email` claim ### Header The header indicates the algorithm and token type. PageSeeder also requires the `kid` (key ID) and `kty` (key type) to be specified so that it can look up the public keys. Example:  ```json {   "alg": "HS384",   "typ": "JWT" } ``` ### Encoded token The ID token is encoded as `[header].[payload].[signature]`, for example: ```text eyJhbGciOiJIUzM4NCIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2lkLmV4YW1wbGUub3JnIiwic3ViIjoiZXhhbXBsZS0xMjM0NTYiLCJhdWQiOiJteV9jbGllbnRfaWQiLCJleHAiOjE1MTYyMzkwMjIsImlhdCI6MTUxNjIzOTAyMiwibmFtZSI6IkphbmUgRG9lIiwiZ2l2ZW5fbmFtZSI6IkphbmUiLCJmYW1pbHlfbmFtZSI6IkRvZSIsImVtYWlsIjoiamFuZWRvZUBleGFtcGxlLm9yZyJ9.uUsgJL1mjFYzUZgnmRRNiRmdDdhuDEEGanpmvu7WUzr_TQHs9bBUNX0tK-UI-pVy ``` This is the value that is sent as the id\_token parameter between services. ## Token validation PageSeeder verifies the signature of every ID token, so the OpenID provider must provide a metadata endpoint at `/.well-known/openid-configuration` so that PageSeeder can retrieve the public keys. PageSeeder supports the RSA and Elliptic Curve (EC) key types. > **Note:** PageSeeder caches both the metadata information and keys (JWKS) to avoid unnecessary request. The caching period is based on the `Cache-Control` headers sent by the Identity provider. The claims must match the following conditions: | Claim | Condition required | | --- | --- | | `iss` | Matches the authority URL in the external identity configuration | | `aud` | Matches the client ID in the external identity configuration | | `exp`  | Has not expired | | `email` | Matches the following conditions: Domain is listed in the external identity configurationEmail matches an existing user account | > **Warning:** Retrictions on API still apply: no authentication if the matching member is listed as API account in the `apiAccountUsernames` [global property](/guide/configuration/properties/global_properties.md) and the request IP is not listed in the `apiAccountIPs` global property. ## Supported providers PageSeeder supports tokens from: - [Microsoft identity platform](https://docs.microsoft.com/en-us/azure/active-directory/develop/id-tokens) - [Google Identity](https://developers.google.com/identity/gsi/web/guides/verify-google-id-token) --- title: "file – build.xml" source: https://dev.pageseeder.com/reference/glossary/file_build.html description: "Standard Ant build configuration file that defines project tasks and build processes. Reference documentation for using the Ant API and build automation within projects." last_updated: 2026-08-11T16:32:49+10:00 tokens: ~33 --- # build.xml the standard file object for the Ant API. For further information, *see* [using Ant](/guide/publishing/using_ant.md). --- title: "Task" source: https://dev.pageseeder.com/reference/glossary/task.html description: "A task is an action defined by its status, created when a discussion includes a commented item. Tasks are moveable and can relate to documents, fragments, or groups, with configurable properties including status, priority, assignee, and due date." last_updated: 2026-09-08T14:07:33+10:00 tokens: ~517 --- # Task A task is an action to be undertaken and is defined by its [status](/reference/glossary/task_status.md). An active task is a task which has an *[active status](/reference/glossary/status.md)*. In the user interface, PageSeeder uses the task icon for tasks. When a [discussion](/reference/glossary/discussion.md) includes at least one [comment](/reference/glossary/comment.md) with a status, it becomes a task. The status of the last comment in a discussion is the task status.  Documents can have any number of tasks.  > **Note:** Unlike [workflows](/reference/glossary/workflow.md) which are bound to the document, tasks are **moveable **and can relate to a document, a document fragment, including page in a PDF, or be a general task.  Like comments, tasks can be created against the following: - [group](/reference/glossary/group.md) – means that the task hasn’t been attached to any specific content. - [document](/reference/glossary/document.md) or [version](/reference/glossary/version.md) – relates to the entire document. - [fragment](/reference/glossary/fragment.md) – attaches the task to a specific point in the document. A task has the following configurable properties such as: - **[Status](/reference/glossary/status.md)** – nominates the state of the task; reflects an action to be undertaken. - **[Priority](/reference/glossary/priority.md)** – nominates the importance of the task. - **[Assignee](/reference/glossary/assignee.md)** – nominates the [member](/reference/glossary/member.md) responsible for the task. - **Due Date** – nominates when completion of the task is required. > **Tip:** The [task status](/reference/glossary/task_status.md) values available to use depend on the [role](/_external/ps/doc/help/help/2_terms_and_explanations/term/role.md) that a member has in the group. In the [group properties](/_external/ps/doc/help/help/1_user_interface/layout/group_properties.md), managers can set the values for properties and which [roles](/_external/ps/doc/help/help/2_terms_and_explanations/term/role.md) can use them. --- title: "File system" source: https://dev.pageseeder.com/reference/glossary/file_system.html description: "PageSeeder uses the file system to store documents and binary files. This document compares common file systems (Ext3/4, FAT32, NTFS, HFS+, UDF, exFAT) across operating systems, detailing their maximum volume and file sizes, filename length limits, allowed characters, and OS-specific restrictions." last_updated: 2026-08-11T16:30:20+10:00 tokens: ~713 --- # File system PageSeeder relies on the file system to store documents and binary files. For information about files managed by PageSeeder, *see* [folders and files](/reference/folders_and_files.md). ## Common file systems The following table summarizes the important features and limitations of common file systems: | | Linux | Windows | MacOS | | --- | --- | --- | --- | | | Ext3 | Ext4 | FAT32 | NTFS | HFS + | | Max volume size | 4 Tib-32 Tib | 1 EiB | 32 Gib | 16 EiB | 8 EiB | | Max file size | 16 Gib-2 Tib | 16 Tib | 4 Gib | 16 EiB | 8 EiB | | Max filename length | 255 bytes | 255 UTF-16 characters  | | Max pathname length | 4,096 bytes | 32,760 UTF-16 characters | | | Allowed chars in filenames | All bytes (except NUL) | Any Unicode character (except NUL and '/') | Any Unicode character (including NUL) | | Directories | 31998 | unlimited | | | | | Max number of files | Depends on volume size | 4 billion | 264-1 | 232-1 | | Case sensitive | Yes | Yes | No | Optional - OS prevents same case-insensitive name in a directory | | Case preserving | Yes | Yes | Yes | Yes | Yes | > **Note:** Note that additional limitations are imposed by the operating system. ## Other file systems The following file systems are used for external storage devices such as USB keys, SD cards, DVD and CD-ROM. | | UDF | exFAT | | --- | --- | --- | | Max volume size | 2 TB | 128 PiB | | Max file size | 16 EB | 128 PiB | | Max filename length | 255 bytes | 255 UTF-16 characters | | Max pathname length | 1023 bytes | | | Allowed chars in filenames | Any Unicode except NUL | Unicode UTF-16 except: +0000 (NUL) through U+001F/ (slash)\\ (backslash): (colon)\* (asterisk)? (Question mark)" (quote)\< (less than)\> (greater than)\| (pipe) | | Max files in directories | | 2,796,202 | | Max number of files | | | | Reserved file names | | | ## Operating system limits Operating systems impose additional limits to the file system. Most use Unicode in practice. ### Linux - Unicode support by default using UTF-8 encoding. - File names starting with a ‘.’ are hidden. ### Microsoft Windows - Unicode using by default UTF-16 encoding. - Reserved characters in filenames: - U+0000 (NUL) through to U+0031. - \< (less than). - \> (greater than). - : (colon). - " (double quote). - / (forward slash). - \\ (backslash). - | (vertical bar or pipe). - ? (question mark). - \* (asterisk). - Reserved file names: - CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9. - Use of filename even with an extension (e.g. NUL.txt) is not recommended. - File names shouldn’t end with a ‘.’ or ‘ ’ (space). ## MacOS - Unicode using by default UTF-16 encoding. - Reserved characters: - : (colon). - / (slash). --- title: "Publication ID" source: https://dev.pageseeder.com/reference/glossary/publication_id.html description: "A server-wide unique identifier for documents displayed in Group Publications. Must be under 250 characters and contain only alphanumeric characters, underscores, and hyphens." last_updated: 2026-09-05T17:35:25+10:00 tokens: ~85 --- # Publication ID A server-wide, unique value represented by a document property. Any document with a value in this field is displayed in the list of **Group Publications**. It must be less than 250 characters long and can only contain the following characters: numbers `0-9`, letters `A-Z` and `a-z`, underscores `_` and hypens `-`.   --- title: "Edit note" source: https://dev.pageseeder.com/reference/glossary/edit_note.html description: "Edit notes are XLinks attached to document fragments that explain the reasons for specific changes. They appear beside edited content and in change history but disappear once the fragment is re-edited, unlike persistent comments." last_updated: 2026-09-08T12:22:42+10:00 tokens: ~200 --- # Edit note An edit note is a particular type of [XLink](/reference/glossary/xlink.md) (a note) attached to a specific change in a [fragment](/reference/glossary/section.md) (an edit). The purpose of edit notes is to explain the reason for the change in the [document](/reference/glossary/document.md). For example, if a document was edited to address a typographical error, an edit note can be made to mention this. Edit notes appear to the right of the edited fragment when viewing a document. They are also displayed when viewing the change history of the fragment. Although they are attached to document fragments, unlike comments, they don’t persist after the fragment has been edited. ![document\_has-note\_v59806\_edit-note.png](/content/images/glossary/document_has-note_v59806.webp) --- title: "Priority" source: https://dev.pageseeder.com/reference/glossary/priority.html description: "Priority defines the urgency or importance level of tasks and workflows in PageSeeder. Managers can configure up to five predefined levels (High, Medium, Low, plus two custom levels) represented by colored circles in the user interface." last_updated: 2026-08-17T10:12:31+10:00 tokens: ~285 --- # Priority Defines the level of urgency or importance of a [task](/reference/glossary/task.md) or [workflow](/reference/glossary/workflow.md). The priority is an optional task and workflow property. ## Configuration PageSeeder has three predefined priority levels: High, Medium and Low. [Managers](/_external/ps/doc/help/help/2_terms_and_explanations/term/manager.md) can change the values for the priority levels in the [group properties](/reference/glossary/group_properties.md) and can define up to two additional priority levels. > **Warning:** If you change the number or the order of priority levels, you also need to re-index the group, so that they are sorted correctly in the search results.  ## User interface In the user interface, the priority is represented as colored circle: | No priority | circle lighter-grey | | --- | --- | | From highest to lowest level | circle red circle orange circle yellow circle green circle blue | > **Tip:** PageSeeder only allocates five colors for priority level so if you define more than five levels of priority, your users might not be able to distinguish between them as easily. --- title: "URI ID / uriid" source: https://dev.pageseeder.com/reference/glossary/uri_id.html description: "PageSeeder's internal identifier for documents, folders, and URLs. Unlike the user-assigned document ID, URI ID is system-generated and varies across servers. Accessible via XML uriid attributes, JSON properties, and PSML document elements." last_updated: 2026-09-14T15:58:53+10:00 tokens: ~251 --- # URI ID / uriid Is PageSeeder’s internal identifier, as opposed to the [document ID](/reference/glossary/document_id_docid.md) which is designed to be a public identifier. Because it is generated, the URI ID of a document will be different if it is uploaded to a different PageSeeder server, whereas the document ID, being user assigned rather than generated, stays the same. [URI](/reference/glossary/uri.md) IDs are created for [documents](/reference/glossary/document.md), [folders](/reference/glossary/folder.md) and [URLs](/reference/glossary/url.md). In the API, the URI ID is available as: - A `uriid` attribute in XML [element \](/api/elements/element_uri.md). - A `uriid` object property in JSON. In PSML, it is available as the `@id` attribute of the [\ element](/psml/elements/element_document.md). The URI ID can be found in the **document info and metadata panel**. ![Document info panel – URI ID](/content/images/glossary/document_info_panel_uriid_v60000.webp) --- title: "Edit note label" source: https://dev.pageseeder.com/reference/glossary/edit_note_label.html description: "Edit note labels are temporary labels attached to notes on document edits that don't persist after fragment editing. Use fragment labels for persistent labeling across edits." last_updated: 2026-08-11T16:27:35+10:00 tokens: ~106 --- # Edit note label Edit note [labels](/reference/glossary/labels.md) are attached to a [note](/reference/glossary/edit_note.md) made on a document edit. Since these labels are attached to notes on a given edit, they won’t persist after the [fragment](/reference/glossary/fragment.md) has been edited. To apply a label to a fragment that persists after edits, use a [fragment label](/reference/glossary/fragment_label.md). --- title: "CORS" source: https://dev.pageseeder.com/reference/glossary/cors.html description: "CORS is an HTTP-header mechanism enabling servers to permit cross-origin resource access from specific origins. PageSeeder supports CORS by allowing configuration through OAuth clients that match acceptable origin URIs." last_updated: 2026-09-08T12:22:54+10:00 tokens: ~240 --- # CORS **Cross-Origin Resource Sharing** ([CORS](https://developer.mozilla.org/en-US/docs/Glossary/CORS)) is an HTTP-header based mechanism that allows a server to indicate any origins (domain, scheme, or port) other than its own, from which a browser is to permit to load resources. The [same-origin security policy](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy) forbids cross-origin access to resources. But CORS gives web servers the ability to say they want to opt into allowing cross-origin access to their resources. ## Configuration Unless specified otherwise, most API services support CORS. To define the origins that are acceptable, create an [OAuth client](/reference/glossary/oauth_client.md) that matches the origin PageSeeder is to accept. For example, to support a cross-origin request from an app at `https://app.example.net` , you need to register an OAuth client and set its URI as `https://app.example.net`. --- title: "Comment ID" source: https://dev.pageseeder.com/reference/glossary/comment_id.html description: "Comment ID is a unique system-wide identifier assigned to every PageSeeder comment, enabling email replies and external task references in project management tools like Jira." last_updated: 2026-08-11T16:35:23+10:00 tokens: ~159 --- # Comment ID There is a unique system-wide generated identifier for every PageSeeder [comment](/reference/glossary/comment.md). ## Email addresses The *comment ID* can provide a return address for emailed comments: ```text {comment_id}-reply@ps.pageseeder.com ``` ## Comments, tasks and discussions The comment ID is a useful way to reference tasks from outside PageSeeder. For example, when using project management tools such as *Jira* or *Bugzilla*. The ID of the first comment in a [discussion](/reference/glossary/discussion.md) or a [task](/reference/glossary/task.md) is also known as the “discussion ID” or “task ID”. --- title: "Universal format" source: https://dev.pageseeder.com/reference/glossary/universal_format.html description: "The universal format is a PageSeeder file collection structure used outside PageSeeder, employing PSML for representing documents and metadata. Refer to PSML documentation for additional details." last_updated: 2026-09-05T15:50:09+10:00 tokens: ~89 --- # Universal format The universal format refers to a collection of PageSeeder files when outside PageSeeder. It consists of a file organization and uses [PSML](/psml/universal_format/psml.md) as a representation for PageSeeder documents and their metadata. See the PSML documentation on the [Universal format](/psml/universal_format.md) for more details. --- title: "Index XML" source: https://dev.pageseeder.com/reference/glossary/index_xml.html description: "The index XML is the XML format used by the PageSeeder Index Engine as a source for indexing documents and content within PageSeeder systems." last_updated: 2026-09-08T14:02:06+10:00 tokens: ~38 --- # Index XML The index XML is the XML format used by the *PageSeeder Index Engine* as a source. *See* the [Index](/reference/index.md) for details. --- title: "Moderated group" source: https://dev.pageseeder.com/reference/glossary/moderated_group.html description: "A moderated group assigns the moderator role to a member who approves transactions like membership applications and comments. Commonly used for public groups allowing non-member comments." last_updated: 2026-08-11T16:33:44+10:00 tokens: ~125 --- # Moderated group A group with the [role](/reference/glossary/role.md) of [moderator](/reference/glossary/moderator.md) assigned to a member. PageSeeder then directs different transactions to the nominated individual for approval. Transactions that can be moderated are: anyone applying to join the group or comments being posted to members. A moderated group is typically used when comments can be posted by non-members – also known as a “[public](/reference/glossary/group_public.md)” group.   --- title: "Content labels" source: https://dev.pageseeder.com/reference/glossary/content_labels.html description: "Content labels are PageSeeder document formatting elements that include block and inline types. They function like paragraph and character styles, become visible during editing, and convert to PDF/DOCX styles or HTML div/span elements upon publishing." last_updated: 2026-09-05T15:41:44+10:00 tokens: ~358 --- # Content labels Content labels are a class of label used to describe information inside [PageSeeder documents](/reference/glossary/document.md). The two types of content labels: **[block label](/reference/glossary/block_label.md)** and **[inline label](/reference/glossary/inline_label.md)** are analogous to the idea of paragraph and character styles in publishing or word processing systems, or to the [HTML](/reference/glossary/html.md) elements of `
` and ``. Content labels become visible to the user while editing. When PageSeeder documents are published, the labels are automatically translated for output as styles in [PDF](/reference/glossary/pdf_documents.md) and [DOCX](/reference/glossary/word_docx_format.md) or `
` and `` elements in HTML. When saved as XML, content labels are expressed as: ```xml content content ``` where `XXXX` is the name of the label. Inline labels are also automatically indexed and can be selected through the search facets. The other class of PageSeeder labels are [object labels](/reference/glossary/object_labels.md), that are attached to PageSeeder artifacts such as [documents](/reference/glossary/document.md), [sections](/reference/glossary/section.md), [comments](/reference/glossary/comment.md), [tasks](/reference/glossary/task.md) or [cross-references](/reference/glossary/cross_reference.md). --- title: "Preferences" source: https://dev.pageseeder.com/reference/glossary/preferences.html description: "Personal preferences in PageSeeder are user-specific settings stored with individual accounts. Users can access and manage these preferences through the dedicated Preferences page in their account settings." last_updated: 2026-08-11T16:30:56+10:00 tokens: ~58 --- # Preferences Personal preferences are stored in PageSeeder against the user’s account. They are accessible from the account **Preferences page**.  ![Account preferences page](/content/images/glossary/preferences_v60000.webp) --- title: "Edit sheet" source: https://dev.pageseeder.com/reference/glossary/edit_sheet.html description: "The Edit sheet is a hybrid spreadsheet-editor tool that enables users to batch edit metadata, properties, filenames, and fragment properties across multiple documents or files simultaneously, supporting hundreds of items for consistent value management." last_updated: 2026-09-05T17:35:16+10:00 tokens: ~203 --- # Edit sheet As the name implies, this is a hybrid of a spreadsheet and a conventional editor.  Available from the search results, the Edit sheet makes it straightforward for users to open an entire folder of documents or binary objects and edit their *metadata*, *properties*, or *filename*. In the case of PSML documents, the Edit sheet also exposes [fragment properties](/psml/elements/element_properties-fragment.md) or [inline labels](/reference/glossary/inline_label.md) for editing. The Edit sheet also allows users to [batch process](/reference/glossary/batch_processing.md) multiple files at once using one of the available functions. Able to support hundreds of files at a time, the Edit sheet is a good solution for ensuring that values are consistently expressed across a collection of documents. --- title: "Password" source: https://dev.pageseeder.com/reference/glossary/password.html description: "This document outlines PageSeeder's password requirements and policy. It details password strength evaluation criteria, minimum strength levels for different user types, length requirements for each strength tier, and lists banned and blank passwords." last_updated: 2026-09-08T14:05:44+10:00 tokens: ~455 --- # Password Passwords are required for all users to authenticate or access private [groups](/reference/glossary/group.md). ## Password policy From version 5.1 onwards, PageSeeder enforced a stronger password policy for all users. The strength of each password is evaluated, from WEAK to STRONG, according to various criteria. The following affect the password strength positively: - The length of the password. - The presence of digits or special characters. - Whether mixed case characters have been used. The following might affect the password strength negatively: - Some characters are repeated. - Some common sequences, such as ‘*123456’* or ‘*qwerty’* are used. ### Acceptance criteria | Users | Minimum Strength | | --- | --- | | Default | MEDIUM | | Administrators | STRONG | ### Generating passwords The following table shows the length required to generate the different strength levels. The minimum length is the length required to pass the level if it includes at least a special character, a digit, and uses mixed case. The safe length is the length required to pass the level if it includes only lower case characters and 1 digit. The letter length is the length required to pass the level if it includes only lower case characters.  | Strength | Minimum Length | Safe Length | Letter Length | | --- | --- | --- | --- | | WEAK | 0 | 0 |  0 | | MEDIUM | 7 | 8 |  12 | | GOOD | 9 | 12 |  14 | | STRONG | 12 | 15 |  18 | ### Banned passwords Some passwords are on the banned password list and aren’t accepted, regardless of whether they meet other criteria. They are common passwords which could be used for dictionary attacks. Examples of banned passwords: *password*, *passw0rd*, *pageseeder, 123456* ### Blank passwords From version 5.1 onward, blank passwords are no longer permitted. --- title: "URL" source: https://dev.pageseeder.com/reference/glossary/url.html description: "URL is a first-class PageSeeder object representing external resources with metadata and labels. It enables reverse cross-references for tracking links to external sites and supports semantic web objectives." last_updated: 2026-09-05T17:32:47+10:00 tokens: ~504 --- # URL Also known as an *external URI*. This object stores the location of a resource that exists outside PageSeeder. It is a first class citizen in the system and can be the target of links which produce reverse cross-references. Because an external URL is a specialized PSML document, it can have metadata and labels. It is also searchable, like other documents. External URLs can be uploaded with [metadata](/psml/universal_format/universal_metadata_format.md) as part of the [Universal Portable Format](/psml/universal_format/universal_portable_format.md). The display of [reverse cross-references](/reference/glossary/reverse_xref.md) from external URLs is a good mechanism for tracking and managing links from documentation to external sites. For example, a document collection with multiple references to a section of legislation, might find that links to an external URL are a more reliable expression of a relationship than searching the text for references. While not syntactically the same as the semantic web, the URL object helps PageSeeder to support some of the semantic web architectural objectives. > **Note:** Unlike [internal URIs](/reference/glossary/uri.md) the path part of a URL is case sensitive, for example `https://example.org/abc` is considered a different URL to `https://example.org/ABC`. The URL and its metadata are only stored once per server. URLs are associated with groups when they are linked to from a document or comment in that group. A URL’s title, description and metadata (if specified in the [URL template](/guide/configuration/url_types.md)) are automatically extracted from its source the first time it is created or linked to. Only an [Administrator](/reference/glossary/administrator.md), or a  [Contributor](/reference/glossary/role.md) in a group that has the “**Allow contributors in this group to edit all URLs on the server**” option ticked in the [group configuration](/reference/glossary/group_config_advanced_options.md), can edit URLs and their metadata. --- title: "Ant task" source: https://dev.pageseeder.com/reference/glossary/ant_task.html description: "Apache Ant tasks perform actions in publish scripts. These tasks enable automation and execution of build-related operations within PageSeeder's publishing workflow." last_updated: 2026-09-05T17:33:35+10:00 tokens: ~34 --- # Ant task *[Apache Ant](https://ant.apache.org/)* tasks perform actions in a [publish script](/reference/glossary/publish_script.md). --- title: "Activity – group" source: https://dev.pageseeder.com/reference/glossary/activity_group.html description: "Lists member activities within a group, including comments, versions, and xrefs. Sortable by various activity types and filterable by author, labels, document type, location, publication, and date range." last_updated: 2026-08-11T16:37:30+10:00 tokens: ~181 --- # Activity – group Provides a list of the activities, sortable by the activity of [members](/reference/glossary/member.md), including the following: - attachments - [comments](/reference/glossary/comment.md) - creations - drafts - edits - images - modifications - notes - structure - tasks - uploads - [versions](/reference/glossary/version.md) - workflows - [xrefs](/reference/glossary/cross_reference.md) In the report interface, the activities can be filtered by author, [labels](/reference/glossary/labels.md), [document type](/reference/glossary/document_type.md), location, [publication](/reference/glossary/publications.md) and date/time period.  The report can be viewed on the **document activity page**. --- title: "Transclusion" source: https://dev.pageseeder.com/reference/glossary/transclusion.html description: "A transclusion is a cross-reference that directly includes referenced content into a source document. In PSML, it uses a blockxref element with type \"transclude\", automatically embedding content at processing time rather than only during publication." last_updated: 2026-09-05T17:36:31+10:00 tokens: ~222 --- # Transclusion A transclusion is a type of [cross reference](/reference/glossary/cross_reference.md) that is resolved directly, so that the referenced content (a [document](/reference/glossary/document.md) or part of a document) is included into the source document. In [PSML – PageSeeder Markup Language](/reference/glossary/psml.md), transclusions are expressed using a `` of type `transclude`: ```xml ``` For more information, *see *[http://en.wikipedia.org/wiki/Transclusion](https://en.wikipedia.org/wiki/Transclusion). #### Transclusion vs. embedded links The essential difference between an embedded link and a transclusion, is when the referenced content is included in the document. Transcluded content is automatically included in the source document whereas embedded content is only included when the content is published. --- title: "PDF documents" source: https://dev.pageseeder.com/reference/glossary/pdf_documents.html description: "PageSeeder stores, indexes, searches, and displays PDF documents while also enabling PDF format creation from PSML documents for export purposes." last_updated: 2026-08-11T16:32:12+10:00 tokens: ~57 --- # PDF documents PageSeeder stores, indexes, searches, and displays PDF documents. It can also create PDF format from PSML documents. *See* [PDF export config usage](/guide/publishing/ant_api/extensions/pdf_export_config.md).  --- title: "Developer license" source: https://dev.pageseeder.com/reference/glossary/developer_license.html description: "The developer license for PageSeeder enables developers to create unlimited projects, groups, and members when accessing PageSeeder via localhost or *.localhost, configured by setting the product key to 'dev'." last_updated: 2026-08-11T16:21:25+10:00 tokens: ~120 --- # Developer license The developer license for PageSeeder allows [developers](/reference/glossary/developer_view.md) to create unlimited projects, groups and members as long as they access PageSeeder through *localhost* or *\*.localhost* only. This license is configured by setting the product key to ‘dev’ and website address to ‘localhost’ or ‘\[x\].localhost’. For more information on the developer license, *see* [Installation: License Requirements](/guide/installation.md). --- title: "PSML – PageSeeder Markup Language" source: https://dev.pageseeder.com/reference/glossary/psml.html description: "PSML is PageSeeder's XML markup language for representing diverse document structures. Built on HTML foundations, it prioritizes simplicity and productivity over complex standards like DITA, enabling sophisticated publishing through powerful linking capabilities." last_updated: 2026-09-14T15:58:53+10:00 tokens: ~1165 --- # PSML – PageSeeder Markup Language PSML (PageSeeder Markup Language) is an XML markup language designed to represent a broad range of documents. It is natively supported by the components of the PageSeeder platform with no need for additional configuration. This includes the editor, publishing processes, validator, index/search engine and more. PSML is also known as the [Universal format](/reference/glossary/universal_format.md). For developer information, *see* [PSML elements](/psml/elements.md). ## Background Because PageSeeder is designed to support arbitrary document structures, the language focuses on providing developers with familiar structural components. As a specialization of [HTML](/reference/glossary/html.md), PSML recognizes that many of the objects designed for web pages are the logical descendants of objects that exist for non-web documents. With the right constraints, HTML structures like [lists](/psml/elements/element_list.md), [images](/psml/elements/element_image.md) and [tables](/psml/elements/element_table.md) provide a good foundation for a sophisticated publishing system. They have the added benefit of being understood by every computing device on earth. Open standards exist for documentation; these include [DITA](https://en.wikipedia.org/wiki/Darwin_Information_Typing_Architecture), [Docbook](https://en.wikipedia.org/wiki/DocBook) and others. While they are considered, mature standards with plenty of support from their users and the development community, our feeling is that they demand too much of the markup language. This creates a situation where the standards are too complex to deliver on their fundamental objectives of portability, application independence and most importantly, productivity. Instead of overloading the format that describes the content, PageSeeder moves some information into the application. Notionally, this makes the document less portable. In reality, our experience is that people care more about the immediate document production processes than the future exchange of documents. Also, when standards become too complex, consistency between users and document collections is less likely. As a result, even moving documents between DITA systems might require the same amount of code needed to get from PSML to some flavor of DITA. In the meantime, because PSML is built on the infrastructure of the web, less code is needed to get started and become productive. PSML has a number of ways to add and [Public](/reference/glossary/group_public.md)validate semantics to widely understood concepts of HTML. In particular, the use of linking extends HTML to support concepts from areas such the **semantic web**, the **XLink standard** and the classic hypertext concepts of **Tel Nelson** and **Douglas Englebart**.  It is the powerful linking that allows PageSeeder to aggregate simple structures into comprehensive, sophisticated [publications](/reference/glossary/publications.md). By combining the document-neutral structure of PSML with XSLT, document formats such as [PDF](/reference/glossary/pdf_documents.md), [DOCX](/reference/glossary/word_docx_format.md) or Lightweight DITA ([lwDITA](/get_started/tutorials/how_to_import_and_export_lwdita_in_pageseeder.md)) are supported with no additional code. ## Disambiguation | PS XML | Prior to version 5.4, PageSeeder used a format known as PS XML that used what was known as the “Standard Schema”. This format is now deprecated | | --- | --- | | PSML | The replacement for PS XML | | xformat | The XML representation of the PageSeeder internal object model | | Universal format  | A zip package containing PSML and file system. Available in three levels: [Universal Portable Format](/psml/universal_format/universal_portable_format.md) – optimized for moving documents to a different server while preserving content fidelity.[Universal Processed Format](/psml/universal_format/universal_processed_format.md) – optimized for final processing, rather than further editing.[Universal Metadata Format](/psml/universal_format/universal_metadata_format.md) – specifically for transporting the metadata for non-editable files such as images. | ## Migration The PSML format was introduced in version 5.2 of PageSeeder and could be created from PS XML using the [\ Ant Task](/guide/publishing/ant_api/tasks/task_export.md). With PageSeeder 5.6, PSML became the default, native document format. By PageSeeder 5.8, PSML was the only supported document format. The code to process PS XML is still available; anyone that needs help converting old documents can contact [Allette Systems](https://www.allette.com.au/). --- title: "Notification" source: https://dev.pageseeder.com/reference/glossary/notification.html description: "PageSeeder email notification system documentation covering when and how members receive alerts based on message settings (Silent, Minimal, Normal, Announce) and member preferences (Announcements only, Essential, Normal, Daily/Weekly digest)." last_updated: 2026-09-08T13:40:17+10:00 tokens: ~1494 --- # Notification When certain events occur on the [PageSeeder server](/reference/glossary/pageseeder_server.md), email notifications are sent to [members](/reference/glossary/member.md). Who is notified and when depends on the options of the event and the notification settings for the member in a particular group. For example, when a [comment](/reference/glossary/comment.md) is created with notify set to **Normal**, it is emailed to all group members that have a notification setting of normal. Any member with an account setting of **Daily digest** or **Weekly digest** receives all comments as a single email message sent daily or weekly, instead of when they are posted. Templates for notifications and messages are stored in the [notification folder](/reference/folders_and_files/default_template/notification.md). For details on how to customize the emails, s*ee* [organization customization](/guide/configuration/organization_customization.md) or [emails](/guide/configuration/emails.md). ## Message settings Following are the options available when a message is spawned through the creation of a comment, task, workflow, version, edit note, document or URL event. | Silent | Post the message but do not notify anyone | | --- | --- | | Minimal\* | Notify only discussion authors, assigned member, and approvers (see following for further details) | | Normal | Notify group members | | Announce | Override member settings and notify all group members | \* Discussion authors are ***not*** included for [workflow](/reference/glossary/workflow.md) notifications. ## Member settings Following are the options for a member to control how frequently they are contacted by each group: | Announcements only | Members only receive messages when the default settings are overridden | | --- | --- | | Essential | Relays messages for tasks assigned to the member or when a reply has been posted to a message from that member | | Normal | The member receives all default comments and tasks as posted | | Daily digest | The essential setting plus any new comments and tasks created since the previous digest. | | Weekly digest | The essential setting plus any new comments and tasks created since the previous digest | ## Notification settings The following table provides the notification outcomes based on the intersection of the options applied to a message and the setting of each member. (Yes = message is sent, No = message is not sent). **Comment / task / workflow / version / edit note / uri notification** | Member Settings | Message settings | | --- | --- | | | Silent | Minimal | Normal | Announce | | Announcement only | No | No | No | Yes | | Essential | No | Assignee/ Approvers/ Authors | Assignee /Approvers /Authors | Yes | | Normal | No | Assignee /Approvers /Authors | Yes | Yes | | Daily | No | Assignee /Approvers /Authors | Assignee /Approvers /Authors | Yes | | Weekly | No | Assignee /Approvers /Authors | Assignee /Approvers /Authors | Yes | - **Assignee** – notify the member that has been assigned on the task step. - **Approvers** – if task status on the message corresponds to what has been set for `statusBroadcastApprovers` in [group properties](/guide/configuration/properties/group_properties.md), every member with a role of Approver is notified. - **Authors** – unless the thread has become a workflow, notify all members that have added a comment to it. In the user interface, each class of message has the following the default notification setting: - **Silent** – is the setting for messages spawned by the creation of versions, edit notes, multiple workflows and URIs (documents/URLs), - **Minimal** – is for messages spawned by tasks and *assigned*, single workflows, - **Normal** – is for comments. > **Note:** By default, notifications are only ever sent to the members of the group that owns the message. ## Event messages Following is a list of PageSeeder events and details of their related messages. | | Listed under | Notification | Notify options (\*=default) | | --- | --- | --- | --- | | Event | Document activity# | Document history | Comments | Tasks | template | Silent | Normal | Announce | Minimal | | upload | Y | Y | | | new-uri | Y\* | Y | Y | | | document creation | Y | Y | | | new-uri | Y\* | Y | Y | | | url creation | | | | | new-uri | Y\* | Y | Y | | | document properties modification | | Y | | | | | | | | | structure | | Y | | | | | | | | | attachedto | Y | Y | | | | | | | | | comment | Y | Y | Y | | new-comment | Y | Y\* | Y | Y | | task | Y | Y | Y | Y | new-comment | Y | Y\* | Y | Y (\* when assigned) | | version | Y | Y | | | new-version | Y\* | Y | Y | | | workflow | Y | Y | | Y | new-comment | Y | Y | Y | Y\* | | edit | Y | Y | | | | | | | | | edit draft | | Y | | | | | | | | | edit note | Y | Y | | | new-comment | Y\* | Y | Y | | | xref | Y | Y | | | | | | | | | image reference | Y | Y | | | | | | | | | moderator to accept comment | | | | | accept-comment | | | | | | mail loop detected | | | | | auto-responder | | | | | | change email requested | | | | | change-email-confirm | | | | | | reset password requested | | | | | reset-password-confirm | | | | | | password changed | | | | | change-password | | | | | | daily notification | | | | | daily-digest | | | | | | moderator to accept membership | | | | | membership-accept | | | | | | member to confirm membership | | | | | membership-confirm | | | | | | completed membership | | | | | membership-complete | | | | | | membership and new member | | | | | membership-new-member | | | | | | new member | | | | | new-member | | | | | | out of office received | | | | | out-of-office-warning | | | | | | out of office sets on vacation | | | | | out-of-office-change | | | | | | unauthorized email received | | | | | reject-comment | | | | | --- title: "Cross-reference (xref) label" source: https://dev.pageseeder.com/reference/glossary/cross_reference_label.html description: "A cross-reference label is a tag attached to an xref that describes the relationship between documents. Labels follow a naming convention based on the forward direction, such as \"parent\" or \"child,\" to clarify directionality between source and target documents." last_updated: 2026-09-05T17:36:31+10:00 tokens: ~187 --- # Cross-reference (xref) label A [label](/reference/glossary/labels.md) attached to an [xref](/reference/glossary/cross_reference.md). When the xref is bidirectional, the same label is associated with both directions. To avoid confusion, the convention is to name the label in relation to the forward direction. For example, if a label is used to express a parent/child relationship between A and B, A being the parent and A linking to B, then name the label as ‘child’. If B linked to A, then name the label as ‘parent’. The **source** document refers to the document containing the original xref in its content. The **target** document refers to document being pointed at. ![Xref label example](/content/images/glossary/xref_label.svg) --- title: "Publish engine API" source: https://dev.pageseeder.com/reference/glossary/publish_engine_api.html description: "The Publish engine API provides integration capabilities with PageSeeder's publishing system, with references to the PageSeeder Ant API for additional implementation details." last_updated: 2026-08-11T16:32:44+10:00 tokens: ~24 --- # Publish engine API *see* [PageSeeder Ant API](/reference/glossary/pageseeder_ant_api.md). --- title: "Component document" source: https://dev.pageseeder.com/reference/glossary/component_document.html description: "A component document is any document type that serves as a modular part of a larger publication, unified through references in a dedicated references document rather than being a specific format itself." last_updated: 2026-09-14T13:54:40+10:00 tokens: ~69 --- # Component document Do not have to be a specific [document type](/reference/glossary/document_type.md),  "component" reflects the role of the documents that are bound together by a [references document](/reference/glossary/references_document.md) to create a publication. --- title: "Cross-reference (xref)" source: https://dev.pageseeder.com/reference/glossary/cross_reference.html description: "Cross-references (xrefs) are fundamental PageSeeder components used to assemble documents and fragments into publications or create associations between content. Unlike conventional links, they are rich, customizable structures represented by `` and `` elements that can represent semantics like footnotes and citations." last_updated: 2026-09-14T15:59:05+10:00 tokens: ~301 --- # Cross-reference (xref) Also known as an **xref**.  These are a fundamental components of the PageSeeder architecture and can be used in multiple ways, including the following: - Assembling components ([documents](/reference/glossary/document.md) or [fragments](/reference/glossary/fragment.md)) into a [publication](/reference/glossary/publications.md). - Creating associations between [document](/reference/glossary/document.md) content. Unlike links in conventional publishing applications or HTML, PageSeeder cross-references are rich structures that developers can customize or override. In PSML, cross-references are represented by the following elements: - `` - `` Using [labels](/reference/glossary/cross_reference_label.md) or the [xref config](/guide/configuration/psml/psml_xref_config.md) allows semantics to be attached to xrefs. This makes it possible to represent [objects](/reference/glossary/object_labels.md) such as footnotes, end notes, citations and many other structures. ## Terminology > **Note:** The source document refers to the document containing the original cross-reference in its content. The target document refers to document being pointed at. --- title: "Supergroup" source: https://dev.pageseeder.com/reference/glossary/supergroup.html description: "A supergroup is any group containing a subgroup as a member. Determining individual access requires processing the subgroup's membership, with no other special characteristics." last_updated: 2026-08-11T16:35:12+10:00 tokens: ~68 --- # Supergroup A *supergroup* is any group with a [subgroup](/reference/glossary/subgroup.md) as a member. There are no special characteristics of a supergroup, except that knowing which individuals can access the group requires processing the membership of the subgroup. --- title: "Paragraph style" source: https://dev.pageseeder.com/reference/glossary/paragraph_style.html description: "Paragraph style in PageSeeder refers to a collection of format settings grouped under a name for consistent application. PageSeeder uses block labels for paragraph styles and inline labels for character styles." last_updated: 2026-08-11T16:30:33+10:00 tokens: ~114 --- # Paragraph style A widely-understood concept that is part of most unstructured document editing and publishing apps. A style groups a collection of format settings under an arbitrary name so a user can apply the identical settings elsewhere. In PageSeeder, the equivalent concept to **paragraph style** is [block label](/reference/glossary/block_label.md). The equivalent of a **character style** is [inline label](/reference/glossary/inline_label.md). --- title: "Loading zone" source: https://dev.pageseeder.com/reference/glossary/loading_zone.html description: "A loading zone is a temporary file storage location in PageSeeder where members can organize, verify, and manage documents before uploading them into groups, allowing batch uploads and testing of import options." last_updated: 2026-09-14T13:54:28+10:00 tokens: ~258 --- # Loading zone The loading zone is a temporary location in the file system where files are stored before being uploaded into PageSeeder. Loading zones are automatically created whenever a [member](/reference/glossary/member.md) intends to upload content into a PageSeeder [group](/reference/glossary/group.md). ## Why a loading zone Having a temporary space to hold files to upload allows members to: - Upload a whole collection of [documents](/reference/glossary/document.md) at once. - Preserve and verify the integrity of the linking ([cross-references](/reference/glossary/cross_reference.md)) between files. - Remove and manage the list and organization of files to upload. - Set individual upload options for each file. - Test import function and tweak the options. For example, when importing a [Microsoft Word DOCX document](/reference/glossary/word_docx_format.md) into PageSeeder as a [PSML](/reference/glossary/psml.md) document, the loading zone allows members to select the best options for splitting the file. --- title: "Forms" source: https://dev.pageseeder.com/reference/glossary/forms.html description: "Guide to creating and editing electronic forms and fielded data in PageSeeder, with links to PSML document templates, properties editor, and configuration tutorials." last_updated: 2026-08-11T16:25:06+10:00 tokens: ~109 --- # Forms For information about the creation and editing of electronic forms or fielded data in PageSeeder, see the following documents: - [PSML document template](/guide/configuration/psml/psml_document_template.md) - [PSML properties editor](/guide/configuration/psml/psml_properties_editor.md) - Or the tutorial on [How to configure a custom properties editor](/get_started/tutorials/how_to_configure_a_custom_properties_editor.md). --- title: "Properties" source: https://dev.pageseeder.com/reference/glossary/properties.html description: "Properties in PageSeeder refers to configuration settings and metadata attachments. Server properties configure app aspects via files requiring direct server access, while PSML properties are metadata attached to documents, fragments, and files through PageSeeder Markup Language." last_updated: 2026-09-08T14:00:44+10:00 tokens: ~381 --- # Properties Another PageSeeder term with multiple contexts, like ‘[document](/reference/glossary/document.md)’ and ‘[metadata](/reference/glossary/metadata.md)’.  ## Server properties One context is for the properties files that configure various aspects of the app. The server properties files cannot be edited through the user interface – they require direct access to the server. Reference information is available in the [properties](/guide/configuration/properties.md) document. Administrators can see and reload the properties on the **server properties page** through the system administration.  - [Global properties](/guide/configuration/properties/global_properties.md) - [Database properties](/guide/configuration/properties/database_properties.md) - [Group properties](/guide/configuration/properties/group_properties.md) - [Project properties](/guide/configuration/properties/project_properties.md) - JDO properties - [MIME properties](/guide/configuration/properties/mime_properties.md) ## PSML properties Another class of properties are defined by the PageSeeder Markup Language (PSML). These are properties that can be attached to documents, fragments and binary files. For further information, see the following: - [Element \](/psml/elements/element_property.md) - [document metadata](/reference/glossary/document_metadata.md) - [PSML document template](/guide/configuration/psml/psml_document_template.md) - [PSML properties editor](/guide/configuration/psml/psml_properties_editor.md) --- title: "Member – add/remove" source: https://dev.pageseeder.com/reference/glossary/member_add_remove.html description: "This document explains how managers view and manage group members, including previous members who left or were removed, and pending members awaiting account activation or registration completion." last_updated: 2026-08-11T16:33:44+10:00 tokens: ~194 --- # Member – add/remove Previous or pending [members](/reference/glossary/member.md) of a [group](/reference/glossary/group.md) are visible when a user with a [role](/reference/glossary/role.md) of [manager](/reference/glossary/manager.md) or higher views the member list. Users are classed as previous members if they have been removed from a group by a manager or if they have chosen to leave the group themselves. Even if a user is permanently removed from a group, their email is still recognized by the server until they have been deleted. This can only be done by an [administrator](/reference/glossary/administrator.md). Pending members are users who have received an invitation to join a group but are yet to activate their account or complete their registration. --- title: "Document info" source: https://dev.pageseeder.com/reference/glossary/documentinfo.html description: "Documentinfo is a PSML metadata container that stores document properties including title, labels, ID, URI, description, creation and modification dates, filename, folder, media type, document type, status, version, and sharing settings." last_updated: 2026-09-05T17:34:04+10:00 tokens: ~380 --- # Document info [documentinfo](/psml/elements/element_documentinfo.md) is one of the [metadata](/reference/glossary/metadata.md) containers for a [PSML](/reference/glossary/psml.md) document (the other is [fragmentinfo](/psml/elements/element_fragmentinfo.md)). See the [metadata element](/psml/elements.md) reference for further detail. - [Document title](/reference/glossary/document_title.md) - [Document labels](/reference/glossary/object_labels.md) - [Document ID (or DocID)](/reference/glossary/document_id_docid.md) - [URI ID](/reference/glossary/uri_id.md) - Description – Allows for a description to be added to the document. - Created – The date and time the document was created. - Last modified – The date and time the document was last modified. - [Filename](/reference/glossary/filename.md) - [Folder](/reference/glossary/folder.md) - Permalink – A hyperlink to the folder containing the document. - Media type – Indicates whether this document is a PSML document, a PageSeeder comment or task, PNG, GIF or JPG image file, PDF or Word document etc. - [Document type](/reference/glossary/document_type.md) - [Document status](/reference/glossary/document_status.md) - [Version](/reference/glossary/version.md) - Document editing – Indicates whether or not document editing is allowed. - Document sharing – Indicates whether or not the document  is shared with other groups. - [referenced by](/reference/glossary/reverse_xref.md) ![Document info panel](/content/images/glossary/document_info_v60000.webp) --- title: "Project" source: https://dev.pageseeder.com/reference/glossary/project.html description: "A PageSeeder project serves as a container for groups and customizations like publishing scripts and templates, while providing organizational structure for members and subprojects. Projects must follow strict naming conventions using only lowercase letters, numbers, underscores, and tildes." last_updated: 2026-09-14T13:54:29+10:00 tokens: ~604 --- # Project Fundamentally, a PageSeeder project provides the following two functions: - Acts as a container for one or more [groups](/reference/glossary/group.md) and any customizations, such as [publishing scripts](/reference/glossary/publish_script.md), user interface modifications or editing templates. All groups in a project have the same functionality, including the following artifacts:  - `document template` - `document config` - `publication config` - `import config file` - `export config file` - labels – `document`, `block`, `inline` In this capacity, the project acts as a [template](/reference/glossary/project_template.md) for each group. - Provides an organizing mechanism for arranging groups and [members](/reference/glossary/member.md). Projects can have one or more [subprojects](/reference/glossary/sub_project.md). Project templates can be exported as a single package for use on a different server or a new project on the same server. > **Note:** A subgroup is not the same thing to a ‘group’ as a subproject is to a ‘project’.  ## Project titles The **title** is a user-friendly name to display in the user interface. This is useful if the **project name** contains abbreviations, acronyms or underscores. The title can include punctuation and spaces to describe the project. It’s not recommended to use hyphens in project titles. - Limit to 100 characters. ## Project names The “URL” is the fundamental building block of PageSeeder. To avoid inconsistent, ambiguous or non-compliant URLs, projects must be named according to the following conventions: - A project name can only contain **lowercase letters**, **numbers**, **underscore** `_` or **tilde** `~`. > **Tip:** Because the **full name** of a [group](/reference/glossary/group.md) includes the name of its parent project and is used in URLs and email addresses, it’s a good idea to keep project names short. The full name of a group cannot exceed 60 characters. #### Project name restrictions - Top level project names must start with a lowercase letter. - Top level project names cannot be named the following: `admin`, `default`, `member`, `public.` > **Note:** [Subprojects](/guide/document_modeling/pageseeder_objects.md) have the same restrictions as [groups](/reference/glossary/group.md). For more information, *see* [Names for projects and groups](/reference/glossary/names_project_group.md). --- title: "Read only – section or document" source: https://dev.pageseeder.com/reference/glossary/read_only.html description: "Describes how to prevent documents or sections from being edited in PageSeeder, useful for externally-maintained content integrated for publishing." last_updated: 2026-09-05T17:35:41+10:00 tokens: ~164 --- # Read only – section or document Prevents a [document](/reference/glossary/document.md) or [section](/reference/glossary/section.md) from being edited through the standard PageSeeder user interface. This is especially useful for content that is being maintained externally but integrated with PageSeeder content for publishing. An example of this class of content are comments that are maintained in source code. For a document, set the `@edit` attribute on the [\ element](/psml/elements/element_document.md) to `false`. For a section, set the `@edit` attribute on [\ element](/psml/elements/element_section.md) to false `false`. --- title: "Client ID" source: https://dev.pageseeder.com/reference/glossary/client_id.html description: "A unique 64-bit identifier for OAuth clients in PageSeeder, displayed as a 16-character hexadecimal number. It's mutable, publicly visible, and used in OAuth flows and API calls to uniquely identify applications." last_updated: 2026-09-08T13:36:39+10:00 tokens: ~347 --- # Client ID A unique identifier for an [OAuth client](/reference/glossary/oauth_client.md). The Client ID is 64-bit random value assigned by PageSeeder when the client is registered. > **Note:** It is also possible to set the Client ID. It might be necessary if an external app has already been configured with a specific Client ID such as when creating preconfigured environment or when migrating system. The Client ID is a 16-character long hexadecimal number. To make it easier to read, it is generally formatted using uppercase letters and with a space every four characters. For example: **3A5F ****4B16 ****873F ****7FA2** ### Client ID and internal ID OAuth clients have two IDs assigned by PageSeeder when they are created: - The *internal client ID* – is an immutable integer that PageSeeder assigns to all objects (members, groups, etc.) - The *Client ID* – is a public mutable identifier defined by OAuth to uniquely identify apps in the context of OAuth. Use the *internal ID* or the *Client ID (prefixed by ~)* when making the PageSeeder API with `{client}` URL parameter, for example `/ps/api/oauth/members/45/clients/123.json`. or `/ps/api/oauth/members/45/clients/~3a5f4b16873f7fa2.json`. Use the *Client ID* in OAuth flows with the query parameter `client_id`, for example `client_id=3a5f4b16873f7fa2` (use the lower case format with no space in that case). --- title: "Document status" source: https://dev.pageseeder.com/reference/glossary/document_status.html description: "Document status in PageSeeder assigns group members to documents, tasks, and dates to formalize lifecycle stages like creation, review, and release, eliminating spreadsheet-based management overhead." last_updated: 2026-09-08T11:42:53+10:00 tokens: ~1342 --- # Document status Assigning a [status](/reference/glossary/status.md) is a way of associating a group member with a document, a task and a date. The primary objective of the document status is to formalize lifecycle stages such as creation, review and release. Using the collaboration and reporting tools of PageSeeder, the document status can eliminate much of the overheads and inaccuracies associated with managing document lifecycles using spreadsheets and email. ## Configuration The document status is configured as part of the group or project configuration. It depends on the editorial process for documents. See below for an explanation on PageSeeder’s default configuration. ### Status and roles The status that a member can set on a document workflow is based on their role within a group. For more information, see the [status](/reference/glossary/status.md) document.  ### Status order The document status has a natural lifecycle order. The list of workflow status values must be entered in the same order and reflect the order in which the document status is naturally changed. For example, if the document status is to start with ‘Initiated’, then naturally progress to ‘In Progress’ before being set to ‘Complete’, the status should be entered in the following order: 1. Initiated 2. In Progress 3. Complete ## PageSeeder defaults The default document statuses in PageSeeder are based on Workflow Reference Model but have been adapted to document management and PageSeeder’s capabilities. Document workflows are configured by default to follow a basic editorial process where the status is also used to communicate who is working on a document and whether it is ready for publishing. ### Default status and roles | | Initiated | In Progress | Complete | Approved | Suspended | Terminated | | --- | --- | --- | --- | --- | --- | --- | | Approver | Y | Y | Y | Y | Y | Y | | Manager | Y | Y | Y | | Y | Y | | Contributor | | Y | Y | | | | | Reviewer | | Y | Y | | | | #### State diagram ![default\_workflow\_statuses.svg](/content/images/glossary/default_workflow_statuses.svg) ### Status description Natural lifecycle: **Initiated** → **In Progress** → **Complete** → **Approved** → **Suspended** → **Terminated** > **Tip:** The workflow status can only be changed by adding a new step. #### status-open Initiated (active) The workflow for the document has been created, but no activities have been started on the document. This status is considered *active*. This state is usually the *initial* state when the editorial process requires managers and approvers to allocate work for the document. - Only a *manager* can initiate a workflow. - The equivalent [task status](/reference/glossary/task_status.md) is ‘Open’. #### status-open In Progress (active) Activities on this document are in progress. This usually means that the document content is still being actively worked on. Additional labels can be used to describe the nature of the activities being performed.  This status is considered *active*. This might be the initial state in simple editorial workflows. - Only a *contributor* or higher can indicate that they have started work on the document with this status. - The equivalent task status is ‘Open’. #### status-resolved Complete (active) Work on the document is complete and waiting for approval before publication. Any internal post-completion operations, such as the final editorial review before approval, should be conducted. When a document is marked as complete, an email notification is sent to *approvers*. This status is considered *active*. This might be the final state in simple editorial workflows. -  Only a *contributor* or higher can indicate that they have completed work on the document with this status. - The equivalent task status is ‘Resolved’. #### status-approved Approved An *approver* has checked that the document no longer has any outstanding activities. This can be used to mark the document as ready for publishing. This is a **final** state in the document workflow. - *Approvers* can indicate that work is completed on the document with this status. - The equivalent task status is ‘Closed’ #### status-closed Suspended The workflow is quiescent and no activities are started until the process has returned to the ‘In progress’ state. This state might be used in large editorial teams when a document cannot be considered complete and nobody actively works on this document. #### status-closed Terminated Work on the document has been stopped before its normal completion. This is a **final** state in the document workflow. The equivalent task status is ‘Closed’. > **Tip:** #### Locked state Managers can configure which workflow status can mark a document as ‘locked’, making it uneditable until the status is changed (**workflow statuses only**). ### Notification Email notification is controlled by setting the Notify option to ‘silent’, ‘normal’ or ‘announce’. This defaults to ‘silent’ for workflows. However, the following [global property](/guide/configuration/properties/global_properties.md) also determines if an email notification is sent when creating workflows in bulk: - `maxWorkflowNotifications` – The maximum number of notifications when adding bulk workflows by upload, folder or search (if more than this, then none are sent). --- title: "Date and time" source: https://dev.pageseeder.com/reference/glossary/date_and_time.html description: "This document explains how PageSeeder handles date and time, including ISO 8601 formatting standards, timezone conversions for end users, and potential synchronization issues in distributed systems." last_updated: 2026-08-11T16:30:20+10:00 tokens: ~921 --- # Date and time Correctly understanding where the date and time are sourced and applied is important for getting the most out of PageSeeder. The orderly processing of edits or [comments](/reference/glossary/comment.md) is critical to efficient collaboration, but it isn’t always straightforward with globally distributed group members. The purpose of this article is to help developers find more specific information about how PageSeeder processes date and time and provide some direction where the date and time are outside the control of the system. ## ISO format Date and time in the system are represented using ISO 8601 *extended* format. More specifically, PageSeeder only uses the following representations: | | Format | Example | Precision | | --- | --- | --- | --- | | Date | `YYYY-MM-DD` | 2016-04-21 | Day | | Time | `hh:mm:ss` | 09:21:38 | Second | | Datetime | `YYYY-MM-DDThh:mm:ss` | 2016-04-21T09:21:38 | Second | ### Precision Most time and datetime values are returned with second precision.  If they have millisecond precision in the system, as is the case for documents modification times, the value is truncated when returned in the API. > **Note:** Some time and datetime fields can only be set to the minute through the user interface. PageSeeder doesn’t keep track of the original precision and still includes the seconds component. ### Timezone Dates and times are often followed by a timezone designator in the form `±hh:mm`. When the timezone is included, PageSeeder includes both the hour and minute components representing the offset from UTC in the local time of the server. For example, if the PageSeeder is located in Sydney, the example datetime would be represented as `2016-04-21T09:21:38+10:00`. ### Exceptions Possible exceptions are: - Dates created by external applications such as email clients or third party developers. - Dates in PageSeeder content or information inherited from the host operating system. ## End users ### Format Since ISO 8601 is primarily an interchange format, dates and times aren’t particularly user friendly. Therefore, PageSeeder formats dates and times for end users in a more readable format. For example: `2016-04-21T09:21:38` is displayed as “21 April 2016 at 9:21:38 AM”. > **Note:** The accuracy displayed to end users might differ from the accuracy in the system. Generally, the accuracy decreases for events in the distant past or future. ### Local time in user interface To display dates and times which are meaningful to end users, the timezone is adjusted based on the offset from UTC of a user’s local timezone as advertised by the browser.  In other words, a user located in New York sees dates and times in PageSeeder in the Eastern Daylight Time (EDT), so the previous example date (in the `+10:00` timezone) would then be `2016-04-20T19:21:38-04:00` or “20 April 2016 at 7:21:38 PM”. The local offset in minutes is stored in the `ps.timezone` cookie. ### Server time in emails Since PageSeeder doesn’t keep track of users’ location, dates and times in emails are always displayed in the server time. > **Tip:** Set the server to the timezone of where most end users are located. ## Potential issues When the server date and time are not properly coordinated with external applications, developers might see issues relating to when: - Comments or tasks are created or updated. - Document edits have been made or versioned. - Incidents have been logged. Because problems like these are a potential source of support issues, it is recommended that some effort be made to create a policy before development starts and have the server time automatically updated correctly. --- title: "Help document type" source: https://dev.pageseeder.com/reference/glossary/help_document_type.html description: "The help document type is a built-in PageSeeder feature for creating searchable help articles that appear in the help panel. Articles can be associated to pages or document types and exist at three levels: PageSeeder default, custom global, or project-specific." last_updated: 2026-08-11T16:26:37+10:00 tokens: ~170 --- # Help document type The help [document type](/reference/glossary/document_type.md) is a built-in document type to create help articles. Help articles appear in the **help panel**. They can be associated to one or more pages or document types. PageSeeder automatically indexes the help articles so that they can be searched from the header bar or the search option of the help panel. There are three levels of help documentation: - **PageSeeder** – default available anywhere. - **Custom global help** – available anywhere when created in the [global template](/reference/glossary/global_template.md) project. - **Custom project-specific help** – when created in a project. --- title: "Discussion" source: https://dev.pageseeder.com/reference/glossary/discussion.html description: "A thread of related comments used for discussions. See comment for more details." last_updated: 2026-09-08T14:03:44+10:00 tokens: ~31 --- # Discussion A **thread** consisting of one or more related comments. *See* [comment](/reference/glossary/comment.md). --- title: "Document template" source: https://dev.pageseeder.com/reference/glossary/document_template.html description: "A pre-configured structure and semantics defined as part of a document type, providing a standardized framework for creating consistent documents within PageSeeder." last_updated: 2026-08-11T16:34:04+10:00 tokens: ~71 --- # Document template A pre-configured structure and semantics defined as part of a [document type](/guide/configuration/psml.md). *See* [PSML document template](/guide/configuration/psml/psml_document_template.md) and [document metadata](/reference/glossary/document_metadata.md). --- title: "AsciiMath" source: https://dev.pageseeder.com/reference/glossary/asciimath.html description: "AsciiMath is an open-source project for creating MathML equations using simple plain text syntax in web browsers. PageSeeder supports it via media fragments and inline labels for rendering mathematical expressions." last_updated: 2026-09-05T17:34:47+10:00 tokens: ~778 --- # AsciiMath A free, open-source [project](https://asciimath.org/) that supports the creation of MathML equations using a simple, plain text syntax and a standard web browser. It isn’t as comprehensive as [MathML](/reference/glossary/mathml.md) or [TeX](/_external/ps/doc/help/help/2_terms_and_explanations/term/tex.md), but it’s useful for data entry because symbols attempt to mimic in text what they look like rendered, like `oo` for ∞. It often results in more concise expressions. AsciiMath can be used in [media fragments](/psml/elements/element_media-fragment.md) with the media type `text/asciimath` and [inline labels](/psml/elements/element_inline.md) `asciimath`. *See also* [MathML](/reference/glossary/mathml.md). ## AsciiMath media fragment To use a media fragment for ascii math, ensure that the media type is `text/asciimath`. ```xml sum_(i=1)^n i^3=((n(n+1))/2)^2 ``` PageSeeder can render your equation natively and displays the following in the browser:  ![AsciiMath rendering example](/content/images/glossary/asciimath_example1.webp) If you need users to enter ascii math equations in media fragments, your [document template](/guide/configuration/psml/psml_document_template.md) must either have the media fragments predefined in the structure, or you need to define a [fragment template](/reference/glossary/fragment_template.md) like this in your `document-template.psml`: ```xml Add an AsciiMath fragment ```   ## AsciiMath inline label PageSeeder also supports the use of specific asciimath inline labels to render asciimath expressions in your text content. Using an inline label is convenient for shorter expressions that users want to display inline with their content, but they cannot be reused or transcluded. This is supported natively – managers only need to ensure that the `asciimath` label is defined in the [project labels](/reference/folders_and_files/project_template/label.md) so that it is available to end-users. For example: ```xml This formula f(x) = x^2 is an example. ``` Can be edited in PageSeeder as: ![AsciiMath inline label – Edit](/content/images/glossary/asciimath_inline_label_edit_v60000.webp) And renders as: ![AsciiMath inline label – View](/content/images/glossary/asciimath_inline_label_view_v60000.webp) > **Warning:** If you publish your content outside of PageSeeder, ensure that your publish output can render your asciimath content.  For example the PDF and DOCX export can render AsciiMath containing the letters “id” or “class” differently to the user interface. To avoid this always use “i d” or “cla ss” instead. So instead of the AsciiMath `(t_id_i"3")/(12)` use: `(t_i d_i"3")/(12)`. --- title: "Account lockout" source: https://dev.pageseeder.com/reference/glossary/account_lockout.html description: "This document explains PageSeeder's automatic account lockout security feature, which locks accounts after multiple failed sign-in attempts. It covers configuration options, user warnings, and how administrators can unlock accounts." last_updated: 2026-09-14T13:42:42+10:00 tokens: ~488 --- # Account lockout A user account is locked automatically by PageSeeder after multiple consecutive failed sign-in attempts. While their account is locked, users cannot sign in. They must wait for the account lockout time to expire or contact an administrator to unlock their account. ## Configuration For security reasons, PageSeeder doesn’t disclose how many attempts cause the lockout, nor how long the account is locked for. However, you can configure the account lockout behavior using the following [global properties](/guide/configuration/properties/global_properties.md): | Property | Effect | | --- | --- | | `minAccount​Lockout` | The minimum number of minutes an account can be locked for | | `maxAccount​Lockout` | The maximum number of minutes an account can be locked for | | `minBadLogins` | The minimum number of incorrect sign-in attempts before an account is locked | | `maxBadLogins` | The maximum number of incorrect sign-in attempts before an account is locked | ## User experience The sign-in always warns the user after a couple of failed sign-in attempts, irrespective of the configuration. It recommends that users use the [reset password](/guide/configuration/emails/flows/personal_details.md) flow to avoid having their account locked. ![Sign-in page – Account lockout warning](/content/images/glossary/sign-in_page_account_lockout_warning_v63003.webp) When the account is locked, there is a warning that the account is locked. ![Sign-in page – Locked account](/content/images/glossary/sign-in_page_account_locked_v63003.webp) ## Unlocking an account Administrators can unlock an account by going to the user **account profile page** in the system administration and clicking the **Unlock** button. ![Account profile page – Locked account](/content/images/glossary/account_profile_locked_account_v60000.webp) Or using the API with the [/members/\{member\}/unlock](/api/services/unlock-member_post.md) service. --- title: "Template folder" source: https://dev.pageseeder.com/reference/glossary/template_folder.html description: "The template folder, located at `/WEB-INF/config/template/[project]`, is a container for PageSeeder's customizable code organized by project, allowing each project to maintain its own customization files separately." last_updated: 2026-08-11T16:37:44+10:00 tokens: ~164 --- # Template folder The `template` folder is a container for most of PageSeeder’s customizable code. The template folder is located in the private part of the Web app inside the `/WEB-INF` and is subdivided by project so that each project customization is saved under the following folders: ```text /WEB-INF/config/template/[project] ``` For example, the template folder would contain the following folders, if the ‘acme’ project were customized: ```text /WEB-INF /config /template /acme ... ``` For more information about this folder, see the [API documentation for the template folder](/reference/folders_and_files/template.md). --- title: "Document event" source: https://dev.pageseeder.com/reference/glossary/document_event.html description: "A document event is an action that occurs on a PageSeeder document, fragment, or URL. Examples include comments, edits, uploads, and workflow changes. Events are recorded in the document history and represented with event elements." last_updated: 2026-09-08T11:50:22+10:00 tokens: ~688 --- # Document event An event that occurred on a [document](/reference/glossary/document.md), a document [fragment](/reference/glossary/fragment.md) or a [URL](/reference/glossary/url.md). The document events are listed in the [document history](/reference/glossary/document_history.md) and represented with the [\ element](/api/elements/element_event.md). Some document events relate to fragment also. ## Event types The following is a list of all document events. | Type | Fragment | Description | | --- | --- | --- | | `comment` | Yes | When a comment is posted on a document or fragment | | `creation` | No | When a PSML document is created | | `draft` | Yes | When a draft is created on a fragment | | `edit` | Yes | When a fragment edit is saved | | `image` | Yes | An image has been inserted in an edit | | `modification` | No | When the document information (title, description, labels) has been modified | | `move` | No | When the document is moved to a new location | | `note` | Yes | When an [edit note](/reference/glossary/edit_note.md) is attached to a fragment edit | | `structure` | No | When the structure of the document is modified, this can occur when fragments are moved or sections are created, deleted or moved within the document. Structural changes affecting sections can only occur during a document upload. | | `revert`  | No | When a document is reverted to previous content | | `task` | Yes | When a task is created or updated on the document | | `upload` | No | When a document is updated using an upload or is received as an email attachment | | `version` | No | When a new [version](/reference/glossary/version.md) is created | | `workflow` | No | When the document [workflow](/reference/glossary/workflow.md) is updated, for example, if the status of the document changes or if the document is assigned. | | `xref` | Yes | When an xref pointing to another document or a link to a URL is created | ## Notes - If defined, the `creation` event is always the first event in the document history and there can only be one. - The `draft` event is removed when the author of the draft saves it as an edit. The `edit` event doesn’t replace the `draft` event – it is inserted in the history at the time of the `edit` with a different ID. - When a discussion is turned into a task, the events prior to the change are shown as `comment`, but subsequent events as `task`. - There is no event when an xref, link or image is removed, and the event when the xref, link or image is created remains. - The `version` event is removed if the version is deleted. - The `revert` event only applies when the whole document is reverted to previous content. When individual fragment edits are reverted, the `edit` event is used. --- title: "Editing – batch" source: https://dev.pageseeder.com/reference/glossary/editing_batch.html description: "PageSeeder's batch editing infrastructure enables bulk document updates by allowing users to export PSML documents, process them with various tools, and re-upload them. This supports workflows like external data integration and maintains edit history for tracking changes." last_updated: 2026-08-11T16:31:24+10:00 tokens: ~210 --- # Editing – batch PageSeeder provides the infrastructure necessary to support batch or bulk editing. Effectively, this process can be thought of as re-uploading [PSML](/reference/glossary/psml.md) files. Therefore, batch editing can support use cases such as: - Exporting a collection of PageSeeder [documents](/reference/glossary/document.md), process them with any appropriate technology (programming tools, text editor etc.) and upload the changed files back to the [group](/reference/glossary/group.md) they originated from. - Data exported from an external system (for example, an enterprise database) can be processed into PSML and then uploaded. When an update of the external data is available, if the data is properly processed, the updates can appear as edits in the [document history](/reference/glossary/document_history.md). --- title: "Weborganic folder" source: https://dev.pageseeder.com/reference/glossary/weborganic_folder.html description: "The weborganic folder stores PageSeeder's application-level web assets including styles, scripts, and images. It's considered private to PageSeeder and developers should not modify its files." last_updated: 2026-08-11T16:37:44+10:00 tokens: ~109 --- # Weborganic folder The `weborganic` folder is where PageSeeder stores the application-level styles, scripts and images to be served over the web. Where a project has been customized, the equivalent material is stored in style folders under the [template folder](/reference/glossary/template_folder.md). > **Warning:** This folder is regarded as private to PageSeeder. Developers are advised not to modify any files in this folder. --- title: "Default template" source: https://dev.pageseeder.com/reference/glossary/default_template.html description: "The default template is a set of configuration files used by default for all PageSeeder projects. It can be overridden by global or project-specific templates for customization." last_updated: 2026-08-11T16:31:10+10:00 tokens: ~185 --- # Default template The *default template* is a set of configuration files that are used by default for all projects. To customize PageSeeder, you can provide your own configuration in the [global template](/reference/glossary/global_template.md), which also applies to all the [groups](/reference/glossary/group.md) but overrides the default template.  To customize a single project and the groups under it, use a [project template](/reference/glossary/project_template.md). For more information, *see* [how templates are applied](/reference/glossary/project_template.md). [Administrators](/reference/glossary/administrator.md) can see the contents of the default template on the **default files page** in the system administration. --- title: "Berlioz" source: https://dev.pageseeder.com/reference/glossary/berlioz.html description: "Berlioz is an open-source Java library by PageSeeder that uses URI templates and XSLT to serve XML as HTML, with native support for PSML, Lucene search, frontend frameworks, and seamless PageSeeder integration." last_updated: 2026-09-14T15:57:57+10:00 tokens: ~316 --- # Berlioz Berlioz is an open source [Java](/reference/glossary/java.md) library, written by the PageSeeder team to provide a simple developer framework that uses [URI template](/reference/glossary/uri_pattern.md) notation to allocate services and XSLT for serving XML to the web as HTML. Although Berlioz can be used to serve any type of XML, it comes with native support for processing [PageSeeder Markup Language (PSML)](/reference/glossary/psml.md) and includes the following infrastructure: - Support for frontend development using frameworks such as Foundation, Bootstrap or other. - Lucene support for full-text indexing and search, faceted browsing or as a NoSQL repository. - Simple connection to PageSeeder for secure access or personalization. - XSLT support for dynamic delivery of data. - Administration, caching and analytic tools. - Standalone solution, but with straightforward binding to PageSeeder for editing and workflow. The Berlioz design objectives are: - High performance delivery of XML as HTML. - Leverage XSLT as a proven, well-supported, transformation technology. - Simplicity over comprehensiveness. The Berlioz project is hosted on Github code at: [https://github.com/pageseeder/berlioz](https://github.com/pageseeder/berlioz) --- title: "Public API support" source: https://dev.pageseeder.com/reference/glossary/public_api_support.html description: "This document defines five support levels for PageSeeder's public API web services: unsupported, experimental, supported, deprecated, and obsolete, indicating their reliability and recommended usage status." last_updated: 2026-08-11T16:32:49+10:00 tokens: ~227 --- # Public API support Indicates the level of support of an [API Web service](/api/services.md) that is part of the public API for a particular usage. PageSeeder has different levels of support if it is invoked in a [publish script](/reference/glossary/publish_script.md) using Ant. | UNSUPPORTED | The use of this service is not supported. The service was probably designed for a different purpose; using the service is likely to return an error. | | --- | --- | | EXPERIMENTAL | Support for this service has not been established or is experimental. | | SUPPORTED | PageSeeder supports the use of this service as part of its public API. | | DEPRECATED | Indicates a service that used to be supported, but is no longer supported in the upcoming release. | | OBSOLETE | Support for the annotated service has ceased and its use is no longer recommended. Using the service is likely to result in an error. | --- title: "Object model" source: https://dev.pageseeder.com/reference/glossary/object_model.html description: "PageSeeder's object model enables efficient XML document management by translating complex XML data into editable HTML/JavaScript interfaces, then back to XML, leveraging common UI frameworks to simplify development and enhance user experience." last_updated: 2026-08-11T16:38:06+10:00 tokens: ~442 --- # Object model One of PageSeeder’s main design strengths is how quick and straightforward it can be to import, edit and publish complex XML documents. The reason for this is PageSeeder’s object model (*see* [document](/reference/glossary/document.md)) and how it is used to represent XML data in an easily editable, generic form. ## User interfaces vs User data structures The conventional approach to XML editing software has focused on putting a user-friendly interface on the XML standard. However, given the limited adoption of XML tools, there is little support for this approach. As an alternative to exposing XML to end users, PageSeeder uses the same approach as non-document web applications such as online banking or travel booking sites. That is, while data is stored in a rich data structure, when it’s served to the browser for editing, it is translated into [HTML](/reference/glossary/html.md) and *Javascript*. Upon submission, the data from the editing session is translated back to XML for management. Because PageSeeder editors are expressed in HTML and *Javascript* instead of native XML, they can draw on commonly available UI frameworks such as jQuery. This dramatically improves developer productivity at the same time as providing a broad spectrum of options for users. Using the editing capability of HTML in front of PageSeeder’s rich object model allows developers to implement complex XML publications with a minimal amount of code. Breaking large XML structures down to a collection of editable [sections](/reference/glossary/section.md) connected by PageSeeder’s advanced [XLink](/reference/glossary/xlink.md) architecture can substantially reduce the complexity of XML data. In turn, this simplifies the requirements of the editor. --- title: "Object labels" source: https://dev.pageseeder.com/reference/glossary/object_labels.html description: "Labels are flexible metadata attached to PageSeeder objects like documents, fragments, comments, and tasks. Unlike folder hierarchies, multiple labels can categorize a single object for versatile organization and tagging purposes." last_updated: 2026-09-05T15:41:44+10:00 tokens: ~204 --- # Object labels With no predetermined semantics, a [label](/reference/glossary/labels.md) can be used for any purpose. The most fundamental difference for PageSeeder is whether the label is attached to an object, or part of the content. Native objects that support labels include [document](/reference/glossary/document.md), [fragment](/reference/glossary/fragment.md), [comment](/reference/glossary/comment.md), [task](/reference/glossary/task.md), [workflow](/reference/glossary/workflow.md), [version](/reference/glossary/version.md) or [xref](/reference/glossary/cross_reference.md). An example application for labels is categorizing documents. While a document can only ever exist in a single folder at a time, it can have multiple labels. *See also* [content labels](/reference/glossary/content_labels.md). --- title: "Group" source: https://dev.pageseeder.com/reference/glossary/group.html description: "A group is a PageSeeder concept that restricts access to documents and comments to designated members with different permission levels. Groups belong to projects and inherit their characteristics like labels and templates." last_updated: 2026-09-14T13:54:39+10:00 tokens: ~832 --- # Group A key PageSeeder concept, the group restricts access to content, such as [documents](/reference/glossary/document.md) and [comments](/reference/glossary/comment.md) to a list of [members](/reference/glossary/member.md). Within the group, members can have different levels of [permission](/reference/glossary/role.md) (functionality), but all members see the same content. In other words, there are no additional privacy settings inside a group, except that guest members cannot see the list of members for the group. Groups belong to a [project](/reference/glossary/project.md) and inherit many characteristics such as [labels](/reference/glossary/labels.md), [document templates](/reference/glossary/document_template.md) and [publish scripts](/reference/glossary/publish_script.md) from the project. ## Technical details For information about naming or accessing groups, plus other setup or usage options, *see* [group configuration](/reference/glossary/group_config.md). ![PageSeeder Group Structure](/content/images/glossary/pageseeder_group_structure.webp) ## Group title The **title** is a user-friendly name to display in the user interface. This is useful if the group name contains abbreviations, acronyms or underscores. The title can include punctuation and spaces to describe the group. It’s not recommended to use hyphens in group titles. - Restrict the length to 100 characters.  The **title** is a user-friendly name to display in the user interface. This is useful if the group name contains abbreviations, acronyms or underscores. The title can include punctuation and spaces to describe the group. It’s not recommended to use hyphens in group titles. > **Note:** *The title is optional and if left empty, the group name is then displayed.* ## Group name - A group name can only contain lowercase letters, numbers, underscore (`_`) or tilde (`~`). ### Group name restrictions The “URL” is the fundamental building block of PageSeeder. To avoid inconsistent, ambiguous or non-compliant URLs, projects must be named according to the following conventions: - A group name can only contain **lowercase letters**, **numbers**, **underscore** (`_`) or **tilde** (`~`). - The **name** of the group must be a unique [filename](/reference/glossary/filename.md) within the project. - Restrict the length of the project + group name to 60 characters (see following tip). - It cannot be a reserved word. Also, by default, the \[project-group\] string is part of the group email address which means these additional constraints apply: - Names cannot contain any character prohibited in an email address. - No project + group name can end with ‘`-silent`’ or contain a double hyphen ‘`--`’ because these two strings are reserved for PageSeeder email switches. > **Tip:** The name you use is the **short name** of the group. When creating groups, we ask for the short name because it’s created within the project. The **full name** of the group includes the name of its parent project, `[project]-[group]`, and is used in URLs and email addresses. The full name of the group cannot exceed 60 characters. ## Group description A short description is required and is often displayed as a subtitle of the group in different parts of the user interface and in emails. Characters are limited to 250. --- title: "Single Sign-On (SSO)" source: https://dev.pageseeder.com/reference/glossary/single_sign-on.html description: "Single Sign-On allows users to authenticate with PageSeeder using credentials from an external identity provider supporting OpenID. Two authentication flows are available: code flow for client apps and token flow for browser-based apps." last_updated: 2026-09-08T12:22:54+10:00 tokens: ~1157 --- # Single Sign-On (SSO) Single sign-on lets users sign in with a single ID to an external identity provider to authenticate with PageSeeder. The credentials are maintained by the external identity provider. Since PageSeeder v6, you can register an external identity provider which supports Open ID and use the [ID token](/reference/glossary/id_token.md) to sign in to PageSeeder. There are two authentication flows for SSO – in both cases: 1. The user must authenticate with the external ID provider first to get an ID token used to authenticate the user on PageSeeder. 2. PageSeeder creates a session and returns a session cookie to the browser. Use the authentication flow that matches the requirements of your app. ## SSO and OAuth The purpose of Single Sign-On is to create a session on PageSeeder using credentials maintained by an external identity provider without having to sign in again. If the user is already signed-in with the external identity provider, that process is transparent to the user who can directly use PageSeeder. If the user only interacts with an app, there is generally no need for a PageSeeder session. OAuth is better suited in that case and the app should use access tokens to make a request to the PageSeeder API. In all cases, apps must be registered as clients on PageSeeder. For CORS headers to be sent, the client URI must also match the Website.  ## Code authentication flow This flow is used when the ID token is received or held by the client app. In that case, the app must first exchange the ID token for an authentication code. The authentication code can then be used by the browser to get the Session cookie. > **Note:** Make sure your app is registered as a client and the Website is set as the client URI – PageSeeder only issues authentication codes to apps that are registered. ![Code authentication flow](/content/images/glossary/signin_code.svg) The user signs in with the external identity provider. > **Note:** The sign-in process depends on the identity provider and might involve multiple steps and services that are not shown on the diagram. At the end of the sign-in process, the identity provider returns an *ID token* to the client app. The app can request an authentication code with the ID token from the external identity provider using the service [/authenticate \[POST\]](/api/services/authenticate_post.md) or [/authenticate \[GET\]](/api/services/authenticate_get.md) (POST is recommended) – the app must also supply its client ID. If the keys for that provider are not in the cache or have expired, PageSeeder might request the metadata and public keys from the identity provider (optional). If requested, the identity provider returns the JWKS so that PageSeeder can verify the signature (optional). PageSeeder verifies the signature, validates the claims, looks up the member and checks the configuration. If successful, PageSeeder creates an authentication code for that user and client only. The app forwards the code to the user. The user authenticates with PageSeeder using the authentication code. If successful, PageSeeder authenticates the user, creates a new session and returns the session cookie for the browser to use. ## Token authentication flow The token authentication flow for when the client app is running on the browser. > **Note:** Make sure your app is registered as a client and the Website is set as the client URI, otherwise, PageSeeder does not send the CORS headers necessary to make the authentication request. ![Token authentication flow](/content/images/glossary/signin_token.svg) The user signs in with the external identity provider. > **Note:** The sign-in process depends on the identity provider and might involve multiple steps and services that are not shown on the diagram. At the end of the sign-in process, the identity provider returns an *ID token* to the user. The user can now sign in to PageSeeder using the ID token from the external identity provider using the service [/authenticate \[POST\]](/api/services/authenticate_post.md) or [/authenticate \[POST\]](/api/services/authenticate_post.md). If the keys for that provider are not in the cache or have expired, PageSeeder might request the metadata and public keys from the identity provider (optional). If requested, the identity provider returns the JWKS so that PageSeeder can verify the signature (optional). PageSeeder verifies the signature, validates the claims, looks up the member and checks the configuration. If successful, PageSeeder creates a session and returns the session ID in a Cookie for the browser . --- title: "OAuth client" source: https://dev.pageseeder.com/reference/glossary/oauth_client.html description: "An OAuth client is an external application that accesses the PageSeeder API through OAuth 2.0 authorization flows. Clients can be created and managed via API endpoints, and are also required for CORS and SSO functionality." last_updated: 2026-09-08T14:05:35+10:00 tokens: ~221 --- # OAuth client An external app using the PageSeeder API through OAuth. It might plainly be referred to as “client” in the API documentation. PageSeeder supports OAuth 2.0 authorization flows so that external apps can use the PageSeeder API. In OAuth terminology, these applications are called clients. You also need to define your app as a client to use [CORS](/reference/glossary/cors.md) or [Single-Sign On (SSO)](/reference/glossary/single_sign-on.md). ## API In the API, clients are represented using the [\ element](/api/elements/element_client.md). You can create clients using the [/oauth/members/\{member\}/clients \[POST\]](/api/services/oauth-clients_post.md) service. PageSeeder implements the following standard OAuth endpoints: - `[Server URL]/ps/oauth/authorize` : gets an authorization code. - `[Server URL]/ps/oauth/token` : gets an access token. --- title: "Copy" source: https://dev.pageseeder.com/reference/glossary/copy.html description: "A brief reference document that directs readers to the \"duplicate\" entry for complete information on this topic." last_updated: 2026-08-11T16:23:09+10:00 tokens: ~16 --- # Copy *See* [duplicate](/reference/glossary/duplicate.md). --- title: "Manager" source: https://dev.pageseeder.com/reference/glossary/manager.html description: "A Manager is a role with the highest permission level within a PageSeeder group, able to create and edit content, manage members, and configure group settings. Project managers can also configure templates and create new groups." last_updated: 2026-08-11T16:37:48+10:00 tokens: ~184 --- # Manager A particular [role](/reference/glossary/role.md) with permission to configure a PageSeeder [group](/reference/glossary/group.md). Managers have the highest level of permission within a group. They can create and edit tasks, comments and documents as well as manage group members. Approvers and [moderators](/reference/glossary/moderator.md) have equivalent permissions to Managers. Managers of a [project](/reference/glossary/project.md) can also configure the [template](/reference/glossary/project_template.md) for that project and create new groups under it. To administer a PageSeeder server, a member must be an [administrator](/reference/glossary/administrator.md), as the scope of manager is limited to the group. --- title: "Name-value pair" source: https://dev.pageseeder.com/reference/glossary/name_value_pair.html description: "A name-value pair is a fundamental data structure in computing that PageSeeder natively supports. It associates a name with its corresponding value for data storage and retrieval." last_updated: 2026-09-05T17:35:22+10:00 tokens: ~66 --- # Name-value pair A common data structure in computing, they are natively supported in PageSeeder. For further information, *see* [property](/psml/elements/element_property.md) and [PSML properties editor](/guide/configuration/psml/psml_properties_editor.md). --- title: "Group owner" source: https://dev.pageseeder.com/reference/glossary/group_owner.html description: "Group owner is a value used to cluster or differentiate groups, typically representing an individual or organization name. It's visible on the projects and groups page and set via group configuration advanced options, enabling groups with common owners to share member details." last_updated: 2026-09-05T15:56:52+10:00 tokens: ~220 --- # Group owner Is a value used to cluster, or differentiate, [groups](/reference/glossary/group.md). Typically the name of an individual or organization, the “owner” is visible through the **projects and groups page** under the system admin menu. The owner value is set through the [advanced options](/reference/glossary/group_config_advanced_options.md) tab of the [group configuration](/reference/glossary/group_config.md) option under the admin menu. See the following screens. A practical use of this field is that groups with a common owner can share member details, *see* [shared details](/reference/folders_and_files/project_template/member_details.md). ![Projects and groups – Owner](/content/images/glossary/projects_groups_owner_v60000.webp) Create or edit the owner. ![Group configuration – Owner](/content/images/glossary/group_configuration_owner_v60000.webp) --- title: "Document metadata" source: https://dev.pageseeder.com/reference/glossary/document_metadata.html description: "Document metadata are customizable properties attached to PageSeeder documents based on their type. Defined in PSML templates, they enable consistent information capture across similar documents, supporting various datatypes like text, dates, and cross-references." last_updated: 2026-09-08T13:59:40+10:00 tokens: ~653 --- # Document metadata A set of properties that can be attached to a document based on its document type or media type. Since PageSeeder 5.9, any document can have a predefined set of properties. ## Metadata template The list of properties that is defined in a PSML [document template](/reference/glossary/document_template.md), using the [\](/psml/elements/element_metadata.md) element. Although metadata are defined in PSML, they can be defined for any document in PageSeeder. - **For PSML documents** – the metadata is defined in the template for the [document type](/guide/configuration/psml.md). - **For other documents** – metadata are defined in a template that is used for all documents of the same [media type](/reference/glossary/media_type.md). ### Example For example, metadata can be used to provide information about a photograph, such as copyright, location, date, orientation, etc... in a manner that is consistent across all documents of the same kind. Following is a sample metadata template for a document to enter a title, publication date and an [xref](/reference/glossary/cross_reference.md) to an alternative document. > **Note:** When a document is bound to a media type rather than a PSML document type, the document level is '`metadata`’ rather than ‘`portable`’ and when uploaded, it must be in the `META-INF` folder as described in  [Universal Portable Format](/psml/universal_format/universal_portable_format.md). ```xml ...   ``` > **Note:** - When uploading and overwriting an existing document, the metadata is only modified if the **Overwrite metadata and document properties** checkbox is selected under wrench **Upload options**. - Metadata for a non-PSML file can only be modified when the file itself is uploaded along with the corresponding PSML metadata document. > **Note:** - Metadata properties that aren’t defined in the document template can still be uploaded and edited, but only text and date properties can be added through the UI. - New metadata properties can be added to the document template at any time and are added to a document when its properties are edited.  --- title: "Folder view" source: https://dev.pageseeder.com/reference/glossary/folder_view.html description: "The folder view page displays a folders panel in PageSeeder, enabling users to navigate and browse documents through the interface. Also known as the group documents page." last_updated: 2026-08-11T16:25:01+10:00 tokens: ~68 --- # Folder view Also known as group **documents page** (or ‘Document browse’ in version 5). The **folders panel** is displayed, allowing user to traverse folders through the PageSeeder interface. ![Folder view page](/content/images/glossary/folder_view_v60000.webp) --- title: "Metadata" source: https://dev.pageseeder.com/reference/glossary/metadata.html description: "This document clarifies the multiple meanings of \"metadata\" in PageSeeder, distinguishing between document metadata (name/value pairs in the element), Universal Metadata Format (equivalent to element), and system-derived information like document info and fragment info." last_updated: 2026-09-08T13:59:40+10:00 tokens: ~342 --- # Metadata The broad scope of PageSeeder has left some important terms with more than one meaning. “['document'](/reference/glossary/document.md)”, “[properties](/reference/glossary/properties.md)”, and “metadata” are all such terms. The uses of metadata are as follows: - **[Document metadata](/reference/glossary/document_metadata.md)** – also known as “metadata property” or “publication metadata”,  the [\](/psml/elements/element_metadata.md) element is a container for name / value pairs on the content. They are editable and have basic types, or very specific types when combined with [Schematron](/reference/glossary/schematron.md). For further information, *see* this [tutorial](/get_started/tutorials/substitute_lo-res_with_hi-res_images.md). - **[Universal Metadata Format](/psml/universal_format/universal_metadata_format.md)** – in this context, metadata is the same information as the `` element, but in the [Universal format](/reference/glossary/universal_format.md) packaging. Metadata also refers to derived or system information about the document or fragment: - **Document info** – the `` element acts as a wrapper for a number of document-level metadata fields, such as versions and [reverse cross-references](/reference/glossary/reverse_xref.md). - **Fragment info** – see the `` element. --- title: "Shared document" source: https://dev.pageseeder.com/reference/glossary/sharing_document.html description: "A document accessible to multiple groups through folder-level sharing. When a folder is shared, all its contents automatically become viewable by designated groups." last_updated: 2026-09-14T13:54:37+10:00 tokens: ~107 --- # Shared document A [document](/reference/glossary/document.md) viewable by more than one [group](/reference/glossary/group.md). For a more detailed discussion on this topic, *see* [shared documents](/guide/documents/shared_documents.md). > **Note:** You cannot share individual documents, only [folders](/reference/glossary/folder.md). When you share a folder, the folder and all its descendants are shared automatically. --- title: "Built-in document types" source: https://dev.pageseeder.com/reference/glossary/builtin_document_types.html description: "Description of the three default types that come with the product as standard" last_updated: 2026-08-11T16:35:17+10:00 tokens: ~191 --- # Built-in document types PageSeeder comes preconfigured with three [document types](/reference/glossary/document_type.md): - [References](/reference/glossary/references_document.md) – this type of document can be used to assemble documents together into a [publication](/reference/glossary/publications.md). It also has a marker for generating a [table of contents](/reference/glossary/table_of_contents.md). - **Default** – this type is a basic document with a title and content [section](/reference/glossary/section.md). It also acts as a source of configuration values that other types can either override or inherit.  - **Help** – use this type for **help articles** that display in a panel. They can be associated to one or more pages or document types. --- title: "Date picker" source: https://dev.pageseeder.com/reference/glossary/date_picker.html description: "A guide to adding common interface components like date pickers to PSML documents using properties-fragments, with reference to the PSML properties editor." last_updated: 2026-09-05T17:35:16+10:00 tokens: ~60 --- # Date picker Common interface components such as a date picker can be added to PSML documents using a ``. For further information, *see* [PSML properties editor](/guide/configuration/psml/psml_properties_editor.md). --- title: "Fragment label" source: https://dev.pageseeder.com/reference/glossary/fragment_label.html description: "A fragment label is a persistent label applied to a fragment that remains even after multiple edits. For labeling specific edits, use an edit note label instead." last_updated: 2026-08-11T16:27:35+10:00 tokens: ~95 --- # Fragment label A [label](/reference/glossary/labels.md) which applies to a [fragment](/reference/glossary/fragment.md). Fragment labels persist even after a fragment has been edited multiple times. To apply a label to a particular edit, use an [edit note label](/reference/glossary/edit_note_label.md). ![Fragment label](/content/images/glossary/fragment_label_v60000.webp) --- title: "Subgroup" source: https://dev.pageseeder.com/reference/glossary/subgroup.html description: "Subgroups enable efficient bulk management by allowing all members of one group to be added to another group simultaneously, with options to inherit or override roles and preferences." last_updated: 2026-09-14T13:54:29+10:00 tokens: ~446 --- # Subgroup Subgroups allow all the members of one [group](/reference/glossary/group.md) to be added to another group (the [supergroup](/reference/glossary/supergroup.md)) with one action, as if it was an individual member. Adding and removing multiple individuals to groups can be tedious, therefore prone to errors. Creating subgroups for different teams can reduce the chance of errors. > **Note:** Only one level of subgroups is processed, so a subgroup of a subgroup is not considered part of the supergroup. For example if group A has a subgroup B and group B has a subgroup C, then C is not part of A. Options for members of a subgroup are either: - Inherit the same roles and preferences as the subgroup (except moderator becomes manager and moderator & approver becomes approver); or - Override existing roles and preferences in the subgroup. If a user is a member of multiple subgroups then: - The role with the highest permissions is used. - The notification with the highest frequency is displayed, however, all notifications are applied (for example, a member could receive both `normal` (immediate) and `daily` (digest) notification. - The member’s email is displayed to other members if it is displayed in at least one subgroup. > **Note:** If a user is also a member of the supergroup, then that role and preferences override any in the subgroups. Member details fields from subgroups are only displayed if they have the same details type name as that of the supergroup, the same owner, and the details configuration file has the `shared="true"`attribute. ## Adding a subgroup ![Manage members – Add subgroup](/content/images/glossary/manage_members_add_subgroup_v60000.webp) ![Add subgroup modal](/content/images/glossary/add_subgroup_modal_v60000.webp) --- title: "Open XML" source: https://dev.pageseeder.com/reference/glossary/open_xml.html description: "Open XML refers to the Microsoft Word DOCX format, which is a modern, standardized file format for word processing documents used in Microsoft Office applications." last_updated: 2026-08-11T16:37:52+10:00 tokens: ~23 --- # Open XML *See* [Microsoft Word DOCX format](/reference/glossary/word_docx_format.md). --- title: "Ambiguous xref" source: https://dev.pageseeder.com/reference/glossary/ambiguous_xref.html description: "This document addresses the issue of ambiguous cross-references (xrefs) in PageSeeder, directing users to consult the \"resolve references\" section for guidance on handling unclear or conflicting document links." last_updated: 2026-08-11T16:33:33+10:00 tokens: ~23 --- # Ambiguous xref *See* [resolve references](/reference/glossary/resolve_references.md). --- title: "Publish script" source: https://dev.pageseeder.com/reference/glossary/publish_script.html description: "Publish scripts are Apache Ant build files that enable batch processing of PSML documents through the Publish engine. They allow users to export, import, move files, and create documents at document, folder, or group levels." last_updated: 2026-08-11T16:33:49+10:00 tokens: ~484 --- # Publish script An [Apache Ant](https://ant.apache.org/) build file ([build.xml](/reference/glossary/file_build.md)) that calls the [Ant API](/guide/publishing/ant_api.md) through [Ant tasks](/reference/glossary/ant_task.md) so they can be processed by the [Publish engine](/reference/glossary/publish_engine.md). Through the Ant API, [PSML Ant scripts](/guide/configuration/psml/psml_ant_scripts.md) can access in batch mode most of functionality that is available through both the user interface and the services. This allows scripts to: - Export to non-PSML formats. - Import from non-PSML formats. - Move PSML files to another location. - Create PSML documents using variables from a non-PSML source file. > **Note:** Publish scripts are managed at the project level – this means all groups in a project access the same publish actions. For users with admin rights, the Publish actions can be accessed on the **Publish scripts** page. ![Publish scripts page](/content/images/glossary/publish_scripts_page_v60000.webp) ## Usage Publish scripts can be configured for use as follows: - **Document** – to process the currently open document.  ```text /template/[project]/document/ ``` - **Folder** – for processing an entire folder. ```text /template/[project]/folder/ ``` - **Group** – for processing a group. The `build.xml` file is under: ```text /template/[project]/group/ ``` - **Scheduled publishing script** – an alternate way to invoke the group publishing script at a specific time. All scheduled events can be viewed by [administrators](/reference/glossary/administrator.md). For further information, see [Scheduled jobs](/reference/glossary/scheduled_jobs.md). ## Example scripts There is a growing set of scripts available to developers to use for learning or customization. The most up-to-date information is available on the PageSeeder [GitHub](https://github.com/pageseeder/pageseeder-tutorials) site. --- title: "Publish" source: https://dev.pageseeder.com/reference/glossary/publish.html description: "Publish is a batch processing concept in PageSeeder that enables exporting PageSeeder XML to formats like PDF and DOCX, as well as importing Microsoft Word and Excel files into PageSeeder XML." last_updated: 2026-09-08T16:48:20+10:00 tokens: ~95 --- # Publish A concept of [batch processing](/reference/glossary/batch_processing.md) in PageSeeder. Publish can mean exporting [PageSeeder XML](/psml.md) into non-PageSeeder formats such as [PDF](/reference/glossary/pdf_documents.md), [DOCX](/reference/glossary/word_docx_format.md) or arbitrary XML formats. It can also mean importing Microsoft Word or Excel into PageSeeder XML. --- title: "Bastille" source: https://dev.pageseeder.com/reference/glossary/bastille.html description: "Bastille is a Java library that extends Berlioz to integrate with PageSeeder, offering connectors, authentication, search indexing, XML generation, and web optimization features for website development." last_updated: 2026-08-11T16:27:23+10:00 tokens: ~151 --- # Bastille Bastille is a [Java](/reference/glossary/java.md) library which extends [Berlioz](/reference/glossary/berlioz.md) to better integrate with PageSeeder and provide common functionalities for websites. In particular, it provides the following: - Connectors to PageSeeder. - Sign in and sign out from PageSeeder through an external website. - Indexing and search generators for Berlioz. - XML generators for Berlioz. - Web optimization (minimizing, caching). Source code and documentation available on Github: [https://github.com/pageseeder/bastille](https://github.com/pageseeder/bastille) --- title: "Question (search)" source: https://dev.pageseeder.com/reference/glossary/question_(search).html description: "The search service uses \"question fields\" (like document title and author) and \"questions\" (one or more words) to find matching content. It returns results as documents, comments, or URLs where question fields partially or fully match the query." last_updated: 2026-08-11T16:32:58+10:00 tokens: ~123 --- # Question (search) The conceptual foundation of the search service is the idea of “question field” and “question”. Examples of question fields are “document title” and “author”. A questions would be one or more word that appear in either or both question fields. After processing the question, the search service will return a list of results in the specified format (documents, comments, URLs)  where the content of a question field fully or partially matched the content of the question. --- title: "Approver" source: https://dev.pageseeder.com/reference/glossary/approver.html description: "The Approver role is the highest permission level in a group, combining manager permissions with additional authority to approve and close tasks, manage document workflows, and create document versions." last_updated: 2026-08-11T16:37:57+10:00 tokens: ~107 --- # Approver The Approver [role](/reference/glossary/role.md), has the highest level of permission within a group. They have the same permissions as [managers](/reference/glossary/manager.md), but they have additional permissions to allow them to approve and close [tasks](/reference/glossary/task.md) and document [workflows](/reference/glossary/workflow.md), and create document [versions](/reference/glossary/version.md). --- title: "Logging" source: https://dev.pageseeder.com/reference/glossary/logging.html description: "PageSeeder provides group and server logs for developers and administrators to monitor system health and diagnose issues. Logs can be configured via global properties and use the logback framework with predefined loggers and appenders for access, indexing, processing, publishing, and mail functions." last_updated: 2026-09-14T15:45:26+10:00 tokens: ~597 --- # Logging PageSeeder provides several types of logs for [developers](/reference/glossary/developer_view.md) and [administrators](/reference/glossary/administrator.md) to assess the health of their system and diagnose problems. Most logs contain the [date and time](/reference/glossary/date_and_time.md), context and, when possible, the user or stack trace.  ## Group logs These are accessible by [group managers](/reference/glossary/manager.md) and provide detailed information about a specific group, including the following: - Jobs run by the PageSeeder publisher. - Indexing of documents, tasks or comments. - Custom or standard process jobs such as moving, batch editing, importing, or publishing documents or [comments](/reference/glossary/comment.md). ## Server logs These store detailed information for all PageSeeder transactions and are only accessible by administrators. They include information such as: - Detailed records of access and actions for tracing what might have caused an error. - A log of system messages from different components. ## Configuration Logs can be configured using the [global properties](/guide/configuration/properties/global_properties.md) through the following properties: - `logsLocation` - `logsAccessLevel`  - `logsAccessHistory`  > **Warning:** The following information is for users with experience managing logs. Do not make any changes to the configuration unless you understand the consequences. PageSeeder uses the [logback](https://logback.qos.ch/) framework with the `logback-pageseeder.xml` configuration file loaded at start up. It predefines the following loggers and appenders: | Logger | Appender | | | --- | --- | --- | | PAGESEEDER.Access | ACCESS | Daily log, 7-day history | | PAGESEEDER.Index | INDEX | Daily log, 30-day history viewable through interface | | PAGESEEDER.Process | PROCESS | Daily log, 30-day history viewable through interface | | PAGESEEDER.Publish | PUBLISH | Daily log, 30-day history viewable through interface | | PAGESEEDER.Mail | MAIL | Daily log, 30-day history viewable through interface | | \* (any other) | GENERAL | Daily log, 30-day history. Recent logs viewable through interface | For details on adding a new appender or changing the relationship between a logger and appender, refer to the [logback](/reference/advanced/website/berlioz/configuration/logback.md) documentation. --- title: "Publish task" source: https://dev.pageseeder.com/reference/glossary/publish_task.html description: "An alternate and non-preferred term for an Ant task used in build automation processes." last_updated: 2026-08-11T16:32:53+10:00 tokens: ~32 --- # Publish task An alternate, ambiguous and non-preferred term that refers to an [Ant task](/reference/glossary/ant_task.md). --- title: "Account activation" source: https://dev.pageseeder.com/reference/glossary/account_activation.html description: "Account activation is a security feature that validates email addresses and verifies ownership." last_updated: 2026-09-08T12:22:54+10:00 tokens: ~36 --- # Account activation Account activation is an important security feature. It ensures the email address is valid and verifies who controls it. --- title: "Fragment" source: https://dev.pageseeder.com/reference/glossary/fragment.html description: "Fragments are the building blocks of PageSeeder documents. They can contain comments, have unique IDs, and be edited if the document format supports it. Specialized fragment types include properties, cross-references, and media fragments." last_updated: 2026-09-14T13:54:40+10:00 tokens: ~391 --- # Fragment [Documents](/reference/glossary/document.md) in PageSeeder are composed of fragments. Fragments can have a [comment](/reference/glossary/comment.md) thread attached to them. If the document can be edited or is in an editable format such as [PSML](/reference/glossary/psml.md), its fragments can also be edited. Fragments have unique identifiers (IDs) that are either generated by the system or can be assigned through markup. Where [fragment IDs](/reference/glossary/fragment_id.md) are created through markup, fragments can be edited programmatically. This can be very useful where there is a need to update only specific parts of a document. Fragments are grouped into [sections](/reference/glossary/section.md). All documents have a default fragment, which is used to refer to the entire document. ## PSML In PSML, fragments are usually represented using the `` element.  There are also specialized fragments: - `` – for properties (simple data-value pairs). - `` – for lists of [cross-references](/reference/glossary/cross_reference.md). - `` – for non-PSML content. Fragments can be added, removed, or repositioned within the section or document, if in the [document template](/reference/glossary/document_template.md): - The document structure isn’t set to [locked](/psml/elements/element_document.md). - The [document](/psml/elements/element_document.md) or [sections](/psml/elements/element_section.md) aren’t set to be [read only](/reference/glossary/read_only.md). --- title: "Publish action" source: https://dev.pageseeder.com/reference/glossary/publish_action.html description: "Describes the `` element used in PageSeeder's publish config, which includes source and target specifications." last_updated: 2026-09-14T15:51:49+10:00 tokens: ~689 --- # Publish action A type of processing action defined in PageSeeder configuration files that allows users to publish content to external systems or locations. It is one of several action types that can be configured to extend PageSeeder's publishing capabilities. ## Overview Publish actions are defined using `` elements with `type="publish"`in the following configuration files: - **`publish-config.xml`** – controls publishing across groups, folders, documents, or search results in a project - **`document-config.xml`** – controls publishing for specific document types - **`url-config.xml`** – controls publishing for specific URL types ## Action structure A publish action consists of: - `` – the parent element that defines the action type - `` – specifies what content can be published (required in `publish-config.xml`) - `` – defines one or more publishing targets that correspond to Ant script targets ### Source element In `publish-config.xml`, each publish action must specify a source: ```xml ``` Valid source types include: - `group` – publish an entire group - `folder` – publish a folder - `batch` – publish search results - `document` – publish a specific document (requires `extension` attribute) - `publication` – publish from publication root documents (requires PageSeeder v6.2+) ### Target element Each target defines a specific publishing destination or process: ```xml Publish to website ``` **Key attributes:** - `name` – must match the Ant script target name (required) - `role` – minimum role required (contributor|manager|approver) - `perspective` – controls visibility (developer|none) - `override` – if true, replaces default targets with the same name **Parameters:** Targets can include `` elements to allow users to customize the publishing process with options like depth, filters, or destination settings. ## Example Publishing a folder to a website with depth control: ```xml Publish to website ``` ## Related action types - `export` – exports content to different formats (PDF, DOCX, etc.) - `process` – performs custom processing - `upload` – uploads content to PageSeeder --- title: "Variation" source: https://dev.pageseeder.com/reference/glossary/variation.html description: "A variation is a document created by duplicating another document in PageSeeder. The system maintains a link between variations through the `original-docid` metadata property, allowing all variations to reference the same original document regardless of duplication chain." last_updated: 2026-09-08T11:50:22+10:00 tokens: ~391 --- # Variation A document originally created as a copy of a document using the [duplicate](/reference/glossary/duplicate.md) function. When a document is duplicated, PageSeeder keeps a record of the duplication by saving the [document ID](/reference/glossary/document_id_docid.md) of the original document as the value of the `original-docid` metadata property in the duplicate document. **Example** ```xml   ``` If the original document doesn’t have a document ID, PageSeeder generates one and applies it to the original document. If the document being duplicated is already a variation, the same `original-docid` is reused as a metadata property. As a consequence, there is no hierarchy between variations: all variations of a document – whether they are created from the original or from a variation – share the same `original-docid` and refer to the same document ID. ![Variations](/content/images/glossary/variations.svg) > **Note:** The association between variations is intendedly weak. If you change or remove either the document ID on the original document or the metadata property in the duplicated document, the connection is lost and they are no longer considered variations. In the user interface, variations of a document in a group are listed in the compare documents panel so that you can easily compare how the variations differ from each other. --- title: "Table of Contents (TOC)" source: https://dev.pageseeder.com/reference/glossary/table_of_contents.html description: "This document explains that `` is a placeholder element used to automatically generate a Table of Contents in PageSeeder documents." last_updated: 2026-09-08T11:51:27+10:00 tokens: ~26 --- # Table of Contents (TOC) `` is a placeholder element for the generation of a Table of contents. --- title: "Download" source: https://dev.pageseeder.com/reference/glossary/download.html description: "The Download feature enables users to save PageSeeder documents locally in their native format, providing convenient offline access to document content." last_updated: 2026-08-11T16:30:20+10:00 tokens: ~30 --- # Download In the document context, the download option allows any document to be saved locally in its native format. --- title: "Java" source: https://dev.pageseeder.com/reference/glossary/java.html description: "Java is the core language for PageSeeder applications and Berlioz generators. PageSeeder 6 recommends Java version 11 or later for optimal performance and compatibility." last_updated: 2026-08-11T16:27:23+10:00 tokens: ~57 --- # Java Java is the language used to write much of the core of the PageSeeder application and the generators for any [Berlioz](/reference/glossary/berlioz.md) application. From PageSeeder 6, the recommended Java version is 11. --- title: "Publication config" source: https://dev.pageseeder.com/reference/glossary/publication_config.html description: "Controls how Publications are numbered and configured. Accessible via the Publication types tab on the template configuration page. Defines publication properties and numbering schemes." last_updated: 2026-08-12T10:51:22+10:00 tokens: ~83 --- # Publication config Among other properties, this controls the way a “Publication” is numbered. The `publication-config.xml` is available through the **Publication types** tab, on the **template configuration page**. For further information, *see* [publications and publication types](/guide/configuration/publication_types.md). --- title: "Validation" source: https://dev.pageseeder.com/reference/glossary/validation.html description: "Document about validation methods and processes in PageSeeder, referencing Schematron standards and document validation techniques." last_updated: 2026-09-14T15:59:05+10:00 tokens: ~38 --- # Validation See [Schematron](/reference/sample_code/schematron.md) or [validating documents](/guide/documents/validating_pageseeder_documents.md). --- title: "Workflow" source: https://dev.pageseeder.com/reference/glossary/workflow.html description: "A workflow is an XLink object that tracks a document's lifecycle stages, with properties for status, priority, assignee, and due date. One workflow per document reduces coordination overhead in collaborative writing environments." last_updated: 2026-09-14T13:54:32+10:00 tokens: ~516 --- # Workflow An [XLink object](/guide/document_modeling/pageseeder_objects.md) that expresses the stages in a document’s lifecycle – reducing coordination overheads in a collaborative writing environment. In the user interface, workflows use the workflow icon. There can only be one workflow per document – the status of the document is the workflow status.  > **Note:** Unlike [tasks](/reference/glossary/task.md), workflows are bound to the whole of the document they are created on and cannot be moved or removed. Like [tasks](/reference/glossary/task.md), workflows let you use the following properties on a document: - **[Status](/reference/glossary/status.md)** – nominates the state of the document. - **[Priority](/reference/glossary/priority.md)** – nominates the importance of the work. - **[Assignee](/reference/glossary/assignee.md)** – nominates the member responsible for the document – by default, only the assignee is [notified](/reference/glossary/notification.md). - **Due Date** – nominates when completion of the work is required. > **Tip:** The document status values available to use depend on the [role](/_external/ps/doc/help/help/2_terms_and_explanations/term/role.md) that a member has in the group. In the [group properties](/_external/ps/doc/help/help/1_user_interface/layout/group_properties.md), managers can set the values for workflow properties and which [roles](/_external/ps/doc/help/help/2_terms_and_explanations/term/role.md) can use them. You can advance the document workflow to a next stage by using the **workflow dialog**.  Workflows can also use [labels](/reference/glossary/labels.md). Workflows can be created on multiple documents at the same time (using the [batch processing](/reference/glossary/batch_processing.md)), but they are independent from each other. The comment content of workflows can be edited retrospectively – no notification is generated for the edits. When you archive a document, the workflow is also automatically archived. If the document is unarchived, the workflow is also unarchived. --- title: "Bridge" source: https://dev.pageseeder.com/reference/glossary/bridge.html description: "Bridge is an open source Java/Kotlin library that simplifies accessing the PageSeeder service API, enabling content creation, user management, and content processing capabilities for applications." last_updated: 2026-09-14T14:14:40+10:00 tokens: ~212 --- # Bridge Open source library that simplifies the task of accessing the [PageSeeder service API](/api/services.md) from [Java](/reference/glossary/java.md) or Kotlin applications. Bridge allows applications to support the following: - **Create content **– by allowing applications to create comments, create and assign tasks and create, upload and edit documents.  - **User management** – create accounts, authenticate users, use the PageSeeder permission model to only display relevant material, store and access user customizations and more. - **Process content** – compare document versions, export to non-PageSeeder formats, create and send messages, resolve linked collections. For non-Java developers, the service API is always accessible using HTTP and XML / JSON. See [PageSeeder Bridge on Github](https://github.com/pageseeder/bridge). --- title: "Auto-save" source: https://dev.pageseeder.com/reference/glossary/auto-save.html description: "Auto-save is a feature that automatically stores draft versions of document fragments every few seconds after typing stops. It also works for comments and tasks, continuing until the window closes or is manually saved." last_updated: 2026-08-11T16:35:23+10:00 tokens: ~172 --- # Auto-save When editing a [document](/reference/glossary/document.md), there is an auto-save feature that stores the current [draft](/reference/glossary/draft.md) version of the [fragment](/reference/glossary/fragment.md) every few seconds after you stop typing. ![Document edit draft](/content/images/glossary/document_edit_draft_v60000.webp) > **Note:** If an edit window is left open, auto-save continually runs until the window has been closed or manually saved. The auto-save feature also operates when creating a new [comment](/reference/glossary/comment.md) or [task](/reference/glossary/task.md). ![Comment autosave](/content/images/glossary/comment_autosave_v60000.webp) --- title: "XLink" source: https://dev.pageseeder.com/reference/glossary/xlink.html description: "XLinks are core PageSeeder components enabling cross-references and document assembly. They allow fragments to be stored and edited separately, supporting publishing features like indexes and footnotes through a rich, customizable syntax." last_updated: 2026-09-05T17:36:31+10:00 tokens: ~232 --- # XLink XLinks are a key component in the PageSeeder architecture. Sometimes their role is obvious ([cross-references](/reference/glossary/cross_reference.md)), and sometimes it is less obvious (a new document). They are a key tool for developers, allowing document [fragments](/reference/glossary/fragment.md) to be stored and edited separately but assembled for publishing. This mechanism is useful for implementing typical publishing capabilities such as indexes, footnotes, endnotes, chapters etc. XLinks are expressed in a syntax that is both rich and customizable. This makes it possible to give links different contexts for processing and makes it possible to keep the structure of document fragments simpler than would be required with a less rich link syntax. ![PageSeeder XLinks](/content/images/glossary/pageseeder_xlinks.webp) ![PageSeeder architecture](/content/images/glossary/pageseeder_architecture.webp) --- title: "Markdown" source: https://dev.pageseeder.com/reference/glossary/markdown.html description: "Markdown is a lightweight formatting language supported by PageSeeder in comments and document properties. It enables users to create HTML or XML without technical expertise using simple syntax for headings, lists, quotes, and inline formatting." last_updated: 2026-09-08T13:37:47+10:00 tokens: ~1039 --- # Markdown A simple, lightweight, readable, formatting language, markdown allows users with minimal instruction, or experience to create basic HTML or XML data without understanding the complexities of either. PageSeeder supports Markdown in both [comments](/reference/glossary/comment_format.md) and [document properties](/psml/elements/element_property.md). > **Note:** In the following examples, a full stop character "`.`" is used to represent the space character. ## Block formatting | Style | Pattern | Description | | --- | --- | --- | | Title | `Main title` `==========` | Title is formatted as "`heading1`" when a paragraph is followed by a line of "`=`" characters. | | Subtitle | `A subtitle` `----------` | Subtitle is formatted as "`heading2`" when a paragraph is followed by a line of "`-`" characters. | | Heading | `# Heading 1` `## Heading 2` `more text` `###### Heading 6` | To express a hierarchical collection of headings, prefix single line paragraphs with between one "`#`" to six "`######`" characters. | | Unordered list (bullet list) | `* Red` `* Blue` `Aqua` | Unordered list items are paragraphs that start with a single "`*`", "`-`" or "`+`". All paragraphs that follow the list item are treated as additional items, until a blank line terminates the list. Nested (multi-level) lists are not supported. | | Ordered list (Numbered list) | `3. Red` `21. Blue` `Aqua` after processing, this becomes: RedBlueAqua or: \ \Red\ \Blue\ \Aqua\ \ | Ordered list items are initiated by a new paragraph that begins with a digit and a full stop "`.`" character. Each subsequent paragraph becomes a new list item, until a blank line terminates the list. Nested (multi-level) lists are not supported. Only the number in front of the first paragraph is processed. It sets the starting number and all others are ignored. To prevent a line from being treated as a list item, escape the full stop character with a backslash "`\`" , like the following: 3\\. Red 21\\. Blue Aqua | | Preformatted | ....function () \{ ......// do something! ....\} | Putting at least four spaces at the start of a line preserves indentation, but no further formatting is available. | | Preformatted block | \`\`\` function () \{ // do something! \} \`\`\` | This string "`\`\`\``" on an empty line treats all subsequent lines as preformatted until the same string terminates that style. | | Blockquote | `> First paragraph` `>` `> Second paragraph.` | Any line preceded by at least one "`>`". No other formatting within quoted content. | | Paragraph | `Start of paragraph 1` `text text text...` `end of paragraph 1.` `Paragraph 2.` | Paragraphs are blocks of text separated by at least one empty line. | | Line breaks | `Short text.` `More text.` | Any line of less than 66 characters long inserts a line break inside a paragraph. Multiple empty lines also add line breaks outside paragraphs. | ## Inline formatting Inline formatting only applies to paragraphs, headings and lists. | Style | Pattern | Description | | --- | --- | --- | | Bold | `An **important** note` | Any inline text surrounded by double "`*`" appears in bold. | | Italic | `An *important* note` | Any inline text surrounded by single "`*`" appears in italics. | | Code | `\`a+b=c\`` | Any inline text surrounded by single left quotes "`\``" is interpreted as code and displayed using a monospace font. | | Autolink | At `http://example.org`! | Any text starting with "`http://`" or "`https://`" automatically turns into a link. The link display is verbatim, but `must end with a letter or number.` | | `Explicit link` | ` ` | Explicitly creating a link that includes characters to be escaped, or an email addresses. **Must** start with "``". The protocol is not displayed in the document. | | Titled link | `[PageSeeder]​​(http://ps.com)` | To display a title rather than the content of the link, wrap the title text in square brackets immediately before wrapping the link address in round brackets. | --- title: "Cache-Control" source: https://dev.pageseeder.com/reference/glossary/cache_control.html description: "PageSeeder uses HTTP caching headers to optimize performance. HTML resources are never cached with `Cache-Control: no-cache`, while static resources like CSS and JavaScript are cached for 24 hours with revalidation via ETags." last_updated: 2026-08-11T16:30:25+10:00 tokens: ~813 --- # Cache-Control There are multiple levels at which PageSeeder utilizes caching to improve performance. This entry is specifically oriented to HTTP caching. `Cache-Control` is an HTTP header value, used by both the user agent (the browser) and the server (and proxy servers), to control how the browser caches content served by PageSeeder. This can optimize performance and conserve bandwidth. PageSeeder uses two types of cache control, depending on the type of resources being requested. ## Volatile resources For all [HTML](/reference/glossary/html.md), PageSeeder explicitly disables browser caching with the following HTTP response headers: ```text Expires: Thu, 01 Jan 1970 00:00:00 GMT Cache-Control: no-cache ``` The `Cache-Control` header with a value of `no-cache` prevents caching by browsers and proxies, ensuring that the user always gets a fresh copy directly from the server. The `Expires` header is only needed for old proxy servers which don’t support HTTP/1.1. While this configuration ensures currency of resources, it is costly in terms of bandwidth and CPU and shouldn’t be used when it isn’t necessary. ## Static resources For static resources (such as CSS, JavaScript, and some images), PageSeeder uses HTTP response headers that allow caching by browsers and proxy servers. For example: ```text Expires: Fri, 03 Jun 2011 05:02:07 GMT Cache-Control: max-age=86400, must-revalidate Etag: W/"4845-1267586931000-gzip" ``` The `Cache-Control` header tells the browser that the resource can be cached for up to `86400` seconds (= 24 hours), then it must be checked for currency (revalidated). Revalidation is done by the client returning the Etag from the original header back to the server. The `Expires` header is only needed for old proxy servers which don’t understand HTTP/1.1, and it should be overridden by the `Cache-Control`. When the [PageSeeder Server](/reference/glossary/pageseeder_server.md) revalidates a resource (and the request is successful), it returns either of these: | 200 (OK) | Including the content if the resource is new or the server is unable to determine whether the browser has a copy | | --- | --- | | 304 (Not Modified) | Headers without the content assuming that the browser has a copy | The browser doesn’t attempt to connect to the server while the resource is considered fresh. See also [Hypertext Transfer Protocol -- HTTP/1.1](https://tools.ietf.org/html/rfc2616). ### Browser reload Following are the different ways the browser retrieves resources. These are dependent on the action from the user. | **Link or** URL in address bar | Retrieves the resource in the most efficient manner: from cache if possible, otherwise from the server. Sends an Etag if one is available for the resource. | | --- | --- | | **Reload** or  **F5** or  **CTRL+R** | Asks the server to revalidate the cached copy. This request to the server contains the HTTP header `Cache-Control: 0` | | **SHIFT+Reload** or  **CTRL+F5**  or  **SHIFT+CTRL+R** | This expects the browser to discard the cached resource and request a new version from the server, forcing a reload. The HTTP headers include `Cache-Control: no-cache` to ensure that no cache copy is given by intermediaries. | --- title: "Delete" source: https://dev.pageseeder.com/reference/glossary/delete.html description: "PageSeeder discourages deletion due to XLink architecture complexities; archiving is preferred to preserve collection integrity. Deletion is available only when enabled in global properties for specific use cases." last_updated: 2026-08-11T16:38:06+10:00 tokens: ~344 --- # Delete In general, PageSeeder doesn’t encourage ‘deleting’. Even when it isn’t obvious by appearance, the PageSeeder [XLink](/reference/glossary/xlink.md) architecture means that most information objects are created by processing links to users, content and context. Although a single PageSeeder comment might look like a normal email message when viewed through an email client, the creation of that message requires resolving many links between objects on the server. The problem with deleting information on PageSeeder is that it can undermine the integrity of the collection as a whole. Deleting the document where a comment was lodged won’t change the comment, but without a location, it might become unreachable. This is why users are encouraged to use the [archive](/reference/glossary/archive.md) function rather than delete. Archive removes the document from the [index](/reference/index.md) while preserving the integrity of the collection. There are legitimate use cases for ‘delete’. Large collections of test documents is one circumstance where archiving might consume an unnecessary amount of resources for little benefit. To enable delete, use either of the following settings in the [global properties](/guide/configuration/properties/global_properties.md): ```properties adminEnable=delete-documents ``` ```text managerEnable=delete-documents ``` --- title: "Placeholder" source: https://dev.pageseeder.com/reference/glossary/placeholder.html description: "An inline placeholder element that displays metadata property values directly in content, enabling single-location editing with multi-location display across publications and component documents." last_updated: 2026-09-05T17:35:22+10:00 tokens: ~248 --- # Placeholder An inline [\](/psml/elements/element_placeholder.md) element that displays the value of a metadata property directly in content. This allows content (text, date or datetime) to be edited in one location, but shown in multiple. Because the property can belong to the [publication](/reference/glossary/publications.md), the same [component document](/reference/glossary/component_document.md) can display different content in different publications.  Also, the creation and resolution of placeholders are accessible to anyone that has permission to edit the document.  Both can be dynamically created, populated, and resolved by users with no need to modify the [document template](/reference/glossary/document_template.md). ## Configuration Metadata properties for placeholders don’t require any specific configuration, but they can only be mapped to [single value properties](/psml/elements/element_property.md) with a type of: `text`, `date`, or `datetime`. --- title: "Group properties" source: https://dev.pageseeder.com/reference/glossary/group_properties.html description: "Group properties control how groups behave in PageSeeder, such as handling emails from unauthorized addresses. Accessible via Administration tab, these settings can be inherited from global templates or overridden at project level." last_updated: 2026-08-17T10:11:41+10:00 tokens: ~304 --- # Group properties To access, select **Group configuration**, under the **Administration** tab on the **group dashboard page.** These values control how the [group](/reference/glossary/group.md) behaves when, for example, an email is sent from an address that the group has no authority to accept from. These same values can be set at the [project](/reference/glossary/project.md) level. Also, the group properties in the [global template](/_external/ps/doc/help/help/2_terms_and_explanations/term/global_template.md) are the default values for all groups. Group properties are part of the [group configuration](/reference/glossary/group_config.md). *See* [API documentation: Group properties](/guide/configuration/properties/group_properties.md) for inheritance and additional details. > **Tip:** New users should proceed with caution when editing these properties. The rules of inheritance and overrides can be confusing, so it is often best to start with changes at the project level, rather than the group. > **Warning:** Experiment with the group properties on a development server before making changes to a production server. ![Group properties](/content/images/glossary/group-properties_v60000.webp) --- title: "Invitation" source: https://dev.pageseeder.com/reference/glossary/invitation.html description: "Describes a two-step invitation process to add members to PageSeeder groups. Invitations are sent via email, and recipients must confirm acceptance to join. Pending invitations remain until declined." last_updated: 2026-09-08T14:02:13+10:00 tokens: ~352 --- # Invitation A two-step process to add someone to a group by sending them an invitation email – then they must confirm acceptance. Until the invited person accepts the invitation, they are listed with status *invited* under member administration for the group. They don’t receive notification and cannot go to the group. *See* [member management](/guide/configuration/emails/flows/member_management.md) for more details. ## Invitation flow 1. A manager invites a person to join a specific group by entering their details: 1. If the person they invited already has an account, PageSeeder sends a group invitation. 2. Otherwise, a new account is created, and PageSeeder sends the group invitation which includes a link to get started on PageSeeder. 2. The person that has been invited, receives the invitation: 1. If they accept the invitation, they are added to the group. 2. If they decline the invitation, the membership is deleted. > **Note:** If the person never declines the invitation, the invitation remains pending. If a new account was created on invite, and the invitation is declined, the account remains. ## API In the API, invitations are represented with the [\ element](/api/elements/element_membership.md) with the status set to `invited`. Administrators can accept an invitation on behalf of a user by going to the **account profile page** for that user. --- title: "Microsoft Word DOCX format" source: https://dev.pageseeder.com/reference/glossary/word_docx_format.html description: "PageSeeder supports bidirectional conversion between PSML and DOCX formats. Documents can be exported to Word format and DOCX files imported during upload. The conversion process is customizable through configuration settings." last_updated: 2026-08-11T16:37:52+10:00 tokens: ~220 --- # Microsoft Word DOCX format Support for converting [PSML](/reference/glossary/psml.md) documents to DOCX and DOCX to PSML is a standard feature of PageSeeder. Available when viewing a document, there is a standard conversion that processes any PSML document without modification. In addition, DOCX files can be converted into PageSeeder documents when uploading. As well as the standard import / export functionality, how DOCX files are processed is customizable. For further detail, *see* the following: - [Limitations of importing Microsoft Word DOCX files](/guide/documents/office_support/importing_word_documents.md) - [Microsoft Word DOCX – import config usage](/guide/publishing/ant_api/extensions/microsoft_word_docx_import_config_usage.md) - [Export Microsoft Word DOCX config usage](/guide/publishing/ant_api/extensions/microsoft_word_docx_export_config_usage.md) --- title: "Block label" source: https://dev.pageseeder.com/reference/glossary/block_label.html description: "Block labels in PSML associate semantics to text blocks using the `` syntax. They differ from inline labels, which add semantics to individual text strings instead of blocks." last_updated: 2026-09-05T17:32:54+10:00 tokens: ~115 --- # Block label In [PSML](/reference/glossary/psml.md), a block label associates semantics to a block of text. When saved as PSML, they are expressed as: ```xml content ``` where `XXXX` is the name of the label. For more detailed information, *see* [element \](/psml/elements/element_block.md). Adding semantics to a text string, as opposed to a block is done with an [inline label](/reference/glossary/inline_label.md). --- title: "DOCX" source: https://dev.pageseeder.com/reference/glossary/docx.html description: "This document provides a reference to the Microsoft Word DOCX format and Open XML standards, serving as a brief overview or linking document for understanding modern word processing file formats." last_updated: 2026-08-11T16:37:52+10:00 tokens: ~34 --- # DOCX *See* [Microsoft Word DOCX format](/reference/glossary/word_docx_format.md) and [Open XML](/reference/glossary/open_xml.md). --- title: "Scheduled jobs" source: https://dev.pageseeder.com/reference/glossary/scheduled_jobs.html description: "This document explains how to configure and manage scheduled publish scripts in PageSeeder using XML configuration files, including repeat frequencies, parameters, Ant script setup, and monitoring tools." last_updated: 2026-09-08T14:06:19+10:00 tokens: ~1405 --- # Scheduled jobs A [publish script](/reference/glossary/publish_script.md) can be scheduled to run at set times using the scheduler. ## Configuration Scheduled publish events are configured in an XML file which must be located in a certain location. For a specific [project](/reference/glossary/project.md), this location is: ```text /template/[project]/publish/schedule-config.xml ``` Here is a basic example of configuration file: ```xml Create Comments Produce Daily Summary ``` In the previous example, two events are added to the scheduler. When these events are run, the project corresponding to the script context. That is to say, there is no document being published, only the group properties (for the project) are sent to the Ant script (see [PageSeeder’s Publish parameters](/guide/publishing.md) for more information). The `username` attribute requires PageSeeder v6 or higher. It means that the script runs with the corresponding user’s permissions and is able to do anything that user can do. *See following note about permissions in PageSeeder v5.* A publish event must have a `start/@datetime`, a `target/@name` and `description`. Optional fields of the events are: a `repeat` frequency and a list of `param`. Repeat frequency is defined by a repeat interval unit (only one of three are allowed: `@minutes`, `@hours` or `@days`) and the value of the interval. An optional `@until` attribute is the end datetime for the repeat field. An optional `@daysofweek` attribute is a comma-separated list of `mon,tue,wed,thu,fri,sat` or `sun`. It restricts the event to run on the days listed and requires a repeat interval of 1 day or less. An optional `@daysofmonth` attribute is a comma-separated list of  numbers `1-31`. It restricts the event to run on the days listed and requires a repeat interval of 1 day or less. *Requires PageSeeder v6.3 or higher.* Here are examples of repeat frequencies: ```xml ``` Params are the parameters sent to the [Ant script](/guide/configuration/psml/psml_ant_scripts.md), there can be as many as needed. The following param names have special meanings: - `ps-log-level`: The level of logging the script should output. Allows `info|verbose|warn|error|debug` (default `info`). - `ps-download-working`: If `true` the working files generated by the script can be download. This might be useful for debugging (default `false`). > **Note:** The timezone offset in `start/@datetime` is used for the initial start time but all subsequent start times are automatically adjusted for daylight savings time using the server timezone. ## Ant script The corresponding Ant script must be on the ps-publisher in the following location and contain targets with the names specified in the `publish-config.xml`. ```text /template/[project]/schedule/build.xml ``` > **Note:** In PageSeeder v5 a jsession ID/token is not available to the publish script so it needs a username and password to access PageSeeder. These can be supplied using the `` task as follows: ```xml ``` with the following file `pageseeder.properties` in the same folder as the `build.xml`. ```text username=system password=mypassword ``` When a password is in a file like this it is more secure to configure it as an API account in case someone gets a copy of the file. API accounts can only access PageSeeder from specified IP addresses and can be configured by adding the following properties for example to the `global.properties` : ```text apiAccountUsernames=system apiAccountIPs=127.0.0.1 ``` ## View publish script logs After configuring the script on the **Publish scripts** page located under **Templates** in the *Administration menu,* click the **refresh** button at the top right of of the table of publish scripts. You can now **edit** the script or click **open folder** to go to the **Template files** page. To view the publish logs, go to the *System administration* menu \> **Logs** \> **Publish logs** (system page). ## Testing and pausing scripts Go to the **Publisher** page on the A*dministration menu \>* **System administration** \> **Server status** \> **Publisher**. ### Current jobs All the publish jobs running on the server are listed – each job can be monitored and canceled.  The **cancel** button is used to send a request to cancel the job. ### Scheduled jobs All the scheduled jobs for the server are also listed, along with their configured details, which can be useful for debugging. The **refresh** button is available to load any modifications in the configuration file. They can be tested without waiting for the scheduled time – click the **Run now** button to test or **Pause/Continue** if required.  --- title: "Folder" source: https://dev.pageseeder.com/reference/glossary/folder.html description: "Folder is a PageSeeder term with multiple contexts: as OS/file system directories, default group folders like archive and attachments, developer folders like template and weborganic, and XLinks for content qualification and document sharing." last_updated: 2026-09-08T13:58:39+10:00 tokens: ~290 --- # Folder As a term, ‘folder’ can be used in multiple contexts including the following: - When referenced as the object of a host operating system, ZIP file, or programming tool such as Ant, a PageSeeder folder can usually be thought of as part of a conventional, hierarchical directory structure. - From a [user](/reference/glossary/member.md) perspective, several folders are created by default each time a [group](/reference/glossary/group.md) is established: - `[archive]` - `[attachments]` - `[documents]` - `[images]` - For developers, it is critical to understand the server, project and publisher folders of: - `[template]` - `[weborganic]` - As a PageSeeder [XLink](/reference/glossary/xlink.md), folders act as qualifiers for content, not only by categorizing files but by providing a mechanism to [share](/reference/glossary/sharing_document.md) [documents](/reference/glossary/document.md). ## Folder name restrictions The folder name has the same restrictions as [filename](/reference/glossary/filename.md) and folder title must not exceed 250 characters. ![Folders panel](/content/images/glossary/folders_panel_v60000.webp) --- title: "XHTML sanitization" source: https://dev.pageseeder.com/reference/glossary/xhtml_sanitization.html description: "This document specifies the XHTML elements and attributes allowed when sanitizing comment content submitted as application/xhtml+xml, including block elements like paragraphs and tables, inline elements like links and emphasis, and conversion of named entities to numerical equivalents for XML processing." last_updated: 2026-09-08T14:07:33+10:00 tokens: ~240 --- # XHTML sanitization When [comment](/reference/glossary/comment.md) content is submitted with `contenttype=application/xhtml+xml` the content is sanitized for security and consistency so that it only contains the following elements or attributes. Named entities such as ` ` are also converted to numerical entities or Unicode characters so the content can be processed easily as XML. ## Block elements - \ - \ - \ - \ - \ - \ - \ - \ - \ - \
    - \
  1. - \ - \ - \ - \ - \ - \
    - \
    - \
    - \
    - \
    - \
    - \
    - \
    - \
    - \
    
    ## Inline elements
    
    - \
    - \
    - \
    - \
    - \
    - \
    - \
    - \
    - \
    - \
    - \
    - \
    - \
    - \
    - \
    - \
    - \
    - \
    
    ---
    title: "Moderator"
    source: https://dev.pageseeder.com/reference/glossary/moderator.html
    description: "A moderator is a group role responsible for approving comments and membership requests before they become visible or active, with the same permissions as a manager but focused on content moderation tasks."
    last_updated: 2026-08-11T16:33:44+10:00
    tokens: ~400
    ---
    
    # Moderator
    
    A manager who can accept or reject memberships and comments.
    
    A moderator is a particular [role](/reference/glossary/role.md) that gives the responsibility to moderate comments and memberships to a member of the group.
    
    A moderator has the same permissions as a [manager](/reference/glossary/manager.md), except they are emailed:
    
    - Comments for approval before they are inserted.
    - Membership requests.
    
    > **Note:** There can only be one moderator in a group.
    
    ## Comment moderation
    
    When enabled, the moderator receives an email link to either accept or reject comments before they are made available to the group.
    
    > **Tip:** This is typically used when comments can be posted by non-members such as when the group is accessible to [public](/reference/glossary/group_public.md).
    
    As a manager, you can enable comment moderation from your group configuration:
    
    1. Go to [group configuration](/reference/glossary/group_config.md) from your **group dashboard page**.
    2. Expand **Advanced options**, go to the **Comments** section.
    3. Select one of the Moderate options from the **Comment moderation** drop-down menu.
    
    ## Memberships moderation
    
    When enabled, the moderator receives an email link to either accept or reject a request from pending members to join the group.
    
    Managers can enable membership moderation from your group configuration:
    
    1. Go to [group configuration](/reference/glossary/group_config.md) from your **group dashboard page**.
    2. Expand **Advanced options**, go to the **Members** section.
    3. Select the **Moderated** option from the **Joining** drop-down menu.
    
    ---
    title: "Section"
    source: https://dev.pageseeder.com/reference/glossary/section.html
    description: "Sections are containers within PSML documents that divide content into fixed parts, restrict fragment movement and editing, and are defined by document templates. They cannot be modified through the UI but can be changed via upload or API."
    last_updated: 2026-09-05T17:35:41+10:00
    tokens: ~237
    ---
    
    # Section
    
    Defined in each PSML [document](/reference/glossary/document.md) as containers for related fragments, sections are used to divide a document into fixed parts that remain in place throughout the lifecycle of the document.
    
    Sections can be used to restrict the movement, editing or type of [fragments](/reference/glossary/fragment.md) they contain.
    
    Sections are specified in the [document template](/reference/glossary/document_template.md). The template specifies the identifier within the document ([section ID](/reference/glossary/section_id.md)) and can also specify a title.
    
    Once the document is created, users cannot modify sections through the user interface. However, it is possible to modify or add sections in a document by overwriting a document by upload or through the API. Changes to the sections appear in the structure history of the document.
    
    ### PSML
    
    In PSML, sections are represented using the `
    ` element. --- title: "Names for projects and groups" source: https://dev.pageseeder.com/reference/glossary/names_project_group.html description: "Explains the constraints on naming Projects and Groups" last_updated: 2026-09-05T15:10:27+10:00 tokens: ~300 --- # Project and group names ## Quick answer Only use **lowercase alpha** characters, **numbers** (top level project name can’t start with a number), **underscore** (\_), or **tilde** (~) in your [project](/reference/glossary/project.md) or [group](/reference/glossary/group.md) names.  ## Complete answer The PageSeeder architecture relies heavily on URLs. Because the project and group names express context for the URLs that represent content and functionality, it’s important the names don’t conflict with existing system URLs or the URL syntax itself. This means that: - Neither a *project* nor *group* name can contain the following characters: space, `@`, `?`, `&`, `#`, `%`, `+`, `/` - Top level project names must start with a lowercase letter. - Top top level project names cannot be the following: `admin`, `default`, `member`, `public` Also, by default, the \[project-group\] string is part of the group email address which means these additional constraints apply: - Names cannot contain any character prohibited in an email address. - No group name can end with either ‘`-silent`’ or a double hyphen ‘`--`’ because these two strings are reserved for PageSeeder email switches. --- title: "URI" source: https://dev.pageseeder.com/reference/glossary/uri.html description: "URI is a generic term for documents, folders, and URLs in PageSeeder. All URIs have unique IDs and share common features, with documents and folders managed internally and URLs pointing to external sources." last_updated: 2026-09-14T13:54:32+10:00 tokens: ~688 --- # URI URI is used as a generic term for [documents](/reference/glossary/document.md), [folders](/reference/glossary/folder.md) and [URLs](/reference/glossary/url.md) which are specific types of URIs. They all have a unique [URI ID](/reference/glossary/uri_id.md) and share many common features. ![URI: document, folder and URL](/content/images/glossary/uri_document_folder_url.svg) Documents and folders belong to an *internal host*, meaning they are managed internally by PageSeeder and their source can be found in the local database or file system. Like in a file system, folders are containers for documents. URLs belong to an *external host*; their source is defined outside of PageSeeder. [Hosts](/reference/glossary/host.md) in PageSeeder are managed by an administrator. They are automatically created when a [link](/psml/elements/element_link.md) or a URL is created. ## API In the PageSeeder API, documents, folders and URLs are represented using the [\ element](/psml/elements/element_uri.md). > **Note:** URLs might also be described as *external URIs* and documents/folders as *internal URIs.* Internal URIs are case insensitive and case preserving which means their names can contain upper and lower case letters but that these are considered equivalent, for example you can’t have files in the same folder named `abc.psml` and `ABC.psml` . This is for compatibility with operating systems such as Windows and MacOS which also have this rule. However external URIs are case sensitive, for example `https://example.org/abc` is considered a different URL to `https://example.org/ABC`.  ## PSML The URI for PSML documents is included in the [\ element](/psml/elements/element_documentinfo.md) as the [\ element](/psml/elements/element_uri.md). All other URIs can be exported with an associated PSML file descriptor (``), allowing PageSeeder to re-import any PageSeeder-specific data associated with the file. PSML documents don’t have a file descriptor as they already contain all associated data. ## Feature comparison | Feature | Document | Folder | URL | | --- | --- | --- | --- | | URI ID | Yes | Yes | Yes | | Information (label, description, etc.) | Yes | Yes | Yes | | Searchable | Yes | Yes | Yes | | Sharing | Yes | Yes | Yes | | Publishing | Yes | Yes | Yes | | Host | Internal | Internal | External | | Document ID | Yes | Yes | No | | Metadata | Yes | No | Yes | | Comments and tasks | Yes | No | Yes | | Fragments | Yes | No | Yes | | History | Yes | No | Yes | | Target of xref | Yes | No | Yes | | Validation | Yes | No\* | Metadata only | | Version | Yes | No\* | No | | Workflow | Yes | No\* | No | \* Feature can be applied to documents in the folder --- title: "DITA" source: https://dev.pageseeder.com/reference/glossary/dita.html description: "DITA is an XML standard for documentation by OASIS that shares architectural concepts with PageSeeder, including specialization, topics, maps, and keys. It uses two-stage processing to resolve linked objects and transform XML into formatting languages." last_updated: 2026-08-11T16:37:02+10:00 tokens: ~305 --- # DITA DITA is an XML standard for documentation and processing from *OASIS*. It shares some of the same architectural concepts as PageSeeder. These include: - **Specialization** – DITA is designed so that it can be extended without requiring any substantial changes to the software. (*see* [PSML](/reference/glossary/psml.md) and [document template](/reference/glossary/document_template.md)). - **Topics** – designed to be self-contained document objects assembled by maps. (*see* [document type](/reference/glossary/document_type.md)). - **Maps** – binders that organize topics for processing. (see [references document type](/reference/glossary/references_document.md)). - **Keys** – identifiers that can be used for linking and other operations. (*see* [Doc ID](/reference/glossary/document_id_docid.md) or [URI ID](/reference/glossary/uri_id.md)). DITA also uses a two-stage processing architecture to, firstly, resolve the linked objects into the correct order and hierarchy, and secondly, to transform the XML into a formatting language.  A PageSeeder [tutorial](/get_started/tutorials/how_to_import_and_export_lwdita_in_pageseeder.md) explains some of the support available for LightweightDITA or LwDITA. --- title: "Java API" source: https://dev.pageseeder.com/reference/glossary/java_api.html description: "Java API documentation reference that directs users to the Bridge resource for comprehensive information about Java API implementation and usage." last_updated: 2026-08-11T16:27:27+10:00 tokens: ~15 --- # Java API *see* [Bridge](/reference/glossary/bridge.md). --- title: "Group configuration" source: https://dev.pageseeder.com/reference/glossary/group_config.html description: "This document describes how to configure PageSeeder groups, including setting the title, name, and description. It covers naming restrictions, advanced options, and group properties for tasks, workflows, and notifications." last_updated: 2026-08-11T16:37:57+10:00 tokens: ~1069 --- # Group configuration Group configuration includes the [group](/reference/glossary/group.md) title, name, description. [Advanced options](/reference/glossary/group_config_advanced_options.md) are available, which include a welcome message for new members, and in the [group properties form](/reference/glossary/group_properties.md) values can be configured for [tasks](/reference/glossary/task.md), [workflow](/reference/glossary/workflow.md)s, [notification](/reference/glossary/notification.md) and index. These are available when the group (or project) is first created or can be accessed at any time by a [manager](/reference/glossary/manager.md) of the group. ![Group configuration page](/content/images/glossary/group_configuration_page_v60000.webp) ## Group title The **title** is a user-friendly name to display in the user interface. This is useful if the group name contains abbreviations, acronyms or underscores. The title can include punctuation and spaces to describe the group. It’s not recommended to use hyphens in group titles. - Restrict the length to 100 characters.  The **title** is a user-friendly name to display in the user interface. This is useful if the group name contains abbreviations, acronyms or underscores. The title can include punctuation and spaces to describe the group. It’s not recommended to use hyphens in group titles. > **Note:** *The title is optional and if left empty, the group name is then displayed.* ## Group name - A group name can only contain lowercase letters, numbers, underscore (`_`) or tilde (`~`). ### Group name restrictions The “URL” is the fundamental building block of PageSeeder. To avoid inconsistent, ambiguous or non-compliant URLs, projects must be named according to the following conventions: - A group name can only contain **lowercase letters**, **numbers**, **underscore** (`_`) or **tilde** (`~`). - The **name** of the group must be a unique [filename](/reference/glossary/filename.md) within the project. - Restrict the length of the project + group name to 60 characters (see following tip). - It cannot be a reserved word. Also, by default, the \[project-group\] string is part of the group email address which means these additional constraints apply: - Names cannot contain any character prohibited in an email address. - No project + group name can end with ‘`-silent`’ or contain a double hyphen ‘`--`’ because these two strings are reserved for PageSeeder email switches. > **Tip:** The name you use is the **short name** of the group. When creating groups, we ask for the short name because it’s created within the project. The **full name** of the group includes the name of its parent project, `[project]-[group]`, and is used in URLs and email addresses. The full name of the group cannot exceed 60 characters. ### Rename a group > **Warning:** Changing the group **title** is much less risky than changing the group **name** and unless people fully understand the consequences, they should **NOT** change the name. Renaming a group changes the URLs for content and functionality.  - Renaming this group moves **ALL** its documents to the new name. - Links in old emails and the group email addresses will no longer be valid. By default, all the documents under the group are re-indexed – clear the checkbox if you don’t want to re-index. ## Group description A short description is required and is often displayed as a subtitle of the group in different parts of the user interface and in emails. Characters are limited to 250. ## Advanced options These options are configurable in more than one place. All relevant information is available in the [group config – advanced options](/reference/glossary/group_config_advanced_options.md) document. ## Group properties These properties are configurable in more than one place – these same values can be set at the [project](/reference/glossary/project.md) level, and they are subject to rules of inheritance. Where in the system the changes are made, determines the scope of the update.  For example, a change at the project level affects the groups it contains. A change at group level only affects that group. *See* the [group properties](/reference/glossary/group_properties.md) document for more information. --- title: "Search facets" source: https://dev.pageseeder.com/reference/glossary/search_facets.html last_updated: 2026-09-05T17:35:22+10:00 tokens: ~97 --- # Search facets Typically a [property value](/psml/elements/element_property.md) or a [label](/reference/glossary/object_labels.md), facets work best when they are consistently applied to most of the documents in a collection. For example, if most documents include a property of  `"city"`, the value of that property can be used to navigate or categorize documents in the collection. --- title: "Status" source: https://dev.pageseeder.com/reference/glossary/status.html description: "Status represents the current state of tasks or document workflows in PageSeeder. Configurable by role, statuses follow a natural lifecycle order and indicate whether work is active or complete." last_updated: 2026-09-05T17:33:51+10:00 tokens: ~1235 --- # Status Is a value that can be given to a [task](/reference/glossary/task.md) or a document [workflow](/reference/glossary/workflow.md) to represent their current state. The status values, and [roles](/reference/glossary/role.md) that can use them, are configurable in the [group properties](/reference/glossary/group_properties.md). ## Document and task status **Workflow status** The [document status](/reference/glossary/document_status.md) applies to the workflow associated with the document. The status of the last workflow step is the status of the document. **Task status** The [task status](/reference/glossary/task_status.md) applies to comments in a discussion. The status of the last comment is the status of the task. **Status icons** As of PageSeeder v6, the icon used in the user interface for each status is configurable using the `statusIcon` and `documentStatusIcon` [group properties](/guide/configuration/properties/group_properties.md). The value associated with an icon is configured in the [group properties form](/reference/glossary/group_properties.md) in the UI, on either the **Group configuration** page or **Project configuration** page. The currently supported icons are as follows: | status-open | For active tasks and workflows (see following section) | | --- | --- | | status-resolved | For resolved tasks and workflows | | status-approved | For approved workflows | | status-closed | When tasks and workflows no longer require any action | | status-unknown | Indicates an unconfigured status | ### Status and roles The status that a member can set on a document workflow or task is based on their role within a group. Each role can be associated with a list of statuses that appear as an option. Only the Approver is able to set any document status. | Role | Permissions and workflow options | | --- | --- | | Approver | Full editorial control – can manage documents and workflows | | Manager | Limited editorial control – can manage documents and workflows | | Contributor | Limited editorial control – can edit documents and only start or end work on a document | | Reviewer | No editorial control – can only comment on documents and start or end work on a document | When [configuring status](/reference/glossary/status.md), start with the ‘Approver’ role, and remove statuses that other roles are not allowed to set. ### Status order The document or task status has a natural lifecycle order. The list of [workflow](/reference/glossary/document_status.md) or [task](/reference/glossary/task_status.md) values must be entered in the same order and reflect the order in which the document or task status is naturally changed. ## Active A status is considered ‘active’ when there are activities associated with the task or workflow. In other words, an active task or workflow indicates work to be done. PageSeeder displays active tasks and workflows by default in the user interface so that its easier to see which items require action. The default active statuses are: - **Task** – Open - **Workflow** – Initiated, In Progress, Complete ### Locked state Managers can configure which workflow status can mark a document as ‘locked’, making it uneditable until the status is changed (**workflow statuses only**). ## Default statuses Unless a manager configures the group to use a different set of statuses, PageSeeder provides default statuses following a basic approval process that relies on the [roles](/_external/ps/doc/help/help/2_terms_and_explanations/term/role.md) of group members.  - [Default task statuses](/reference/glossary/task_status.md) - [Default workflow statuses](/reference/glossary/document_status.md) ## Configuration Set in the [group properties](/reference/glossary/group_properties.md), the document workflow and task statuses depend on the role that a member has in the group. > **Tip:** The maximum number of status is 12 task and 12 workflow statuses. However, apart from the consequence for the UI, it’s harder to get users to use statuses correctly when there are too many. The recommended setting is: 1. Consider whether you really need to use custom status first. 2. If you do, keep status names short and meaningful. 3. Ideally under 8 statuses each for tasks and workflows. 4. Configure custom statuses in the [global template](/reference/glossary/global_template.md) project, so that the correct statuses appear on the **My tasks & workflows** page. ### Allowing reviewers to update workflows Only [administrators](/reference/glossary/administrator.md) can allow *reviewers* to update workflows by editing the [global properties](/guide/configuration/properties/global_properties.md). > **Note:** This cannot be enabled using the UI; the administrator must have access to the server file system to edit the *global properties*. To allow reviewers to update workflows, add the `create-workflow` value to the `reviewerEnable` property. --- title: "File size" source: https://dev.pageseeder.com/reference/glossary/file_size.html description: "This document provides guidelines for optimal file sizes in PageSeeder. PSML documents should stay under 200K, preferably 10K, to ensure smooth processing. Non-PSML binary documents over 100MB may index slowly." last_updated: 2026-08-11T16:30:20+10:00 tokens: ~445 --- # File size Size in bytes of PageSeeder documents. ## PSML documents PageSeeder doesn’t index or record the file size of PSML documents. However, when uploading documents, although there are no hard and fast rules for the ideal file size, keeping to the following recommendations ensures that documents are smoothly processable in different contexts. ### XML processors PSML documents are XML documents, so the general guidelines for XML apply. PageSeeder relies on various types of XML processors and the PSML might also be processed externally, so it is important to bear in mind the following: - Content with no or few line breaks might be difficult to handle by processors that break down the code per line – this is mostly true for text editors. - Indentation and comments increase the file size but have little real impact in terms of processing. - Markup density has a greater impact on processing, especially when the content is processed as a tree structure. In other words, it is easier to process content that is mostly plain text. ### PSML file size As a rule of thumb, for typical PSML content with regular line breaks, minimal indentation and average markup density: - Any PSML file that is larger than 500K is likely to cause problems at some point. - Keeping a PSML document under 200K or even 10K is a good idea. The size of individual fragments also matters, especially if editing or diffing is involved. - The smallest fragment is a paragraph. - Fit fragment content within a full window height of a desktop. Diffing changes might not work on large fragments. ## Other documents Non-PSML documents are stored as binary documents and are only processed by the PageSeeder indexer. Large Word or PDF documents (over 100Mb) might be slow to index. --- title: "Generator" source: https://dev.pageseeder.com/reference/glossary/generator.html description: "A generator is a server-side Java component in Berlioz that produces XML responses from content requests by implementing the ContentGenerator interface. Generators are used within services to process requests and can be named and targeted for XSLT matching." last_updated: 2026-08-11T16:31:24+10:00 tokens: ~505 --- # Generator A generator is a server-side component written in [Java](/reference/glossary/java.md) which produces an XML response from a content request. [Berlioz](/reference/glossary/berlioz.md) libraries provide a number of built-in generators for common use cases.  It must follow the `ContentGenerator` Java interface. ```js public interface ContentGenerator { void process(ContentRequest req, XMLWriter xml) throws BerliozException, IOException; } ``` Generators can have other features, for example, cacheable. ## Usage In order for a generator to be invoked, it must be part of a service. The same generator can be used in multiple services. In the context of a service, a generator can be given a name and a target to make it easier for XSLT templates to match. For example: ```xml ``` ## Examples Generators can be used to return any content. > **Note:** The following examples are only used to demonstrate how to write simple generators; they aren’t meant to be used verbatim in a production environment where other aspects such as caching and error handling should be considered. ### Current user A generator could return the user currently in the session. This kind of generator would be included in most services in the app. ```js public void process(ContentRequest req, XMLWriter xml) throws IOException { HttpSession session = req.getSession(); User user = (user)session.getAttribute("org.example.User"); if (user != null) { user.toXML(xml); } } ``` ### PSML document A generator could also be used to return an XML or [PSML](/reference/glossary/psml.md) document on the server. ```js public void process(ContentRequest req, XMLWriter xml) throws IOException { String path = req.getBerliozPath(); File file = new File(PSML_ROOT, path+".psml"); if (file.exists()) { XMLCopy.copyTo(file, xml); } } ``` --- title: "Faceted navigation" source: https://dev.pageseeder.com/reference/glossary/faceted_navigation.html description: "Faceted navigation is a methodology for organizing information using descriptors, qualifiers, and locators to optimize user navigation and information retrieval by enabling refinement based on data values." last_updated: 2026-08-11T16:23:39+10:00 tokens: ~124 --- # Faceted navigation Faceted navigation is a methodology for organizing information to optimize navigation by values in the data. An implementation consists of: - **Descriptor** (see [Index Term](https://en.wikipedia.org/wiki/Index_term)) – the fundamental object of information the user is trying to retrieve. - **Qualifier** (modifier) – a value that helps the user to refine where to look for information about the descriptor. - **Locator** – provides an absolute address for information. --- title: "OAuth scopes" source: https://dev.pageseeder.com/reference/glossary/oauth_scopes.html description: "This document describes OAuth scopes in PageSeeder v6.1+, which restrict app permissions to specific capabilities. It outlines general, group, project, and administrator scopes, explaining how each scope limits access based on member roles." last_updated: 2026-09-08T14:05:40+10:00 tokens: ~1173 --- # OAuth scopes When an app connects to PageSeeder using OAuth it acts as a PageSeeder member. In PageSeeder v6.1 and higher the app no longer has all the permissions that the member has but only those allowed by the scope specified for the app’s [OAuth client](/reference/glossary/oauth_client.md). The scope consists of one or more scopes described in the following separated by spaces, for example: `openid profile email`. - Scopes can only restrict the normal permissions the member has in PageSeeder. - Scopes cannot give the member more permissions. - If a scope is not specified for the client then the user only has non-role based permissions such as [public](/reference/glossary/group_public.md) group access, [get self](/api/services/get-self_get.md) and [create OAuth client](/api/services/oauth-clients_post.md). - For group and project scopes an app can request a scope with less permissions than the client scopes, otherwise it gets the client scopes. For example if the client has `contributor` scope the app can request `reviewer` or `guest` scope, otherwise it gets `contributor` scope. - *Any scopes other than `openid`, `profile` and `email` require PageSeeder v6.1 or higher.* > **Note:** For PageSeeder v6.1 and higher all apps that create OAuth clients should be modified to set the scopes that they require. ## General scopes | Allow these permissions | Scope | | --- | --- | | Get the member’s profile and email details during authentication | `openid` | | Get the member’s first name and family name via openid | `profile` | | Get the member’s email via openid | `email` | | Allows all the member's usual permissions. *In PageSeeder v6.1 this scope is added **automatically to OAuth clients that don’t specify the new scopes for backward compatibility but it won’t be allowed in future versions. * | `all` | ## Group scopes The group permissions and their corresponding scopes are listed in the following table. A client can only have one scope from each column and the server scope is overridden by the other scope for groups the member belongs to. - Each scope includes the permissions from the scopes above it in the table. For example if you specify `contributor` scope you also get `reviewer` and `guest` permissions. - These scopes correspond to PageSeeder member [roles](/reference/glossary/role.md). To work out what scope a particular [service](/api/services.md) requires, see the roles specified under **Permission** in the service’s API documentation. | Restrict to these permissions | In groups the member belongs to | In any group on the server (administrator members only) | | --- | --- | --- | | View and search documents, comments and tasks | `guest` | `server-guest` | | Post and reply to comments/tasks and view the group members list (plus guest permissions) | `reviewer` | `server-reviewer` | | Edit and delete their own comments/tasks, create, edit, upload, move, and archive documents (plus reviewer permissions) | `contributor` | `server-contributor` | | Add and modify the members of the group, edit or archive the comments of other members, configure the group and modify some group properties (plus contributor permissions) | `manager` | `server-manager` | | Approve and close tasks and workflows and create document versions (plus manager permissions) | `approver` | `server-approver` | ## Project scopes The project permissions and their corresponding scopes are listed in the following table. A client can only have one scope from each column and the server scope is overridden by the other scope for projects the member belongs to. | Restrict to these permissions | In projects the member belongs to | In any project on the server (administrator members only) | | --- | --- | --- | | Create groups within the project | `project-contibutor` | `server-project-contributor` | | Add and remove members of the project, configure the project and create groups within the project (plus project contributor permissions) | `project-manager` | `server-project-manager` | ## Other administrator only scopes | Allow these permissions | For this scope | | --- | --- | | Create new projects and view/rename all projects and groups. | `project-creator` | | View, add, edit, delete, move, import, export, validate project template files, view server properties and reprocess URL/non-PSML metadata | `developer` | | View, add, edit, delete accounts, view their emails, edit their memberships and impersonate members | `account-manager` | | View, add, edit, delete OAuth clients | `oauth-manager` | | View, add, edit, delete Webhooks | `webhook-manager` | | All administrator permissions. *Requires PageSeeder v6.2 or higher.* | `admin`  | --- title: "Index" source: https://dev.pageseeder.com/reference/index.html last_updated: 2026-09-08T11:44:22+10:00 tokens: ~973 --- # Index Most of PageSeeder’s data is fully indexed so that it can be used for searches, auto-complete features and quick lookups. ## What data is indexed For each group, PageSeeder indexes the following data: - Documents: - [PSML](/reference/glossary/psml.md) (content, metadata, path, properties, labels, etc.). - [PDF](/reference/glossary/pdf_documents.md) (content, metadata and path). - [Microsoft Word DOCX format](/reference/glossary/word_docx_format.md) (content, metadata and path). - HTML files (content, metadata and path). - Images (metadata and path). - Folders (path). - Individual [comments](/reference/glossary/comment.md) (content, properties and context). - [tasks](/reference/glossary/task.md) (content, properties, status, due date, priority, context). The media type of each document determines what is going to be indexed, for example, PageSeeder can extract some metadata from images and the content of PDF and Word documents, while a richer array of semantics is available for PSML documents. There is one index per group. Items belonging to multiple groups are indexed multiple times. It is possible to search multiple indexes at once through the [API](/api.md). For an overview of what data is indexed for each type of item, *see* [index fields](/reference/index/index_fields.md). ## How the index works PageSeeder’s index is powered by Apache Lucene and [PageSeeder’s Flint (open source)](/projects/flint.md). The key components for customizing the PageSeeder index are [document types](/guide/configuration/psml.md) and [labels](/reference/glossary/labels.md). These are robust tools to add content-specific semantics to the index of document collection. ### Index trigger Whenever an indexable item is created, modified or deleted, the index is updated to reflect that change. Any of these events could trigger an index update: - The document content, metadata or properties are edited. - A document is uploaded. - A document is created. - A document or comment is moved. - A document is archived or deleted. - A new post or reply to a comment. - A task changes status, content or assignment. > **Note:** A single trigger can cause multiple items to be indexed. For example, if the title of a document is changed, every document pointing to it might need to be reindexed. Similarly, any change in a shared item causes the item to be reindexed for each group it belongs to. ### Type of item Each item is processed by a different indexed template. PageSeeder dispatches each item for indexing based on their media type. For documents, the media type is based on the file extension. For example, a Word document (ending `.doc`) is processed by the `application/word` template; a PSML document (ending in `.psml`) is processed by the `application/vnd.pageseeder.psml+xml` template. When multiple templates match, the most specific is used, so recognized XML media types are processed differently from generic XML. Comments, tasks, and folders have their own set of templates. > **Obsolete:** Custom index templates which create custom fields are now obsolete and support is removed in PageSeeder v6. Custom fields can often be replaced with PSML properties or metadata. ### Index fields Each index template defines which fields are created and how. Index fields are ultimately what are used by the search engine to find matching documents. Index fields can have a number of attributes which affect how they are considered during the search. For example, numeric fields are designed to make sorting more efficient, while analyzed fields are designed for full-text searches. For more explanations about field attributes, *see* [Legend & explanations](/reference/index/legend_and_explanations.md). For a complete definition of each index field in PageSeeder, *see* [index fields definitions](/reference/index/field_definitions.md). --- title: "Introduction" source: https://dev.pageseeder.com/reference/advanced/website/introduction.html last_updated: 2026-09-05T18:45:24+10:00 tokens: ~851 --- # Introduction The Website engine is powered by Berlioz, a lightweight Web Framework which uses URI patterns to match URLs, XSLT for rendering, and XML for content. On its own, Berlioz does little more than provide a Web framework. However, the Website Engine also includes Bastille, a library that provides common functions such as caching, indexing, login and reading XML and PSML files. ## Purpose & application The Website Engine is designed to provide a high-end Web platform so that PageSeeder data can be made accessible though the Web without going through PageSeeder. The Website engine is particularly useful when there are different classes of users that need to access the same data. ### Common use case: Electronic publishing Authors and editors can use PageSeeder so that they can take advantage of the rich data modeling and editing capabilities and built-in permission model of PageSeeder. When data is ready to be published, it is pushed through the Publisher to the Website Engine so that their publications can be accessed by the general public, with dedicated layouts for various devices. > **Note:** This website follows this model: PageSeeder developers use PageSeeder for authoring and publish the documentation when it’s ready for general consumption. ## Comparison with Layout Manager The built-in Layout Manager in PageSeeder that controls the PageSeeder user interface is already highly configurable and uses a similar architecture to Berlioz, based on URI patterns and XSLT for rendering. However, it has been designed to be tightly integrated with PageSeeder and therefore imposes restrictions on the general layout, in particular the navigation and page structure. It is also difficult and possibly undesirable to turn off some of PageSeeder’s user interface components. ### When to use the layout manager The layout manager is the preferred choice when a new user interface component needs to complement the existing PageSeeder user interface such as a customized report, predefined search results, or a custom block. The layout manager is also the only option when an existing component needs to be customized, for example, by using a specific style (CSS), behavior (JavaScript), or structure (XSLT). But developers need to be careful not to customize the interface to heavily or it might become difficult to diagnose issues. It is also possible to use the layout manager to create an entirely new layout that makes intensive use of PageSeeder functions because they are directly accessible to the layout components. However, it imposes a lot of restrictions on the URLs and is best if done only by experienced developers. ### When to use the website engine It is preferable to use the website engine whenever a completely new layout needs to be provided. The Website engine has the advantage of offering a blank canvas and lower learning curve than the layout manager. If the audience for the Website has no reason to be exposed to PageSeeder, then the Website engine provides a much more flexible framework than the layout manager. If the lifecycle of the data is different from that on PageSeeder, the Website engine is also a good choice. This enables editors and authors to edit and review the content collaboratively on PageSeeder, at their convenience, and to only push the data out to the Website when the editorial review has been completed. --- title: "Deployment" source: https://dev.pageseeder.com/reference/advanced/website/deployment.html last_updated: 2026-09-14T15:44:55+10:00 tokens: ~443 --- # Deployment This document explains various options to deploy and configure your Berlioz app to your site. > **Note:** The publish script is responsible for deploying the PageSeeder data to your site. See [Integration](/reference/advanced/website/integration.md).   ## Development environment In a PageSeeder development environment, it is recommended to install a local version of [Jetty](/reference/glossary/jetty.md) which is lightweight and can be started and stopped easily. You can get Jetty from: [www.eclipse.org/jetty/](https://www.eclipse.org/jetty). ### Jetty configuration It is possible to start using Jetty with a Berlioz app right out of the box, but some straightforward configuration lets you get the most out of Jetty+Berlioz. > **Note:** If a project has been started with Berlioz Base, it should already include some sample jetty configuration files. By convention, PageSeeder developers use port 8099 in development. **Start** a jetty as: ```text java -Djetty.port=8099 -jar start.jar ``` ### Berlioz mode During development, developers need to see what is happening to their app. The convention is to use the 'dev' or 'local' modes for development. The mode allows Berlioz to load specific Berlioz global settings file and logging files. It can be specified in two ways: 1. By using the berlioz.mode system property. For example, by starting your server with `-Dberlioz.mode=dev` in the command line. 2. By only including the the mode to use in the `/WEB-INF/config` folder. ## Production environment Jetty is perfectly suitable for a production system. However, Berlioz is a simple J2EE app, so it could be deployed on any J2EE compliant server and has successfully tested on Tomcat, Glassfish, Resin and Websphere in the past. --- title: "Berlioz API" source: https://dev.pageseeder.com/reference/advanced/website/berlioz.html last_updated: 2026-09-14T15:57:57+10:00 tokens: ~209 --- # Berlioz Previously known as the Website engine, Berlioz can process data that is either live (through services) or has been published from PageSeeder to a file system. This documentation relates to Berlioz. For more information about accessing PSML documents, *see* the [Publish engine](/reference/glossary/publish_engine.md). ## Framework  The Berlioz framework can be understood by learning the role of the following modules: - Using the Berlioz servlets and filters. - XML and other [Berlioz Output](/reference/advanced/website/berlioz/berlioz_output.md). - [File organization](/reference/advanced/website/berlioz/berlioz_file_anatomy.md) and URLs for a Berlioz-powered website. - The available [generators](/reference/advanced/website/berlioz/generators.md) provided by Berlioz. - Configuration and administration options. --- title: "Getting Started" source: https://dev.pageseeder.com/reference/advanced/website/getting_started.html last_updated: 2026-09-05T18:48:35+10:00 tokens: ~232 --- # Getting Started with *Berlioz Base* To reduce the time needed for developers to become productive, *Berlioz Base, *a ready-made Web App, is available for anyone to download. ## Get Berlioz Base Berlioz Base is available from the download area. ### for Eclipse users Eclipse users can download the following package. It contains a basic Web App, all necessary Java libraries, samples, configuration files and deployment scripts. ```text berliozbase-eclipse-[version].zip ``` ### non-Eclipse users Anyone using an IDE other than Eclipse can download a ready-made Web App that can be can be deployed directly to a J2EE server or loaded into their development environment. ```text berliozbase-webapp-[version].zip ``` ## Background tour See [Berlioz file organization](/reference/advanced/website/berlioz/berlioz_file_anatomy.md) for more detail regarding how to structure an app according to PageSeeder conventions. --- title: "Berlioz file organization" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/berlioz_file_anatomy.html last_updated: 2026-09-05T15:37:12+10:00 tokens: ~565 --- # Berlioz file organization This document describes the file organization within a Berlioz-powered Website. ## Public and private files Berlioz distinguishes two types of files: | Public files | Are directly available on the Website (though they might also be protected at a different level). | | --- | --- | | Private files | Are only accessible by the application. They are located within the `/WEB-INF` directory. | There are no restrictions on how public files are organized, so this document deals essentially with how private files are organized. ## Public folder structure The following table describes the folder structures under `/` that are directly accessible by the Web Application. | **`/`** | Public files – directly accessible by the Web server. The only files directly under this folder are usually robots.txt, favicon.ico, etc. | | --- | --- | | **`/script`** | Container for all the scripts | | **`/style`** | Container for all the styles, CSS images should also be stored here | | **`/WEB-INF`** | Private files – only accessible by the Web application, see following table | ## Private folder structure The following table describes the folder structures under `/WEB-INF` that are only accessible by the Web Application. | **`/web.xml`** | Web descriptor for the application as specified by J2EE | | --- | --- | | **`/classes`** | Classes and resources used by the class loader; it might be empty if no customization is required | | **`/config`** | Configuration files for Berlioz | | `/index` | When indexing is turned on, this is where the Lucene index is located | | `/ixml` | Contains the templates used by the indexer to generate the index | | `/lib` | Libraries loaded by the web container: Must include wo-berlioz and wi-bastille. | | **`/psml`** | PSML data used by the application and generally Published by PageSeeder | | **`/xml`** | XML data used by the application | | `/xslt` | XSLT files used by Berlioz to transform the XML output of Generators; organized by output type (XSLT, RSS, ICAL, etc.) | > **Note:** From PageSeeder 5.2, it is recommended that PageSeeder documents be published using the [\ Ant task](/guide/publishing/ant_api/tasks/task_export.md) as [PSML](/reference/glossary/psml.md). --- title: "Berlioz Output" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/berlioz_output.html last_updated: 2026-09-05T15:21:30+10:00 tokens: ~1038 --- # Berlioz output Berlioz produces two types of output: | Raw XML output | XML directly produced by Berlioz as a result of invoking the generators | | --- | --- | | Transformed output | Raw XML output that has been transformed for a particular output type | ## Raw XML output Whenever a request is made, Berlioz always produces a response by: 1. Assembling the XML data produced by the generators. 2. Including a header with various metadata about the request. The XML response follows the structure below: ```xml
    ...
    ...
    ``` ### XML header The XML header returns information about the request and how Berlioz processed it. It is consistent and follows the structure below: ```xml
    [service-group] [service-id] [path-info] [context-path] [host] [port] [request-url] [query-string] [parameter-value] [parameter-value]
    ```   | service-group | The name of the group the service is part of | | --- | --- | | service-id | The ID of the service corresponding to the request | | path-info | The Berlioz path information (normally corresponds to the \* in the \ in the Web descriptor | | context-path | The context path of the application (may be empty) | | host | The host of the application server | | port | The port of the application server | | request-url | The request URL (without query string) | | query-string | The query string (part after the ? as defined in HTTP spec) | | parameter-name | The name of the HTTP or URI parameter | | parameter-value | The value of the HTTP or URI parameter | | berlioz-version | The version of Berlioz library in use | ### XML content Each generator used by the service that processed the request is wrapped in the following XML: ```xml ```   | generator-class | The full class name of the generator invoked by the service | | --- | --- | | name | The name given to this generator content as defined in the `services.xml` configuration file | | target | The target for this generator content as defined in the`services.xml` configuration file | | status | Indicates the status of the generator request; ‘ok’ if the generator could process the request without error; ‘error’ otherwise | The actual XML content inside the `` element is specific to each generator. Look at the generators API for details. ## Transformed output Generally, Berlioz serves HTML or another output such as RSS, ICAL, etc. The Berlioz servlet uses the style sheet as defined in the Web descriptor ( `/WEB-INF/web.xml` ) to transform the raw XML into the needed output. By convention, the style sheet used by Berlioz is called `global.xsl`. ### Specifying the output type The output type is specified in the XSLT style sheet using the `` element. The Berlioz servlet uses the attributes in this element to produce the correct HTTP headers. For example, to produce an HTML 4 output: ```xml ``` Or to produce a different XML: ```xml ``` --- title: "redirect" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/configuration/redirect.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~4 --- # redirect --- title: "web descriptor" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/configuration/web_descriptor.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~397 --- # Web Descriptor *`/WEB-INF/web.xml`* The Web descriptor is the general configuration used by the servlet container. For Berlioz, the main requirement is that the Berlioz servlets be declared and mapped (if necessary), so that Berlioz can be invoked and configured properly. This section describes the servlets that can or should be used with Berlioz. ## Initialization The most reliable mechanism to initialize Berlioz is to use the initialization servlet. It is responsible for the following: - Loading the global properties. - Checking the environment. - Setting up the logging. It also displays a short and useful initialization diagnostic at startup. This servlet shouldn’t be mapped. ```xml Initializer org.weborganic.berlioz.servlet.InitServlet 1 ``` ## Berlioz servlet The Berlioz servlet is responsible for: ```xml BerliozHTML org.weborganic.berlioz.servlet.BerliozServlet stylesheet /xslt/html/{GROUP}.xsl content-type text/html;charset=utf-8 3 ``` It must be mapped to a suffix or prefix. ```xml BerliozHTML *.html ``` --- title: "Berlioz config" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/configuration/config.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~631 --- # Berlioz global properties The Berlioz global configuration file is a simply a list of properties for the content generators running in Berlioz. ```text /WEB-INF/config/config-[mode].xml ``` Properties defined this way are available in the content generators using the `GlobalSettings` class. ## Predefined Berlioz properties The following properties are defined by Berlioz. | Name | Type | Default | Description | | --- | --- | --- | --- | | berlioz.http.compression | Boolean | `true` | To allow Berlioz to use HTTP compression when possible | | berlioz.http.get-via-post | Boolean | `true` | To forward HTTP POST requests to GET is there is no specific service for POST | | berlioz.http.max-age | Integer | 60 | The default maximum age in seconds of cacheable content | | berlioz.errors.handle | Boolean | `true` | To allow Berlioz handle errors (they are sent to Web container | | berlioz.errors.generator-catch | Boolean | `true` | To catch errors thrown by generators | | berlioz.xslt.cache | Boolean | `true` | To enable the caching of XSLT templates | | berlioz.xml.parse-strict | Boolean | `true` | To throw XML/XSLT errors even for warnings | | berlioz.control-key | String | "" | Specifies a control Key: a string required to use Berlioz global | ## File format There are three possible file formats for the global properties settings, they are the following: ### Simple XML file This is a minimal representation with the property name generated by concatenating the attribute with the parent element and the attribute value being the value of the property. The \<`document>` element is ignored. For example: ```xml ``` creates the following property: | Name | Value | | --- | --- | | myapp.acme | true | | myapp.test | abc | ### XML properties file This is a terse representation of the properties in XML: ```xml ``` > **Warning:**  Unless you have a specific reason, always use the Simple XML format. ### Properties file It is also possible to use a conventional properties file format. ```text myapp.test=abc myapp.acme=true ``` --- title: "logback" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/configuration/logback.html last_updated: 2026-09-14T15:56:42+10:00 tokens: ~611 --- # Logback *`/WEB-INF/config/logback-[mode].xml`* All the content generators in Berlioz/Bastille use a logging facade ([slf4j](https://www.slf4j.org/)) so that the logging framework can be left at the discretion of the developers. However, Berlioz automatically loads configuration files for the [Logback](https://logback.qos.ch/) logging framework using the XML syntax. See [Logback configuration](https://logback.qos.ch/manual/configuration.html) for details. ## Sample config Here are sample logback configurations. ### Development mode ```xml MyBerliozApp [%thread] %-5level %logger{30} - %msg %n ``` ### Production mode ```xml MyBerliozApp logs/berlioz.log true %d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n logs/berlioz-%d{yyyy-MM-dd}.%i.log 10MB ``` --- title: "services" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/configuration/services.html last_updated: 2026-08-11T16:37:07+10:00 tokens: ~1298 --- # Berlioz Services *`/WEB-INF/config/services.xml`* This configuration file is responsible for mapping services to some URL patterns and one or more [Generators](/reference/advanced/website/berlioz/generators.md). ## Service configuration All Berlioz services are defined in the service configuration file: ```xml ... ... ``` ## Grouping Services Services can be grouped together based on the type, format or structure they produce. This can be used to use a different set of templates or simply to group them logically: ```xml ``` Examples of grouping include: - `default` – to all services used by default. - `dialog` – for services that produce HTML for dialog boxes. - `ajax` – for services to be used exclusively in ajax. - `admin` – for admin related services. > **Note:** The `bzadmin` group is a commonly used for providing a set of Berlioz administration services.  ### DTD ```xml ``` ## Defining a Service A Berlioz service associates one or more URL patterns to a set of generators. When a URL matches the one of the patterns, the generators are invoked in sequence. At its simplest, a service can be defined as: ```xml ``` But a service can: match different patterns, include several generators that might accept parameters, provide some cache control information or some specific conditions to return an error code. So a more complete definition is: ```xml ``` ### URL Pattern A Berlioz service is invoked if the URL matches any one of the URL patterns defined for that service. The URL pattern attempts to match the wildcard part of the Berlioz Servlet mapping in the Web descriptor (`/WEB-INF/web.xml`). In other words, it ignores the suffix or prefix in use for the mapping. | If the Servlet Mapping is ... | The URL Pattern should match ... | | --- | --- | | /html/\* | Anything after `/html/` | | `*.html` | Anything before `.html` | For details on the syntax for the patterns, *see* [URI pattern](/reference/glossary/uri_pattern.md). Some examples of patterns: | Pattern | Matching URL (excluding prefix/suffix) | | --- | --- | | /home | /home | | /\{+path\} | /acme/test /123 /hello | | /\{item\}/\{id\} | /book/978-0-9802479-8-5 | Any matching URI variable is made available to the generators and can be used as a parameter. ### Generator The generators must implement the Java `ContentGenerator` interface to be accepted; otherwise, Berlioz throws an error. The following attributes can be specified: | name | description | Required | | --- | --- | --- | | class | The fully qualified java class to load for this generator | Yes | | name | A short hand name for the generator in the service | No | | target | A target for the generated for content (see below) | No |   #### Parameters If a generator takes parameters, they can be specified using the `` element. Dynamic values can be specified using curly brackets. This can be useful to construct parameter values from HTTP query parameters or resolved URL variables. > **Note:** There is no need to declare a parameter if it can be directly inherited from the HTTP query parameters or the URL. Berlioz automatically forwards them. But the element can be used to override inherited parameters. Examples: - `` - `` - ``   ## Response code The purpose of the `` element is to ensure that the status code for the HTTP response is meaningful. This is only useful if a service invokes multiple generators. Some generators might be used to generate related content such as the navigation, headers etc. and should not cause the service to return an error if they fail. This element can be specified at the different levels, so that if the same mechanism is used, it doesn’t have to be declared individually for each service. Examples: - `` - `` --- title: "Berlioz Configuration" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/configuration.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~106 --- # Berlioz configuration In addition to the Web descriptor, Berlioz relies on the following configuration files:  | Name | Location | Usage | | --- | --- | --- | | `web.xml` | `/WEB-INF` | Web descriptor | | `services.xml` | `/WEB-INF/config` | Map generators to services | | `config-[mode].xml` | `/WEB-INF/config` | A global configuration file | | `logback-[mode].xml` | `/WEB-INF/config` | Logback configuration file | --- title: "Generators" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators.html last_updated: 2026-09-05T15:37:58+10:00 tokens: ~154 --- # Berlioz Generators The generators provided by Berlioz all implement the `ContentGenerator` *Java* interface. Berlioz provides a few core generic generators. More useful generators are included in Bastille. Bastille is a Java library that depends on other libraries such as Flint, Lucene, and EHCache. It provides basic generators to perform more specific functions including indexing & searching, parsing XML and PSML files, and managing the cache. > **Note:** Bastille is now open source! From Bastille 0.8, the package names have been changed from `com.weborganic.bastille` to `org.weborganic.bastille`.   --- title: "Generator: ClearCache" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.cache.ClearCache.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~397 --- # Generator: ClearCache | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.cache.ClearCache | | Version: | 24 November 2011 | | Library: | Bastille | | Cacheable: | No | | Generated: | 2012-12-21 | ## Description Clears the cache content. If a cache name is specified, then only this cache is cleared; otherwise, all caches are cleared. ### Configuration This generator does not require any specific configuration. > **Note:** Ensure that your caching library is setup properly, either programmatically and/or using the `ehcache.xml` file in your classpath. ### Parameters The `name` parameter can be used to specify a particular cache to clear. All caches are cleared if no specific cache name is given. ### Returned XML This generator returns the following XML: ```xml ``` ### Error Handling This generator fails and throws an error if an error is reported by the cache engine. ### Security This generator should generally be protected and require authentication by an administrator since it potentially affects the performance of ALL generators. It is also recommended that this generator be associated with a service using the *POST* HTTP method. ### Usage To clear a specific cache: ```xml ```  To clear all caches: ```xml   ``` --- title: "Generator: CallService" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.pageseeder.CallService.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~483 --- # Generator: CallService | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.pageseeder.CallService | | Version: | 0.6.7 - 3 June 2011 | | Library: | Bastille | | Cacheable: | No | | Generated: | 2012-12-21 | ## Description A generator than can connect to PageSeeder and call a PageSeeder service. ### Configuration There is no configuration directly required with this generator; however, since this generator connects to PageSeeder, the [bastille pageseeder properties](/reference/sample_code/berlioz.md) must setup in the [Global Configuration](/reference/advanced/website/berlioz/configuration/config.md) to define which server to connect to. ### Parameters The following parameter is required: | ps-service | The url path after `/ps/service` of the service to connect to. For example: `/groups/acme-forum/comments` (required) | | --- | --- | The following parameters can also be specified: | ps-method | The HTTP method to use to connect to PageSeeder, must be either `GET`\|POST; `GET` is the default if this parameter is not specified | | --- | --- | Any other parameter is automatically transmitted to the PageSeeder service. ### Returned XML #### Error handling If an error occurs while invoking the service, the XML also includes the `error` and `message` attributes. The HTTP status should correspond to an HTTP error code. ```xml ``` ### Permission This generator attempts to use the user currently logged in. If the current user is not a PageSeeder user or if there is no user currently logged in, the request is made anonymously. ### Usage This is a generic generator; use this generator when no other specialized generator provides the same functionality. --- title: "Generator: GetFolderOverview" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.xml.GetFolderOverview.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~214 --- # Generator: GetFolderOverview | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.xml.GetFolderOverview | | Version: | 0.6.35 - 21 May 2012 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description Returns an overview of the folder by Berlioz path. The overview is generated from the first header and the first paragraph from each PageSeeder XML. ### Configuration No configuration is required for this generator. ### Parameters No parameters are necessary. ### Returned XML ```xml [firsttitle] [firstpara] ... ``` ### Deployment ```xml ``` --- title: "Generator: FulltextSearch" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.flint.FulltextSearch.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~64 --- # Generator: FulltextSearch | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.flint.FulltextSearch | | Version: | 0.7.4 - 18 October 2012 | | Library: | Bastille | | Cacheable: | No | | Generated: | 2012-12-21 | ## Description --- title: "Generator: GetMemberGroups" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.pageseeder.GetMemberGroups.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~778 --- # Generator: GetMemberGroups | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.pageseeder.GetMemberGroups | | Version: | 0.8.1 - 18 December 2012 | | Library: | Bastille | | Cacheable: | No | | Generated: | 2012-12-21 | ## Description A generator that returns the list of projects and groups a user is a member of. ### Configuration There is no configuration associated with this generator. ### Parameters No parameter is required; however, the user does need to be logged in as a PageSeeder user. ### Returned XML This generator invokes a PageSeeder service and returns the content of this service verbatim. The content is wrapped in: ```xml ``` The PageSeeder service returns the projects and group in hierarchical form.  ```xml ``` #### Error handling  If an error occurs while invoking the service, the XML also includes the `error` and `message` attributes. The HTTP status should correspond to an HTTP error code. ```xml ``` #### Sample output ```xml ``` ### Usage To use this generator in Berlioz (in `/WEB-INF/config/services.xml`):  ```xml ``` --- title: "Generator: GetXMLFileFromRelativePathParameter" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.xml.GetXMLFileFromRelativePathParameter.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~217 --- # Generator: GetXMLFileFromRelativePathParameter | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.xml.GetXMLFileFromRelativePathParameter | | Version: | 8 July 2011 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description This generator returns the static content by providing relative path parameter. Only return the content under the website root folder, by default ( WEB-INF/xml ). ### Parameter - `relative-path` – defines the request relative path from the berlioz website root. Use the element `` to define `relative-path` in server.xml. Sample Berlioz config: ```xml ``` --- title: "Generator: GetXMLFromPath" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.xml.GetXMLFromPath.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~205 --- # Generator: GetXMLFromPath | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.xml.GetXMLFromPath | | Version: | 0.6.8 - 29 June 2011 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description This generator returns the content of an XML file from the specified path. #### Parameters This generator requires a `path` parameter. The path parameter **must** be a relative path from within the XML root folder to an XML file without the extension. For example, if the path is `a/b/c`, the generator attempts to load the file `[webapp]/WEB-INF/xml/a/b/c.xml`. #### Services ```xml ``` --- title: "Generator: GetIndexTerms" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.flint.GetIndexTerms.html description: "List the terms from the index" last_updated: 2026-08-07T17:09:54+10:00 tokens: ~72 --- # Generator: GetIndexTerms | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.flint.GetIndexTerms | | Version: | 0.7.4 - 19 October 2012 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description List the terms from the index. --- title: "Generator: GetCachingOverview" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.cache.GetCachingOverview.html description: "Display a summary of the information about the cache in the application" last_updated: 2026-08-07T17:09:54+10:00 tokens: ~83 --- # Generator: GetCachingOverview | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.cache.GetCachingOverview | | Version: | 24 November 2011 | | Library: | Bastille | | Cacheable: | No | | Generated: | 2012-12-21 | ## Description Display a summary of the information about the cache in the application. --- title: "Generator: GetContentFolderInfoAuto" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetContentFolderInfoAuto.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~635 --- # Generator: GetContentFolderInfoAuto | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.psml.GetContentFolderInfoAuto | | Version: | 0.7.5 - 25 October 2012 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description Returns information about a folder from the PSML *content* folder using the Berlioz path. This generator behaves as if it were using the Berlioz path as `path` parameter of the [Generator: GetContentFolderInfo](/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetContentFolderInfo.md) generator. The Berlioz path depends on the mapping of the Berlioz servlet in the Web descriptor (`web.xml`) and usually corresponds to the value of the `*` in the path component of a matching URL. The Berlioz path is then appended to the `/content` folder with the added `.psml` extension to identify the file to load. | Mapping | URL | Path | Folder | | --- | --- | --- | --- | | /html/\* | /html/test/acme | /test/acme | /content/test/acme | | \*.html | /test/acme.html | /test/acme | /content/test/acme | | \*.html | /test.html?x=123#abc | /test | /content/test | | \*.xml | /test/acme.xml | /test/acme | /content/test/acme | ### Configuration No configuration is required. The root of the PSML folder can be configured using the global property `bastille.psml.root` which can be either an absolute path or a relative path from the global repository. By default, the PSML root is set to `psml` which usually corresponds to the `/WEB-INF/psml` folder of your Web app. ### Parameters This generator does not accept or require any parameter. ### Returned XML The top level element is always the requested folder. Its child elements are either sub folders or files within that folder. ```xml ``` ### Error handling #### Folder does not exist If the folder cannot be found this generator returns the following: ```xml ``` ### Usage ```xml ``` --- title: "Generator: GetResultSuggestions" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.flint.GetResultSuggestions.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~143 --- # Generator: GetResultSuggestions | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.flint.GetResultSuggestions | | Version: | 0.6.0 - 26 July 2010 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description Returns the search results suggestions from a list of terms. Parameters for this generator are: - `term` – a space-separated list of terms to lookup. - `field` – the comma-separated list of the fields to lookup. - `predicate` – a query to use as a condition (for example, type of Lucene document, etc.). --- title: "Generator: GetUser" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.security.GetUser.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~338 --- # Generator: GetUser | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.security.GetUser | | Version: | 0.6.27 - 29 November 2011 | | Library: | Bastille | | Cacheable: | No | | Generated: | 2012-12-21 | ## Description Returns the XML for the user currently logged in. The actual user implementation depends on the authentication mechanism. A user is considered to be logged in if a `User` instance can be found in the current session; this happens when the user logs in. ### Configuration There is no configuration associated with this generator; however, the login and logout servlets must be configured in the Web descriptor ( `/WEB-INF/web.xml`). ### Parameters There is no parameter. ### Returned XML This generator only returns the user data if the user is logged in. Here is a sample XML of a PageSeeder user: ```xml 123 jsmith John Smith No Email ``` *(All elements are mandatory)* When the user is not logged in, this generator returns: ```xml ``` ### Usage To use this generator in Berlioz (in `/WEB-INF/config/services.xml`): ```xml ``` --- title: "Generator: PredicateSearch" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.flint.PredicateSearch.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~271 --- # Generator: PredicateSearch | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.flint.PredicateSearch | | Version: | 0.6.20 - 26 September 2011 | | Library: | Bastille | | Cacheable: | No | | Generated: | 2012-12-21 | ## Description Performs a search using a Lucene predicate. > **Note:** This generator is not designed to be used for production but can be useful during development to determine which query should be used. ### Configuration This generator does not require any direct configuration but only works if an index has been configured. ### Parameters This generator requires the following parameter: | predicate | The Lucene predicate to use for the query | | --- | --- | Optional parameters include: | Index | The name of the index to search. It is possible to search multiple indexes at once by specifying a comma-separated list of index names. | | --- | --- | | Page | The result page, the page size is 1000 results per page | ### XML output The XML output is a basic Flint query response. Search results are sorted by relevance. --- title: "Generator: LookupFuzzyTerms" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.flint.LookupFuzzyTerms.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~101 --- # Generator: LookupFuzzyTerms | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.flint.LookupFuzzyTerms | | Version: | 0.6.0 - 26 July 2010 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description Lookup the fuzzy terms for the specified term. This is a straightforward and efficient generator that is most useful for use with autocomplete. --- title: "Generator: GetCacheElements" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.cache.GetCacheElements.html description: "Display the elements in the cache" last_updated: 2026-08-07T17:09:54+10:00 tokens: ~72 --- # Generator: GetCacheElements | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.cache.GetCacheElements | | Version: | 24 November 2011 | | Library: | Bastille | | Cacheable: | No | | Generated: | 2012-12-21 | ## Description Display the elements in the cache. --- title: "Generator: GetConfigFile" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetConfigFile.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~779 --- # Generator: GetConfigFile | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.psml.GetConfigFile | | Version: | 0.7.5 - 25 October 2012 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description This generator returns the content of a PSML file using the specified `path` parameter from the PSML config folder. The config folder is the folder named ‘config’ under the PSML root folder. The purpose of the config folder is to store all documents that don’t form part of the main content of the website and should not be viewed on their own. These include: - The navigation (see [Generator: GetNavigation](/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetNavigation.md)). - Headers and footers. - Asides. Files which can be viewed on their own generally go in the *content* folder; they can be retrieved with the [Generator: GetContentFile](/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetContentFile.md) generator. ### Configuration No configuration is required. The root of the PSML folder can be configured using the global property `bastille.psml.root`, which can be either an absolute path or a relative path from the global repository. By default, the PSML root is set to “psml”, which usually corresponds to the `/WEB-INF/psml` folder of your Web app. ### Parameters This generator requires a `path` parameter. The path parameter **must** be a relative path from within the PSML config folder to a PSML file without the extension. > **Note:** If the path resolves to a location outside the PSML folder, this generator wont read the file. ### Returned XML Like most PSML generators returning a PSML file, this generator wraps the content of the file with the `` element. The `@base` attribute is the relative path from the PSML root to the folder. Since references (xrefs and image sources) in PSML are relative, this attribute can be used to construct the path to images or cross-referenced documents. See the following: ```xml ``` ### Error handling If the file cannot be found or read, this generator returns the following: ```xml Unable to find file: [path] ``` The status of this generator is set to ‘NOT\_FOUND’. ### Usage Following is the code to include in the [services](/reference/advanced/website/berlioz/configuration/services.md): ```xml ``` Note that it is equivalent to: ```xml ``` #### Example: header ```xml ``` --- title: "Generator: GetErrorDetails" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.berlioz.generator.GetErrorDetails.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~493 --- # Generator: GetErrorDetails | Property | Value | | --- | --- | | Class name: | org.weborganic.berlioz.generator.GetErrorDetails | | Version: | Berlioz 0.9.0 - 13 October 2011 | | Library: | Berlioz | | Cacheable: | No | | Generated: | 2012-12-21 | ## Description Generates no content. This content generator is useful to display information about errors, when a Berlioz service is used for error handling. ### Configuration There is no configuration directly associated with this generator. However, since the purpose is to display servlet error details, the services using this generator should have their URLs mapped in the Web descriptor for error catching. For example: ```xml 404 /not-found.html ``` ### Parameters This generator does not use and require any parameter. ### Attributes This generator tries to retrieve values from the standard Servlet error request attributes. ### Returned XML This generator does not have any content, so the XML content is always empty. Since Berlioz always wraps generators’ content, the final XML is always: ```xml Not Found Not Found /fdhvjfdls ``` *Note: since this generator does produce any data, the return status is always `ok`.* ### Usage To use this generator in Berlioz (in `/WEB-INF/config/services.xml` ): ```xml ``` ### Etag This generator is not cacheable. --- title: "Generator: GetIndexStats" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.flint.GetIndexStats.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~74 --- # Generator: GetIndexStats | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.flint.GetIndexStats | | Version: | 0.7.4 - 19 October 2012 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description Print some information about the index --- title: "Generator: LogoutGenerator" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.security.LogoutGenerator.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~70 --- # Generator: LogoutGenerator | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.security.LogoutGenerator | | Version: | 0.6.8 - 7 June 2011 | | Library: | Bastille | | Cacheable: | No | | Generated: | 2012-12-21 | ## Description A generator to Logout. --- title: "Generator: ProcessContentFileAuto" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.ProcessContentFileAuto.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~627 --- # Generator: ProcessContentFileAuto | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.psml.ProcessContentFileAuto | | Version: | 0.7.7 - 25 October 2012 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description This generator returns the content of a PSML file using the Berlioz path from content folder and processes transclusions. This generator behaves exactly the same as the [Generator: GetContentFileAuto](/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetContentFileAuto.md) generator, except that it transcludes documents inline inside block xrefs of type ‘transclude’. > **Note:** This generator does not *yet* support transcluded content and this version transcludes the entire document regardless of the fragment.  If the `` element has a level element, the heading levels are adjusted accordingly. ### Configuration No configuration is required. The root of the PSML folder can be configured using the global property `bastille.psml.root` which can be either an absolute path or a relative path from the global repository. By default, the PSML root is set to `psml` which usually corresponds to the `/WEB-INF/psml` folder of your Web app. ### Parameters This generator does not accept or require any parameter. ### Returned XML Like most PSML generators returning a PSML file, this generator wraps the content of the file with the `` element. The `@base` attribute is the relative path from the PSML root to the folder. Since references (xrefs and image sources) in PSML are relative, this attribute can be used to construct the path to images or cross-referenced documents. See the following: ```xml ``` Transcluded content looks like: ```xml ``` ### Error handling If the file cannot be found or read, this generator returns the following: ```xml Unable to find file: [path] ``` The status of this generator is set to ‘NOT\_FOUND’. ### Usage Following is the code to include in the [services](/reference/advanced/website/berlioz/configuration/services.md): ```xml ``` --- title: "Generator: GetContentFile" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetContentFile.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~663 --- # Generator: GetContentFile | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.psml.GetContentFile | | Version: | 0.7.5 - 25 October 2012 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description This generator returns the content of a PSML file using specified `path` parameter from the PSML *content* folder. The content folder is the folder named ‘content’ under the PSML root folder. The purpose of the content folder is to include the files which can be viewed as part of the main content of the Website, that is, they could be addressable or viewed on their own on the site. > **Note:** It is perfectly possible to store and access files outside the `/content` folder as part of the main content. But you need to use the [GetFile](/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetFile.md) generator instead. ### Configuration No configuration is required. The root of the PSML folder can be configured using the global property `bastille.psml.root`, which can be either an absolute path or a relative path from the global repository. By default, the PSML root is set to `psml`, which usually corresponds to the `/WEB-INF/psml` folder of your Web app. ### Parameters This generator requires a `path` parameter. The path parameter **must** be a relative path from within the PSML content folder to a PSML file without the extension. > **Note:** If the path resolves to a location outside the PSML folder, this generator won’t read the file. ### Returned XML Like most PSML generators returning a PSML file, this generator wraps the content of the file with the `` element. The `@base` attribute is the relative path from the PSML root to the folder. Since references (xrefs and image sources) in PSML are relative, this attribute can be used to construct the path to images or cross-referenced documents. See the following: ```xml ``` ### Error handling If the file cannot be found or read, this generator returns the following: ```xml Unable to find file: [path] ``` The status of this generator is set to ‘NOT\_FOUND’. ### Usage ```xml ``` Note that it is equivalent to: ```xml ``` --- title: "Generator: CheckTemplates" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.flint.CheckTemplates.html description: "Checks that the templates are valid" last_updated: 2026-08-07T17:09:54+10:00 tokens: ~73 --- # Generator: CheckTemplates | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.flint.CheckTemplates | | Version: | 0.7.4 - 19 October 2012 | | Library: | Bastille | | Cacheable: | No | | Generated: | 2012-12-21 | ## Description Checks that the templates are valid. --- title: "Generator: GetBreadCrumbFromBerliozPath" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.xml.GetBreadCrumbFromBerliozPath.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~324 --- # Generator: GetBreadCrumbFromBerliozPath | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.xml.GetBreadCrumbFromBerliozPath | | Version: | 14 July 2011 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description This generator returns the breadcrumb status based on Berlioz path. ### Returned XML ```xml ``` ### The example cases If Berlioz path is ‘Ping/pong’, it looks at the status of ‘Ping.xml’, ‘Ping’ folder, ‘Ping/pong.xml’ and ‘Ping/pong’ folder    Ping.xml doesn’t exist. Ping folder exists. The return XML is: ```xml   ```   Ping.xml doesn’t exist. Ping folder doesn’t exist. The return XML is: ```xml   ```   Ping.xml does exist. Ping folder doesnt exist. The return XML is: ```xml   ```   Ping.xml exists. Ping exists. The return XML is: ```xml ``` --- title: "Generator: GetServices" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.berlioz.generator.GetServices.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~103 --- # Generator: GetServices | Property | Value | | --- | --- | | Class name: | org.weborganic.berlioz.generator.GetServices | | Version: | Berlioz 0.9.0 - 13 October 2011 | | Library: | Berlioz | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description Returns the current service configuration as XML. This content generator is mostly useful for developers to see how the services are configured. --- title: "Generator: GetLiveServices" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.berlioz.generator.GetLiveServices.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~353 --- # Generator: GetLiveServices | Property | Value | | --- | --- | | Class name: | org.weborganic.berlioz.generator.GetLiveServices | | Version: | Berlioz 0.9.3 - 9 December 2011 | | Library: | Berlioz | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description Returns the current service configuration as XML. This content generator is mostly useful for developers to see how the services are configured. ### Configuration There is no configuration associated with this generator. ### Parameters This generator does not use and require any parameter. ### Returned XML This generator contains the `/WEB-INF/config/services.xml` used by Berlioz to load its services. ```xml ... ``` The formatting of the XML might differ from the actual files as it is parsed before being returned; the XML declaration and comments are stripped. ### Error handling If there is any problem parsing or reading the file, the XML returned is: ```xml ``` The error details are only shown if available. ### Usage To use this generator in Berlioz (in `/WEB-INF/config/services.xml` ): ```xml ``` ### Etag This generator uses a weak etag based on the name, length and last modified date of the file. --- title: "Generator: NoContent" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.berlioz.generator.NoContent.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~323 --- # Generator: NoContent | Property | Value | | --- | --- | | Class name: | org.weborganic.berlioz.generator.NoContent | | Version: | Berlioz 0.9.0 - 13 October 2011 | | Library: | Berlioz | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description Generates no content. This content generator is useful for when the XML header already contains enough information for the purpose of application. This generator can also be useful to be picked up by the XSLT, even if no content is required. ### Configuration There is no configuration associated with this generator. ### Parameters There are no parameters. ### Returned XML This generator does not have any content, so the XML is generally empty. Since Berlioz always wraps generators’ content, the final XML is: ```xml ``` *Note: since this generator does produce any data, the return status is always `ok`.* ### Usage To use this generator in Berlioz (in `/WEB-INF/config/services.xml`): ```xml ``` ### Etag The Etag for this generator is always `nocontent`. --- title: "Generator: CallServlet" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.pageseeder.CallServlet.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~440 --- # Generator: CallServlet | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.pageseeder.CallServlet | | Version: | 0.6.7 - 3 June 2011 | | Library: | Bastille | | Cacheable: | No | | Generated: | 2012-12-21 | ## Description A generator than can connect to PageSeeder and call a servlet. ### Configuration There is no configuration directly required with this generator; however, since this generator connects to PageSeeder, the `bastille.pageseeder` properties must be setup to define which server to connect to. ### Parameters The following parameter is required: | ps-servlet | The name of the servlet to connect to (required) | | --- | --- | The following parameters can also be specified: | ps-method | The HTTP method to use to connect to PageSeeder, must be either `GET`\|POST; `GET` is the default if this parameter is not specified | | --- | --- | Any other parameter is automatically transmitted to the PageSeeder servlet. ### Returned XML Undocumented XML response #### Error handling If an error occurs while invoking the servlet, the XML also includes the `error` and `message` attributes. The HTTP status should correspond to an HTTP error code. ```xml ``` ### Permission This generator attempts to use the user currently logged in. If the current user is not a PageSeeder user or if there is no user currently logged in, the request is made anonymously. ### Usage This is a generic generator; use this generator when no other specialized generator provides the same functionality. --- title: "Generator: GetGlobalConfig" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.berlioz.generator.GetGlobalConfig.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~123 --- # Generator: GetGlobalConfig | Property | Value | | --- | --- | | Class name: | org.weborganic.berlioz.generator.GetGlobalConfig | | Version: | Berlioz 0.9.0 - 13 October 2011 | | Library: | Berlioz | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description Returns the global properties as XML. ```xml ... ``` --- title: "Generator: GetFileInfo" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.xml.GetFileInfo.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~421 --- # Generator: GetFileInfo | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.xml.GetFileInfo | | Version: | 0.6.35 - 21 May 2012 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description Returns information about the file specified by the path info in the public folder. If the file is a directory, lists the files corresponding to the specified directory. ### Configuration No configuration is required for this generator. ### Parameters No parameters are needed for this generator. ### Returned XML ```xml ``` For a folder: ```xml ``` If the file does not exist: ```xml ``` #### File attributes - `name` – the name of the file (including extension). - `path` – the path from the root of the website. - `type` – is either ‘file’ or ‘folder’. - `length` – the full length of the file. - `modified` – the last modified date and time of the file using ISO8601. - `media-type` – the media type of the file based on the file extension as specified in Berlioz, if the file extension does not map to any media type returns “application/octet-stream”. - `content-type` – same as media type (deprecated). - `status` – equals ‘not-found’. Since Version 0.6.1, this generator returns both the `media-type` and `content-type` attributes. Use `media-type`. --- title: "Generator: GetContentFolderInfo" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetContentFolderInfo.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~590 --- # Generator: GetContentFolderInfo | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.psml.GetContentFolderInfo | | Version: | 0.7.5 - 25 October 2012 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description Returns information about a folder from the PSML content folder using the specified `path` parameter. The content folder is the folder named ‘content’ under the PSML root folder. This generator is useful to provide a tree of all the files within a folder. ### Configuration No configuration is required. The root of the PSML folder can be configured using the global property `bastille.psml.root`, which can be either an absolute path or a relative path from the global repository. By default, the PSML root is set to `psml`, which usually corresponds to the `/WEB-INF/psml` folder of your Web app. ### Parameters This generator requires a `path` parameter. The path parameter **must** be a relative path from within the PSML content folder to a PSML file without the extension. > **Note:** If the path resolves to a location outside the PSML folder, this generator won’t load the content. ### Returned XML The top level element is always the requested folder. Its child elements are either sub folders or files within that folder. ```xml ``` ### Error handling #### Folder does not exist If the folder cannot be found, this generator returns the following: ```xml ``` #### Missing path parameter If the path parameter is not specified, this generator sets the status to `BAD_REQUEST` and returns the following: ```xml ``` ### Usage ```xml ``` --- title: "Generator: GetFolderOverview" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetFolderOverview.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~588 --- # Generator: GetFolderOverview | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.psml.GetFolderOverview | | Version: | 0.6.35 - 21 May 2012 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description Returns an overview of all the PSML files within a folder using the specified `path` parameter. An overview is created by parsing every PSML file and extracting the following information from its content: - Title, using the first `` element. - Summary, using the first `` element. - Properties, using all the `` elements. This generator is useful to provide some of the PSML information and properties from a set of PSML files rather than only use their file names. ### Configuration No configuration is required. The root of the PSML folder can be configured using the global property `bastille.psml.root` which can be either an absolute path or a relative path from the global repository. By default, the PSML root is set to `psml` which usually corresponds to the `/WEB-INF/psml` folder of your Web app. ### Parameters This generator requires a `path` parameter. The path parameter **must** be a relative path from within the PSML root folder to a PSML file without the extension. > **Note:** If the path resolves to a location outside the PSML folder, this generator won’t load the content. ### Returned XML The top level element is always the requested folder. Its child elements are either sub folders or files within that folder. ```xml [title] [summary] ``` ### Error handling #### Folder does not exist If the folder cannot be found, this generator sets the status to `NOT_FOUND` and no content. #### Missing path parameter If the path parameter is not specified, this generator sets the status to `BAD_REQUEST` and returns the following: ```xml ``` ### Usage ```xml ``` --- title: "Generator: GetContentFileAuto" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetContentFileAuto.html last_updated: 2026-09-05T15:37:58+10:00 tokens: ~658 --- # Generator: GetContentFileAuto | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.psml.GetContentFileAuto | | Version: | 0.7.5 - 25 October 2012 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description This generator returns the content of a PSML file using the Berlioz path from the content folder. This generator behaves as if it were using the Berlioz path as `path` parameter of the [GetContentFile](/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetContentFile.md) generator The Berlioz path depends on the mapping of the Berlioz servlet in the Web descriptor (`web.xml`) and usually corresponds to the value of the `*` in the path component of a matching URL. The Berlioz path is then appended to the `/content` folder with the added `.psml` extension to identify the file to load. | Mapping | URL | Path | File | | --- | --- | --- | --- | | /html/\* | /html/test/acme | /test/acme | /content/test/acme.psml | | \*.html | /test/acme.html | /test/acme | /content/test/acme.psml | | \*.html | /test.html?x=123#abc | /test | /content/test.psml | | \*.xml | /test/acme.xml | /test/acme | /content/test/acme.psml | ### Configuration No configuration is required. The root of the PSML folder can be configured using the global property `bastille.psml.root` which can be either an absolute path or a relative path from the global repository. By default, the PSML root is set to `psml` which usually corresponds to the `/WEB-INF/psml` folder of your Web app. ### Parameters This generator does not accept or require any parameter. ### Returned XML Like most PSML generators returning a PSML file, this generator wraps the content of the file with the `` element. The `@base` attribute is the relative path from the PSML root to the folder. Since references (xrefs and image sources) in PSML are relative, this attribute can be used to construct the path to images or cross-referenced documents. See the following: ```xml ``` ### Error handling If the file cannot be found or read, this generator returns the following: ```xml Unable to find file: [path] ``` The status of this generator is set to ‘NOT\_FOUND’. ### Usage Following is the code to include in the [services](/reference/advanced/website/berlioz/configuration/services.md): ```xml ``` --- title: "Generator: GetFile" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetFile.html description: "Returns a file from the path" last_updated: 2026-08-07T17:09:54+10:00 tokens: ~546 --- # Generator: GetFile | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.psml.GetFile | | Version: | 0.7.0 - 6 October 2012 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description This generator returns a file specified `path` parameter from the PSML root folder. This is the most generic generator to retrieve PSML data. For convenience, two similar generators are provided: - [Generator: GetContentFile](/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetContentFile.md) to retrieve files in the `/content` folder. - [Generator: GetConfigFile](/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetConfigFile.md) to retrieve files in the `/config` folder. ### Configuration The root of the PSML folder can be configured using the global property `bastille.psml.root` which can be either a absolute path or a relative path from the global repository. By default, the PSML root is set to `psml`. For example: ```xml ``` ### Parameters This generator requires a `path` parameter. The path parameter **must** be a relative path from within the PSML root folder to a PSML file without the extension. > **Note:** If the path resolves to a location outside the PSML folder, this generator won’t read the file. ### Returned XML Like most PSML generators returning a PSML file, this generator wraps the content of the file with the `` element. The `@base` attribute is the relative path from the PSML root to the folder. Since references (xrefs and image sources) in PSML are relative, this attribute can be used to construct the path to images or cross-referenced documents. See the following: ```xml ``` ### Error handling If the file cannot be found or read, this generator returns the following: ```xml Unable to find file: [path] ``` The status of this generator is set to ‘NOT\_FOUND’. --- title: "Generator: GetCacheInfo" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.cache.GetCacheInfo.html description: "Display information about the cache" last_updated: 2026-08-07T17:09:54+10:00 tokens: ~71 --- # Generator: GetCacheInfo | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.cache.GetCacheInfo | | Version: | 24 November 2011 | | Library: | Bastille | | Cacheable: | No | | Generated: | 2012-12-21 | ## Description Display information about the cache. --- title: "Generator: GenerateIndex" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.flint.GenerateIndex.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~150 --- # Generator: GenerateIndex | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.flint.GenerateIndex | | Version: | 0.7.4 - 18 October 2012 | | Library: | Bastille | | Cacheable: | No | | Generated: | 2012-12-21 | ## Description List the files corresponding to the specified directory. This content generator is not cacheable because it causes the index to be updated using a separate thread. The index must be located in the ‘/index’ directory. The IXML style sheet must be ‘ixml/default.xsl’. Note: access to this generator should be made secure in the Web descriptor. --- title: "Generator: GetContentFolderOverviewAuto" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetContentFolderOverviewAuto.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~776 --- # Generator: GetContentFolderOverviewAuto | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.psml.GetContentFolderOverviewAuto | | Version: | 0.7.5 - 25 October 2012 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description Returns an overview of all the PSML files within a PSML content folder using the Berlioz path. An overview is created by parsing every PSML file and extracting the following information from its content: - Title, using the first `` element. - Summary, using the first `` element. - Properties, using all the `` elements. This generator behaves as if it were using the Berlioz path as `path` parameter of the [GetContentFolderOverview](/reference/advanced/website/berlioz/generators/org.weborganic.bastille.psml.GetContentFolderOverview.md) generator. The Berlioz path depends on the mapping of the Berlioz servlet in the Web descriptor (`web.xml`) and usually corresponds to the value of the `*` in the path component of a matching URL. The Berlioz path is then appended to the `/content` folder with the added `.psml` extension to identify the file to load. | Mapping | URL | Path | Folder | | --- | --- | --- | --- | | /html/\* | /html/test/acme | /test/acme | /content/test/acme | | \*.html | /test/acme.html | /test/acme | /content/test/acme | | \*.html | /test.html?x=123#abc | /test | /content/test | | \*.xml | /test/acme.xml | /test/acme | /content/test/acme | ### Configuration No configuration is required. The root of the PSML folder can be configured using the global property `bastille.psml.root` which can be either an absolute path or a relative path from the global repository. By default, the PSML root is set to `psml` which usually corresponds to the `/WEB-INF/psml` folder of your Web app. ### Parameters This generator requires a `path` parameter. The path parameter **must** be a relative path from within the PSML content folder to a PSML file without the extension. > **Note:** If the path resolves to a location outside the PSML folder, this generator won’t load the content. ### Returned XML The top level element is always the requested folder. Its child elements are either sub folders or files within that folder. ```xml [title] [summary] ``` ### Error handling #### Folder does not exist If the folder cannot be found, this generator sets the status to `NOT_FOUND` and no content. #### Missing path parameter If the path parameter is not specified, this generator sets the status to `BAD_REQUEST` and returns the following: ```xml ``` ### Usage ```xml ``` --- title: "Generator: GetXMLFromURITemplate" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.xml.GetXMLFromURITemplate.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~85 --- # Generator: GetXMLFromURITemplate | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.xml.GetXMLFromURITemplate | | Version: | 0.6.0 - 19 July 2010 | | Library: | Bastille | | Cacheable: | No | | Generated: | 2012-12-21 | ## Description A content generator that can be used to get content from a URI template. --- title: "Generator: GetXMLFromBerliozPath" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.xml.GetXMLFromBerliozPath.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~248 --- # Generator: GetXMLFromBerliozPath | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.xml.GetXMLFromBerliozPath | | Version: | 0.6.5 - 25 May 2011 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description This generator returns the content of an XML file using the Berlioz path. For example, if the Berlioz servlet is mapped to ‘/html/\*’, ‘html/Ping/pong’, tries to look for XML file ‘Ping/pong.xml’ in the XML folder. For example, if the Berlioz servlet is mapped to ‘\*.html’, ‘Ping/pong.html’, tries to look for XML file ‘Ping/pong.xml’ in the XML folder. ### Configuration The root XML folder can be configured globally using the Berlioz configuration: For example: ```xml ``` To define the location of the XML folder, use the Berlioz config property: `bastille.xml.root`. --- title: "Generator: GetNavTreeFromMasterDoc" source: https://dev.pageseeder.com/reference/advanced/website/berlioz/generators/org.weborganic.bastille.xml.GetNavTreeFromMasterDoc.html last_updated: 2026-08-07T17:09:54+10:00 tokens: ~518 --- # Generator: GetNavTreeFromMasterDoc | Property | Value | | --- | --- | | Class name: | org.weborganic.bastille.xml.GetNavTreeFromMasterDoc | | Version: | 11 May 2011 | | Library: | Bastille | | Cacheable: | Yes | | Generated: | 2012-12-21 | ## Description Generate the Navigation Tree. ### Configuration No configuration is required for this generator. ### Parameters - `master-file` – defines the location of master file. - `display-level` – (optional) defines the resolve level, (default: 2). - `pswebsite-root` – (optional) defines the path of website root in PageSeeder. - `pswebsite-content` – (optional) defines the content folder in PageSeeder. ### Returned XML ```xml