Passion <XML/>

<rapidWeb/>

Documentation


The Philosophy

The basic idea is to make a simple framework being component based, scalable open and fast. The keyword is productivity.

Scalable

If you dont need a database for your project, the framework will not enforce you to install a database. Etc. Your code will stay at an equavalent complexity to your project complexity.

Open - The C Assembly Trick

One of the major reasons for C being the most successful programming language is the very special feature of allowing you to "step down" to assembler level. This framework adopts the same philosophy by allowing you to always "step down" and write in the underlying language, be it HTML, JavaScript, CSS, XSL, PHP, etc.

This framework is not taking possibilities from you, but adding a macro level - hopefully - making it much more fast to develop web applications. You may write the Bootstrap classes direct. Write the inline @styles. Add inline Javascript. We are making it CSP compliant... Add the attribute markup from this framework directly to HTML tags. Make the HTML conditional by making it up with @lang, @role, @publish, etc.

Full Stack - 5th Generation Language

  1. Machine Code - Bits and Bytes
  2. Assembly - Characters, Digits and Commands
  3. Symbolic Algebra & System Theory - Scoped Variables, Functions, Classes and Objects
  4. Declarative and Specialized Languages
  5. One Language for the Full Stack

Directory Structure

Site Root

{site root}
Mandatory in all projects
__system__ (the system)
__accounts (site account temp data)
__sessions (site user temp data)
_setup (site setup files)
_pages (site pages) [deprecated]
fav.icon
.htaccess

Mandatory in some projects
_manifest (web manifest files)
_api (api setup files)

Optional in all projects
{css}
{js}
{fonts}
{images}
{audios}
{videos}
{documents}
sitemap.xml
robots.txt

__system__ directory

This is the system folder with all resources needed to run the system. Under normal circumstances there is no need to modify anything in this folder on a project level.

backend (server side files)
database (database files)
frontend (frontend files)
PHP (PHP files)
index.php (base php file)

_setup directory

setup.xml * (basic site configurations, passwords, etc.)
setup.json [auto]
users.xml (XML user credentials)
database (database setup files)
db
_uploads
model.xml
input [auto]
{db temp files}.xml [auto]
xml
json
cron (cron job setup files)
plugins (plugin setup files)
defaults (default resources)
Overwrites system default but is overwritten by directory files
Error pages
_403.xml (access denied)
_404.xml (page not found)
_browser.xml (browser too old)
_error.xml (error)
_session.xml (session expired)
_nologin.xml (lost login)
_xss.xml (security error)
Lang and region
settings.xml
messages.xml (system messages)
Global JS and CSS
_head.xml (standard js and css)
emails (system emails)
activate.xml (activate account)
changepassword.xml (change password notification)
forgot.xml (forgot password)
inactive.xml (account has been deactivated)
login.xml (login notification)
signup.xml (signup confirmation)
trials.xml (too many password trials notification)

_pages directory

System Auto:
__temp (compilation files)
__colors (color compilation files)
__language (language compilation files)
__dataIO (database compilation files)
__jscss (js and css compilation files)

The following folder names are reserved:
{_components} (include files)
_preprocess (preprocess XSL files)
_postprocess (postprocess XSL files)
_data (optional postprocess files)
_service (backend service setup files)

Content files:
_directory.xml (directory setup file)
{page}.xml (page definition files)
{subfolders} (site sub folders)

_directory defines the header and menu structure and links to all the page files. Sub folders defines the next level of the site structure; each folder must have its own _directory.xml

Generally speaking, it is not allowed to add files with the same page name but any other file extension, like .xsl, .xsd etc., as such files might have special meaning.

{page}.xsl (preprocess XML stylesheet for named page)
_directory.xsl (preprocess XML stylesheet for directory)
.htaccess (standard)

_manifest directory [optional]

app.json (auto)
icon-xxx.png

_api directory [optional]

api.php

Other directories [optional]

{css}
{js}
{fonts}
{images}
{audios}
{videos}
{documents}

__sessions directory [auto]

Temporary user data saved in folders named by session ID.

__accounts directory [auto]

Temporary user data saved in folders named by accountID.

Query Parameters

ParameterPurposeDatatypePreserved
p=0Show server load time0
p=1Javascript debugging1browser
p=2Logging, save temp files, etc.2browser
compile=truecompilebooleanbrowser
langlanguage settingISO lang codecookie
regionregional settingISO country codecookie
decimaldecimal separatorcomma | dotcookie
thousandthousand grouping separatorcomma | dot | space | apostrophecookie
datetimedatetime formatUS [MM-DD-YYYY 12:00 AM] | EU [DD-MM-YYYY 24:00:00] | W3C [YYYY-MM-DDT24:00:00]cookie
timezonetimezone settingISO [-]HH[:mm]cookie
calendarcalendar systemchristian | buddhist [+543] | muslim [-579]cookie
currencycurrency settingISO currency codecookie
editorshow editor menustruesession
editablemake application editabletruebrowser
contenteditablemake text editabletruebrowser
stateconditional showhide{any}
taskconditional showhide{any}browser
roleconditional showhide [lower roles only]{any}browser
profileconditional showhide [lower profiles only]{any}browser
csp=falseContent Security Policy [role=9 only]falsebrowser
fp=falseFeature Policy [role=9 only] falsebrowser

Basic Files

All projects will have at least 2 custom files:

  • _directory.xml - shared header, footer, etc.
  • {page}.xml - page definition

Most project will so have 2-3 files more:

  • setup.xml - login system, etc.
  • model.xml - relational database model
  • {service}.xml - backend service

The _setup/setup.xml file

The setup.xml file defines the basic settings for your web site.
<?xml version="1.0" encoding="UTF-8"?>
<site>
<login system="db" retries="3"/>
</site>
[1 lines]

The _directory.xml file

Your web site starts at the root of the _pages folder being the root directory of your web site. The _directory.xml file defines the shared header, footer, menus, etc. of each directory. Additional subdirectories addes as folders to the _pages root folder. Each subdirectory needs a _directory.xml file. You may add subdirectories to the subdirectories endlesly.

The root tag must be <bs:document>

There is a special attribute @dir to indicate if the _directory.xml of a sub folder should inherit from the _directory.xml files from parent levels. @dir="0" means no inheritage. Omitted @dir attribute means inherit up till root _directory.xml. Other numbers indicate how many levels upwards should be inherited.

There is a special tag <bs:import> to indicate where the {page}.xml files are to be imported.

<?xml version="1.0" encoding="UTF-8"?>
<bs:document dir="0" xmlns:bs="http://www.bootstrap-cms.org">
<bs:head/>
<bs:body>
Here is your content...
<bs:import/>
</bs:body>
[1 lines]
</bs:document>
[3 lines]

The {page}.xml files

Your web site consists of pages defined and named by the {page}.xml files. One file one page.

The root tag must be <bs:page>. It has no visual impact.

There is a special tag <bs:include @scr="{file}.xml"> for including other files as resources.

<?xml version="1.0" encoding="UTF-8"?>
<bs:page xmlns:bs="http://www.bootstrap-cms.org"> Here is your content... </bs:page>
<?xml version="1.0" encoding="UTF-8"?>
<bs:page xmlns:bs="http://www.bootstrap-cms.org">
<bs:head>
<bs:title>Home</bs:title>
Here is your title, keywords, custom css and scripts and other head information overwriting _directory.xml
</bs:head>
[1 lines]
<bs:body> Here is your content... </bs:body>
</bs:page>
[3 lines]

The _setup/database/db/_uploads/model.xml file

The relational database model definition.

<?xml version="1.0" encoding="UTF-8"?>
<rd:database historyDefault="true" auditDefault="true" privilegeDefault="true" localsDefault="true" versioningDefault="true" rowlockDefault="true" locationDefault="true" surveyDefault="true" xmlns:rd="http://www.rapidweb.tools/db">
<rd:include type="system" href="builtin/lang/metadata.xml"/>
<rd:table name="ACCOUNT" history="true" versioning="false" priority="10">
<rd:column name="ACCOUNTNAME" type="@TEXT"/>
<rd:column name="ACCOUNTTYPE" datatype="INTEGER" length="1"/>
</rd:table>
[2 lines]
</rd:database>
[4 lines]

The _service/{service}.xml file(s)

 
<?xml version="1.0" encoding="UTF-8"?>
<transaction xmlns:bs="http://www.bootstrap-cms.org"> Transaction flow goes here </transaction>

Installation

Simple Install

  • Download bsml.zip and setup.php
  • Copy bsml.zip and setup.php to site root directory
  • Type address to setup.php in your browser
  • Follow the online instructions

WordPress Install

HTML

The idea is to create a semantic vocabulary.

Some tags are highly one to one as the starting point. Ex. if you write <bs:form>, then it writes an HTML <form> tag.

Other tags do not exist in HTML, fx. <bs:carousel>. Then the needed HTML is written to make a Carousel.

CSS

It is 99% Bootstrap 5 based - only with a very few extensions.

However, you do not have to add the Bootstrap CSS classes manually as the basic classes are added by the semantic tags including default margins, paddings, etc..

But you can still add classes like 'p-3' etc. either by the @class attribute or by semilary semantic markup like @padding="3". If those are set as defaults already, the default will be overwritten.

Javascript

The basic idea is to activate Javascript by HTML attribute markup the same way as it is being done in Bootstrap. Fx. @data-bs-toggle and @data-bs-target are used for navigating a tabpanel.

However, you do not have to add those attributes. Instead it is included by the semantic markup.

<?xml version="1.0" encoding="UTF-8"?>
<bs:carousel prev="true" next="true" xmlns:bs="http://www.bootstrap-cms.org">
<bs:seat>
<bs:h1>Fast</bs:h1>
</bs:seat>
[1 lines]
<bs:seat>
<bs:h1>And Easy</bs:h1>
</bs:seat>
[1 lines]
</bs:carousel>
[4 lines]


<?xml version="1.0" encoding="UTF-8"?>
<div id="D25idm781" data-bs-ride="carousel" data-bs-touch="true" class="carousel slide mx-auto" xmlns:bs="http://www.bootstrap-cms.org">
<div class="carousel-inner d-flex h-100 text-center">
<div data-bs-interval="5000" class="carousel-item">
<div>
<h1>Fast</h1>
</div>
[1 lines]
</div>
[2 lines]
<div data-bs-interval="5000" class="carousel-item active">
<div>
<h1>And Easy</h1>
</div>
[1 lines]
</div>
[2 lines]
</div>
[6 lines]
<button type="button" class="carousel-control-prev" data-bs-target="#D25idm781" data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"/>
<span class="visually-hidden">Previous</span>
</button>
[2 lines]
<button type="button" class="carousel-control-next" data-bs-target="#D25idm781" data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"/>
<span class="visually-hidden">Next</span>
</button>
[2 lines]
</div>
[13 lines]

Grid

SemanticBootstrapBreakpoint
watchxsfrom 0
phonesmfrom 576
tabletmdfrom 768
laptoplgfrom 992
desktopxlfrom 1200
cinemaxxlfrom 1400

<bs:container/>

<bs:grid>

As row

<bs:col>

As column

Pattern
SemanticBootstrapDescription
@col="*"colEqual or remaining [default]
@col="auto"col-autoAdjust to content
@col="{1-12}"col-{1-12}Between 1 or 12
Responsive
SemanticBootstrapDescription
@{watch}="*"colEqual or remaining
@{watch}="auto"col-autoAdjust to content
@{watch}="{1-12}"col-{1-12}Between 1 and 12
<?xml version="1.0" encoding="UTF-8"?>
<bs:grid xmlns:bs="http://www.bootstrap-cms.org">
<bs:col watch="*"/>
<bs:col/>
<bs:col/>
<bs:col/>
</bs:grid>
[4 lines]

<bs:zigzag>

The ZigZag component gives you perfect responsive layout on shift of the position of text and images.

<?xml version="1.0" encoding="UTF-8"?>
<bs:zigzag layout="left-rigth" breakpoint="tablet" xmlns:bs="http://www.bootstrap-cms.org">
<bs:grid>
<bs:col>
<bs:image src=""/>
</bs:col>
[1 lines]
<bs:col>
<bs:text/>
</bs:col>
[1 lines]
</bs:grid>
[4 lines]
<bs:grid>
<bs:col>
<bs:text/>
</bs:col>
[1 lines]
<bs:col>
<bs:image src=""/>
</bs:col>
[1 lines]
</bs:grid>
[4 lines]
<bs:grid>
<bs:col>
<bs:image src=""/>
</bs:col>
[1 lines]
<bs:col>
<bs:text/>
</bs:col>
[1 lines]
</bs:grid>
[4 lines]
</bs:zigzag>
[15 lines]

<bs:listgroup/>

<bs:composition/>

<bs:splitter/>

 

 

 

 

 

 

 

 

 










<bs:breadcrumb/>

<bs:pagination/>


<bs:form/>

 
 

Connect
ValueDescription
formGeneric
databaseUse with @data-format (*)
webserviceConnect to webservice from form with @data-format
Database (*)
ValueDescription
dbRelational database
xmldbXML file
jsondbJSON file
To be replaced by @data-format and #database
Backend Flow
ValueDescription
flowForm data
filesBinary files
xmlXML files
jsonJSON files
#flow is deprecated (not needed when @data-flow)
Sign
ValueDescription
loginLogin form
signupSign up form
forgotForgot password form
userUser info form
activateActive account form
Javascript
ValueDescription
javascriptSubmit to javascript (*)
tempTemporary data for form/dialog group
routeJavascript route by form
Services
ValueDescription
emailSend email from form
paypalSend PayPal from form

@data-flow

Name of backend flow.

@data-target

Target for form response [@data-output] - IF not in form-container.

@data-root

XML root tag for the form data (server side) [xs:Name]. Defaults to root.

@data-no-root

Omit default XML root tag for the form data (server side) [true | false].

Submit mode
ValueDescription
HTMLHTML Submit
AJAXAJAX Submit
QUERYSubmit as GET query
JSFor route
APP

Webservice Protocol
ValueDescription
SOAPSimple Object Access Protocol by XML
GETSelect data
POSTInsert data
PUTFull update
PATCHPartial update
DELETEDelete data
Web service (via curl) ONLY. Inherit from ds:data/@protocol [ not implemented yet ]

@name

Form name as resolved as part of control names [xs:Name].

@omit-name (*)

Do not add name as part of name resolving [true | false]. Relevant if @name if used for reference. [NOT IMPLEMENTED YET]

@name-ns-prefix

List of ns prefixes together with @name-ns-uri's [space separated]

@name-ns-uri

Declare namespaces by list of namespace uri's together with name-ns-prefix [space separated]

@name-default-prefix

Add this prefix if names have no prefix (down the hierarchy).

@no-name-prefix

Add no prefix even no prefix is part of the names (down the hierarchy).

Name encoding (and resolving) (down the hierarchy)
Services
ValueDescription
xpathroot/name/@attribute
phproot[name][@attribute] (default)

@name-resolving

Resolve name up the hierarchy [true | false] [NOT IMPLEMENTED YET]

@select

Name for @select for loading data into form [NOT IMPLEMENTED YET]

@column

Object column name [xs:Name]. Being used on top of @name when name resolving.

@return-state

&state when returning from server

@error-state

@state when returning from server with error

@autosubmit

autosubmit on form data change

@action

Submit to href [xs:anyURI]

@method

Form submit method [POST | GET]. Do not use.

@autocomplete

[on | off]

List of (space separated):
ValueDescription
loadOn data load
enterOn control focus
clickOn control click
inputOn control input
leaveOn control blur
submitOn submit
hasIf has been validated then validate on input
@validate-event

Do validation

@default-event

Add defaults

@format-event

Do formattings

@calc-event

Do calculations

@route-event

Do route (show/hide)

@inline

Form elements layout style [true | false]

Going from full-width to fixed-width layout
ValueDescription
fixedAlways fixed
fullAlways full
phone
tablet
laptop
desktop
cinema

<bs:fieldset/>

@data-content
@data-format

<bs:form-grid/>

<bs:inline/>

<bs:input-group/>

<bs:control/>

<bs:submit/>

@data-content
@data-format

<bs:clear/>

@data-content
@data-format

<bs:reset/>

@data-content
@data-format

<bs:init/>

@data-content
@data-format

<bs:defaults/>

@data-content
@data-format

<bs:form-container/>

@data-content
@data-format

<bs:form-response/>

@data-content
@data-format

<bs:form-error/>

@data-content
@data-format

<bs:restart/>

<bs:feedback/>

@data-content
@data-format

<bs:helper/>

@data-content
@data-format

<bs:form-group/>

Is being used to make a collection of forms into a group of related form in the way that all form data will (only) be sent at the last form in the group

For the forms except the last one, the @data-content="temp".

<?xml version="1.0" encoding="UTF-8"?>
<bs:form-group xmlns:bs="http://www.bootstrap-cms.org">
<bs:form data-content="temp">
<bs:input type="text">
<bs:label>Name</bs:label>
</bs:input>
[1 lines]
<bs:submit>Next</bs:submit>
</bs:form>
[3 lines]
<bs:form data-content="temp">
<bs:input type="email">
<bs:label>Email</bs:label>
</bs:input>
[1 lines]
<bs:submit>Next</bs:submit>
</bs:form>
[3 lines]
<bs:form data-content="form">
<bs:input type="tel">
<bs:label>Tel</bs:label>
</bs:input>
[1 lines]
<bs:submit>Send</bs:submit>
</bs:form>
[3 lines]
</bs:form-group>
[12 lines]

Input Controls

With Data

Open input
MarkUpDescription
@fixedControl will get this value regardless of data. Works for both HTML and AJAX load. Not same as the @xs:fixed serving as validation markup.
bs:fixedSame as @fixed but may have or other <bs:lang> sub elements.
@valueControl will get this value IF data has no value for the control - load default for both HTML and AJAX load. Overruled by @init or bs:init if any.
bs:valueSame as @value but may have <bs:lang> or other sub elements.
@initSame as @value but only works or overrules @value for HTML load.
bs:initSame as @init but may have <bs:lang> or other sub elements.
@emptyControl will get this value IF data is null (db) or absent (XML) - load default on null.
bs:emptySame as @empty but may have <bs:lang> or other sub elements.
@nameData is loaded from column with same name. Overruled by @select if any (serving as submit name only if present).
@tableData is loaded from table with same name.
@selectData is loaded from column with same name.
@select-tableData is loaded from table with same name.
@defaultSubmit (or other event) default value
bs:defaultSame as @default but may have <bs:lang> or other sub elements.
@default-eventThe event to trigger default.
bs:checkbox or bs:toggle (or bs:checklist or bs:checktree)
MarkUpDescription
@valueValue - if control is set by @checked or by data - for both load and submit.
@checkedServes as load default.
@defaultServes as submit default if not checked. (To markup that value has not been set by the user).
@audodefault = falseThe checkbox has no default value, i.e. no value is submitted if control is not checked.
bs:select or bs:radio
MarkUpDescription
@valueLoad default.
@default on root element or bs:optionSubmit default.
@default-eventThe event to trigger default.
@selected (on bs:option)Load default. Overruled by @value if any.
bs:placeholderLoad default. Overruled by @value or @selected if any.

Without Data

MarkUpDescription
@value (or @fixed or @empty or @init)Control set to this value.
@checked or @selectedControl set to this value (if bs:select or bs:radio overruled by @value etc.).

Load and Submit

MarkUpDescription
@noloadControl has no data loaded. (Used when @name is needed for other purposes.)
@nosubmitControl values will not be submittet. (Used when @name is needed for other purposes.)
@readonlyControl be edited. (Data will not be validated).
@disabledControl cannot be edited and will not be submittet. (Data will not be validated).
@novalidationControl value will not be validated.

<bs:input/>

<bs:password/>

<bs:display/>

 

<bs:integer/>

<bs:decimal/>

<bs:float/>

Time & Date

Timezone adjustments

@timezoneDescription
server[default] The timezone is set to the server timezone GMT
userThe timezone is set to the user setting implicit or explicit by the regional setting
localThe timezone is set by the browser setting
(+|-)(H)H(:mm)Any valid timezone value, ex. +7 or +5:30

Localization

Set by the user regional setting - or @localize

ValueDescription
EUdd-mm-yyyy
USmm-dd-yyyy
ISOyyyy-mm-dd

<bs:date/>

<bs:time/>

<bs:datetime/>

<bs:day/>

<bs:month/>

<bs:year/>

<bs:day-month/>

<bs:year/>

<bs:week/>

<bs:duration/>

<bs:email/>

<bs:tel/>

<bs:url/>

<bs:textarea/>

<bs:select/>

<bs:radio/>

<bs:chooser/>

<bs:checkbox/>

<bs:toggle/>

<bs:checklist/>

<bs:checktree/>

<bs:listbox/>

<bs:multiple/>

<bs:matrix/>

<bs:file/>

<bs:range/>

<bs:hidden/>

<bs:output/>

<bs:search/>




<bs:accordion/>

<bs:alert/>

<bs:badge/>

<bs:card/>

<bs:carousel/>

<bs:collapse/>

<bs:image/>

<bs:toast/>

<bs:table/>

<bs:tooltip/>

<bs:popover/>

Images

<bs:image-box/>

<bs:image/>

Audio & Video

 
 

<speak/>

<recognition/>

<pdf/>

<barcode/>

<qr/>

 

Sticky Elements

Parallax

Scroll Effects

HTML5 Validation

AttributeDescription
@requiredMandatory
@patternRegular Expression
@maxLengthMax Length (blocking)
@minLengthMin Length
@minMin Value
@maxMax Value
@stepValue Steps

Datatype Validation

AttributeDescription
integer
decimal
email
tel
url
date
time
datetime
week
day
month
year

XML Schema SimpleType Validation

Datatype
AttributeDescription
xs:string
xs:decimal
xs:integer
xs:date
xs:time
xs:datetime
Facet
AttributeDescription
xs:minExclusiveAny value greater than this
xs:maxExclusiveAny value less than this
xs:minInclusiveAny value greater or equal to this
xs:maxInclusiveAny value less or equal to this
xs:totalDigitsMax total digits including both integer and decimal parts
xs:fractionDigitsMax decimal fraction digits
xs:lengthFixed length
xs:minLengthMin length
xs:maxLengthMax length
xs:fixedMust match this value
xs:minOccursMin instances
xs:maxOccursMax instances
Autocorrect
AttributeDescription
xs:whiteSpaceRemove whitespaces [preserve | replace | collapse]
xs:defaultInsert if value is empty

Cross Field Validation

Multiple field based validation

 
 

Complex Calculation

Simple Calculation

Complex Calculation

Number Formatting

AttributeDescription
@decimalsFixed decimals [integer]
@minDecimalsMin decimal digits [integer]
@maxDecimalsMax decimal digits [integer]
@thousandThousand grouping [true]
@autocorrectParse Float [true]

Date & Time Formatting

@timezone
TimezoneDescription
noneno timezone
serverGMT
userregion setting chosen by the user
localThe local timezone
{(+)HH:mm}Timezone as specified

Text Formatting

AttributeDescription
@case

<bs:formatting>

Styling

Bootstrap 5

@class

You can add any and all classes you like both Bootstrap classes or your own classes.

<?xml version="1.0" encoding="UTF-8"?>
<bs:document xmlns:bs="http://www.bootstrap-cms.org">
<bs:head/>
</bs:document>
[1 lines]
<?xml version="1.0" encoding="UTF-8"?>
<bs:carousel class="m-3" xmlns:bs="http://www.bootstrap-cms.org">
<bs:seat/>
</bs:carousel>
[1 lines]
@style

You can add any and all inline styles you like. The system takes care of CSP for you.

<?xml version="1.0" encoding="UTF-8"?>
<bs:carousel style="background-color:green;" xmlns:bs="http://www.bootstrap-cms.org">
<bs:seat/>
</bs:carousel>
[1 lines]

Attributes

Semantic Styles

Colors

Color Palette

primarysuccessinfowarningdangersecondarydarklightwhitegray-darktransparent
blueindigopurplepinkredorangeyellowgreencyantealgray
blueindigopurplepinkredorangeyellowgreencyantealgray
100
200
300
400
500
600
700
800
900

@color

Color Theme

@bg-color

Background Color

@text-color

Text Color

@outline

Outline Color

@color-hover

Color on Mouse over

@color-active

Color when Active

@color-focus

Color when Focus

@color-disabled

Color when Disabled

@bg-opacity

Background Color Opacity [0;1] #.#

@text-opacity

Text Color Opacity [0;1] #.#

Text

Borders

Spacing

Alignment

Grid

Shadow

Position

Overflow

Float

Height & Width

Size

Display

Responsive & Conditional

Use can easily add both responsive and conditional classes and styling.

Default Styling

Bootstrap User Guide

The components are having the default styling from the Bootstrap user guide.

However, it it easily overwritten.

Role and Profile

@role

Will be show on this (or list of) role(s) only.

@profile

Will be show on this (or list of) profile(s) only.

<?xml version="1.0" encoding="UTF-8"?>
<bs:carousel role="1 2 9" profile="3 6" xmlns:bs="http://www.bootstrap-cms.org">
<bs:seat/>
</bs:carousel>
[1 lines]

State and Task

@state

Show on this (or list of) state(s).

May be set as query parameter &state=1, but will not get preserved as query parameter on page navigation.

@task

Show on this (or list of) task(s).

May be set as a query parameter &task=2, and will be preserved as query parameter on page navigation.

<?xml version="1.0" encoding="UTF-8"?>
<bs:carousel state="2" tast="1" xmlns:bs="http://www.bootstrap-cms.org">
<bs:seat/>
</bs:carousel>
[1 lines]

Language & Region

@lang

Shown on this language code only.

@region

Shown on this region code only

<?xml version="1.0" encoding="UTF-8"?>
<bs:carousel lang="da" region="DK" xmlns:bs="http://www.bootstrap-cms.org">
<bs:seat/>
</bs:carousel>
[1 lines]

Data Access

@access

Show/hide/enable/disable the control based on the database privilege to the row

ValueDescription
0hidden if privilege is 0
1 or 2 or 3shown as readonly if privilege is same or higher.
4 or 5shown and enabled if privilege is 4 (or higher) or 5
<?xml version="1.0" encoding="UTF-8"?>
<bs:carousel access="1" xmlns:bs="http://www.bootstrap-cms.org">
<bs:seat/>
</bs:carousel>
[1 lines]

Version

@version

Version number (or list of version numbers) for showing the content.

<?xml version="1.0" encoding="UTF-8"?>
<bs:carousel version="2" xmlns:bs="http://www.bootstrap-cms.org">
<bs:seat/>
</bs:carousel>
[1 lines]

Publishing

@publish

DateTime for showing the content.

@deadline

Will be readOnly if dateTime for has been exceeded.

@expiry

DateTime for removing the content.

<?xml version="1.0" encoding="UTF-8"?>
<bs:carousel publish="2024-04-01" expiry="2024-05-01" xmlns:bs="http://www.bootstrap-cms.org">
<bs:seat/>
</bs:carousel>
[1 lines]

Performance

@p

Set as query parameter &p=2

ValueDescription
0Show load time
1JS debugging to browser console
2Dump temp files
3PHP debugging
<?xml version="1.0" encoding="UTF-8"?>
<bs:carousel p="2" xmlns:bs="http://www.bootstrap-cms.org">
<bs:seat/>
</bs:carousel>
[1 lines]

Privacy

@privacy

Will be shown only if has this (or list of) privacy (gdpr or others) and it is still valid.

Condition

@condition

 

Editing

@editor

If @editor="true", then only visible in editor mode (query parameter &editor=true)

@editable

If @editable="true", then the element - and any descendant of the element - will be editable.

@contenteditable

If @contenteditable="true", then the text on this element will be editable

@noedit

If @noedit="true", then the element - and any descendant of the element - will NOT be editable even if an ancestor is set to @editable="true".

<?xml version="1.0" encoding="UTF-8"?>
<bs:carousel editor="true" editable="true" xmlns:bs="http://www.bootstrap-cms.org">
<bs:seat/>
</bs:carousel>
[1 lines]
<?xml version="1.0" encoding="UTF-8"?>
<bs:h1 contenteditable="true" xmlns:bs="http://www.bootstrap-cms.org">Hello</bs:h1>

The system has a comprehensive list of defining regions and languages with an expensive list of properties attached to it:

ValueDescription
@decimalDecimal separator [dot | comma]
@thousandThousand group separator [dot | comma | space | aprostrophe]
@datetimeDatetime format [US | EU | RAW]
@timezoneTimezone (+)HH:mm
@timezoneCityThe city defining the timezone.
@calendarCalendar system [christian | buddhist | muslim]
@firstdayofweekFirst day of week [monday | sunday]

The settings may be included in the _directory.xml file, in a separate settings.xml file under /setup directory or may rely on system builtin settings.

<bs:lang>

Only shown in this language.

@code

Language code.

@default

Is default language [true].

<?xml version="1.0" encoding="UTF-8"?>
<bs:lang code="en" xmlns:bs="http://www.bootstrap-cms.org">
<bs:h1>Hello</bs:h1>
<bs:p>there...</bs:p>
</bs:lang>
[2 lines]

<bs:lang-group>

<bs:region>

Only shown in this region.

@code

Region (country) code.

@default

Is default region [true].

<?xml version="1.0" encoding="UTF-8"?>
<bs:region code="UK" xmlns:bs="http://www.bootstrap-cms.org">
<bs:h1>Hello</bs:h1>
<bs:p>there...</bs:p>
</bs:region>
[2 lines]

<bs:region-group>

Localization

The location system consist of 3 parts

  • The settings.xml file defining the regions and languages
  • The input controls displaying data in line of regional settings.
  • The <bs:text> element taking care of regional settings.

<bs:text>

@datetype

If the @datatype attributes is set, then numeric and datetime displays will be adjusted to regional settings.

Standard Text

The system has a number of builtin but configuarable standard text labels for forms, tables, etc.

Standard Messages

The system has a number builtin but configuarable standard server messages.

Database

Frontend

The frontend component of the database system consists of it's own namespace for marking up the frontend features of the databasesystem. In short, it consists of the following tags:

  • ds:data
  • ds:master
  • ds:details
  • ds:search
  • ds:lookup

For tables, it has the following key features:

  • ds:search
  • ds:sort

Backend

The backend part of the system is almost entirely automatically enabled. The way to configure the system is by marking up in the frontend.

Relational Data

The relational data part of the system consists of a dedicated and separate markup syntax for defining data tables and views. It basically has two level:

  • A simple markup for doing the basic stuff.
  • SQML - a full XML markup of SQL.

XML & JSON

Database Frontend

Data Table

IdNameEmail
123Peter Hansenpeter@hansen.com

@name

<?xml version="1.0" encoding="UTF-8"?>
<bs:table name="user" xmlns:bs="http://www.bootstrap-cms.org">
<bs:head>
<bs:row>
<bs:cell>Id</bs:cell>
<bs:cell>Name</bs:cell>
<bs:cell>Email</bs:cell>
</bs:row>
[3 lines]
</bs:head>
[4 lines]
<bs:body>
<bs:row>
<bs:cell>Id</bs:cell>
<bs:cell>Name</bs:cell>
<bs:cell>Email</bs:cell>
</bs:row>
[3 lines]
</bs:body>
[4 lines]
</bs:table>
[10 lines]

<ds:part>

<?xml version="1.0" encoding="UTF-8"?>
<bs:table name="user" xmlns:bs="http://www.bootstrap-cms.org">
<bs:head>
<bs:row>
<bs:cell>Id</bs:cell>
<bs:cell>Name</bs:cell>
<bs:cell>Email</bs:cell>
</bs:row>
[3 lines]
</bs:head>
[4 lines]
<ds:part>
<ds:row>
<bs:column name="@id"/>
<bs:column name="name"/>
<bs:column name="email"/>
</ds:row>
[3 lines]
</ds:part>
[4 lines]
</bs:table>
[10 lines]

Data Cards

Data Accordion

Data Carousel

bs:code

Data object.

bs:image

Data object.

Master Data

Data Details

Data Search

Data History

Data Versioning

Row Privilege

Data Navigation Layout

Details Next Screen

Outline Details

Inline Details

Details Dialog

Filter & Sort

Details Button

New Row Button

  • Insert at end of table
  • Insert Before or After this row

Delete Button

Duplicate Button

LookUp Button

Populate and/or select Select Control option

Populate and/or select Radio option

Populate and/or select Menu item

Value-of @select

Data Storage

  • Relational Data
  • XML
  • JSON

Relational Database

It is optional to install/use a relational database (mySQL or MariaDB).

If you choose to setup a RDBMS then it will include a standard system part and a custom part. The system tables are needed for sign in, privilege management and more.

XML

It is possible to run the sign in and privilege system entirely based on XML files.

However, XML files are also useful for business data optionaly in combination with an RDBMS.

JSON

Sign In

Sign Up

To sign up the users, you will need to make a HTML form like this:

required: true
type: text
Please enter your name
required: true
datatype: email
Please enter your email
type: password
required: true
Please enter your password
type: password
required: true
Please retype your password
<?xml version="1.0" encoding="UTF-8"?>
<bs:form validate="submit" data-content="signup" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bs="http://www.bootstrap-cms.org">
<bs:input required="true" name="name" type="text">
<bs:label>
<bs:icon name="user" margin-right="1"/>
Name
</bs:label>
[1 lines]
<bs:invalid-text asTooltip="true">Please enter your name</bs:invalid-text>
</bs:input>
[3 lines]
<bs:input type="email" name="email" required="true" datatype="email">
<bs:label>
<bs:icon name="envelope" margin-right="1"/>
Email
</bs:label>
[1 lines]
<bs:invalid-text asTooltip="true">Please enter your email</bs:invalid-text>
</bs:input>
[3 lines]
<bs:input type="password" name="password" required="true">
<bs:label>
<bs:icon name="key" margin-right="1"/>
Password
</bs:label>
[1 lines]
<bs:invalid-text asTooltip="true">Please enter your password</bs:invalid-text>
</bs:input>
[3 lines]
<bs:input type="password" required="true">
<bs:label>
<bs:icon name="key" margin-right="1"/>
Retype Password
</bs:label>
[1 lines]
<bs:invalid-text asTooltip="true">Please retype your password</bs:invalid-text>
</bs:input>
[3 lines]
<bs:button type="submit" color="success">
<bs:icon name="sign-language" margin-right="1"/>
Sign Up
</bs:button>
[1 lines]
<bs:close>
<bs:icon name="close" margin-right="1"/>
Close
</bs:close>
[1 lines]
</bs:form>
[20 lines]

Log In

To log in the users, you will need to make an HTML form like this:

required: true
datatype: email
Skriv email
type: password
required: true
Skriv din adgangskode
<?xml version="1.0" encoding="UTF-8"?>
<bs:form validate="submit" data-content="login" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bs="http://www.bootstrap-cms.org">
<bs:input type="email" name="email" required="true" addon="true" autofocus="true" datatype="email">
<bs:placeholder>
<bs:lang code="en">your email</bs:lang>
<bs:lang code="da">din email</bs:lang>
</bs:placeholder>
[2 lines]
<bs:label>
<bs:lang code="en">Email</bs:lang>
<bs:lang code="da">Email</bs:lang>
</bs:label>
[2 lines]
<bs:invalid-text asTooltip="true">
<bs:lang code="en">Please enter your email</bs:lang>
<bs:lang code="da">Skriv email</bs:lang>
</bs:invalid-text>
[2 lines]
</bs:input>
[9 lines]
<bs:input type="password" name="password" required="true" addon="true">
<bs:placeholder>
<bs:lang code="en">your password</bs:lang>
<bs:lang code="da">din adgangskode</bs:lang>
</bs:placeholder>
[2 lines]
<bs:label>
<bs:lang code="en">Password</bs:lang>
<bs:lang code="da">Adgangskode</bs:lang>
</bs:label>
[2 lines]
<bs:invalid-text asTooltip="true">
<bs:lang code="en">Please enter your password</bs:lang>
<bs:lang code="da">Skriv din adgangskode</bs:lang>
</bs:invalid-text>
[2 lines]
</bs:input>
[9 lines]
<bs:button type="submit" color="success">
<bs:icon name="box-arrow-in-right" margin-right="1"/>
<bs:lang code="en">Log In</bs:lang>
<bs:lang code="da">Log På</bs:lang>
</bs:button>
[3 lines]
</bs:form>
[24 lines]

Forgot Password

To create a "forgot password" dialog, you will need to make an HTML form like this:

<?xml version="1.0" encoding="UTF-8"?>
<bs:form data-content="forgot" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bs="http://www.bootstrap-cms.org">
<bs:input type="email" name="email" required="true" addon="true" autofocus="true" datatype="email">
<bs:placeholder>
<bs:lang code="en">your email</bs:lang>
<bs:lang code="da">din email</bs:lang>
</bs:placeholder>
[2 lines]
<bs:label>
<bs:lang code="en">Email</bs:lang>
<bs:lang code="da">Email</bs:lang>
</bs:label>
[2 lines]
<bs:invalid-text asTooltip="true">
<bs:lang code="en">Please enter your email</bs:lang>
<bs:lang code="da">Skriv din email</bs:lang>
</bs:invalid-text>
[2 lines]
</bs:input>
[9 lines]
<bs:input type="text" name="key" addon="true">
<bs:placeholder>
<bs:lang code="en">key code (check your mailbox)</bs:lang>
<bs:lang code="da">kode (check din mailbox)</bs:lang>
</bs:placeholder>
[2 lines]
<bs:label>
<bs:lang code="en">Code (from email when received)</bs:lang>
<bs:lang code="da">Kode (fra email når du har modtaget den)</bs:lang>
</bs:label>
[2 lines]
</bs:input>
[6 lines]
<bs:button type="submit" color="success">
<bs:lang code="en">Send</bs:lang>
<bs:lang code="da">Send</bs:lang>
</bs:button>
[2 lines]
<bs:close margin-left="1">
<bs:lang code="en">Close</bs:lang>
<bs:lang code="da">Luk</bs:lang>
</bs:close>
[2 lines]
</bs:form>
[23 lines]

Activate Account

To activate the user accounts, you will need to make an HTML form like this:

<?xml version="1.0" encoding="UTF-8"?>
<bs:form data-content="activate" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bs="http://www.bootstrap-cms.org">
<bs:input type="email" name="email" required="true" autofocus="true" datatype="email">
<bs:placeholder>
<bs:lang code="en">email</bs:lang>
<bs:lang code="da">email</bs:lang>
</bs:placeholder>
[2 lines]
<bs:label>
<bs:lang code="en">Email</bs:lang>
<bs:lang code="da">Email</bs:lang>
</bs:label>
[2 lines]
<bs:invalid-text asTooltip="true">
<bs:lang code="en">Please enter your email</bs:lang>
<bs:lang code="da">Skriv din email</bs:lang>
</bs:invalid-text>
[2 lines]
</bs:input>
[9 lines]
<bs:input type="text" name="key" placeholder="">
<bs:placeholder>
<bs:lang code="en">key code from email</bs:lang>
<bs:lang code="da">kode fra email</bs:lang>
</bs:placeholder>
[2 lines]
<bs:label>
<bs:lang code="en">Code (from email when received)</bs:lang>
<bs:lang code="da">Kode (fra email når du har modtaget den)</bs:lang>
</bs:label>
[2 lines]
</bs:input>
[6 lines]
<bs:button type="submit" color="success">
<bs:lang code="en">Send</bs:lang>
<bs:lang code="da">Send</bs:lang>
</bs:button>
[2 lines]
<bs:close margin-left="1">
<bs:lang code="en">Close</bs:lang>
<bs:lang code="da">Luk</bs:lang>
</bs:close>
[2 lines]
</bs:form>
[23 lines]

Log Out

User Profile

For the user to change name, password and more, you will need to make an HTML form like this:

<?xml version="1.0" encoding="UTF-8"?>
<bs:data name="S_USER" format="db" history="true" mode="HTML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bs="http://www.bootstrap-cms.org"></bs:data>

Group

For the administrative purpose managing users and groups, you will need to make HTML forms like this:

Role & Profile

Roles and Profiles are related to the user profile and used to control access throughout the application.

<?xml version="1.0" encoding="UTF-8"?>
<bs:carousel role="2" profile="3" xmlns:bs="http://www.bootstrap-cms.org"/>

Role

@role is being used for giving hierarchical access rights:

Roles
RoleDescription
0Standard non-signed in public user
1Basic signed in user
-1Cookie logged in user
2-7Custom roles
8Admin
9System

Profile

@profile is used for optionally "horisontal" access control.

The standard profile is 0.

Transaction

The system has its own markup language for defining backend transactions.

Frontend

bs:code

@flow

The name of the transflow. (Not needed if included in bs:form-response to bs:form with @data-flow.)

@part

The name of the flow part (if any).

May act as database object container (also).

ts:output

@flow

Name of flow.

@part

Name of flow part.

ts:flow

Flow container.

@flow (name)

ts:part

Flow part container.

@part (name)

ts:content

Must have ts:part or ts:output ancestor

Transflow content container.

May act as database object container (also).

bs:form-response

Backend

 
 

include

allowed

variable

copy

in

process

out

Send Email

The system has its own dynamic email markup language.

<?xml version="1.0" encoding="UTF-8"?>
<es:email xmlns:bs="http://www.bootstrap-cms.org" xmlns:es="http://www.emailstrap.org">
<es:to>
<es:email>info@data-diagrams.com</es:email>
<es:name>Support</es:name>
</es:to>
[2 lines]
<es:from>
<es:email>
<es:value-of select="email"/>
</es:email>
[1 lines]
<es:name>
<es:value-of select="name"/>
</es:name>
[1 lines]
</es:from>
[4 lines]
<es:subject>DigitalBlind Kontakt</es:subject>
<es:body>
<es:text>
<es:value-of select="name"/>
<es:crlf/>
<es:value-of select="email"/>
<es:crlf/>
<es:value-of select="telephone"/>
<es:crlf/>
<es:value-of select="nationality"/>
<es:crlf/>
<es:value-of select="message"/>
<es:crlf/>
</es:text>
[10 lines]
<es:html>
<h1>DigitalBlind</h1>
<h2>Bruger Spørgsmål</h2>
<div>
<span>Navn: </span>
<es:value-of select="name"/>
</div>
[2 lines]
<div>
<span>Email: </span>
<es:value-of select="email"/>
</div>
[2 lines]
<div>
<span>Telefon: </span>
<es:value-of select="telephone"/>
</div>
[2 lines]
<div>
<div style="border:solid 1px;padding:10px;margin-top:10px;">
<p>
<es:value-of select="message"/>
</p>
[1 lines]
</div>
[2 lines]
</div>
[3 lines]
</es:html>
[15 lines]
</es:body>
[27 lines]
</es:email>
[37 lines]

Send Newsletters

The system has builtin support for publishing newsletters.

Send Notification

The system has support sending change notifications to users.

The typically notification is sent upon database updates.

Cron Jobs

Cron Jobs are made as scheduled Transaction Flows

APIs

Samples

 












Oops

Your browser is not supported

A modern browser with Javascript ES6 is required

Any major browser from 2015 onwards will be suitable