Skip to content

Instantly share code, notes, and snippets.

@ewg118
Created June 12, 2015 01:22
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ewg118/d5a3e4624c3075764d81 to your computer and use it in GitHub Desktop.
Save ewg118/d5a3e4624c3075764d81 to your computer and use it in GitHub Desktop.
Basic XForms Introduction
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xxforms="http://orbeon.org/oxf/xml/xforms" xmlns:fr="http://orbeon.org/oxf/xml/form-runner" xmlns:res="http://www.w3.org/2005/sparql-results#"
xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:nm="http://nomisma.org/id/" xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:skos="http://www.w3.org/2004/02/skos/core#"
xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:un="http://www.owl-ontologies.com/Ontology1181490123.owl#"
xmlns:atom="http://www.w3.org/2005/Atom" xmlns:nomisma="https://github.com/nomisma" xmlns:rdac="http://www.rdaregistry.info/Elements/c/"
xmlns:osgeo="http://data.ordnancesurvey.co.uk/ontology/geometry/" xmlns:nmo="http://nomisma.org/ontology#" xmlns:org="http://www.w3.org/ns/org#">
<head>
<title>hello world</title>
<link rel="stylesheet" href="/fr/style/bootstrap/css/bootstrap.css" type="text/css" />
<link rel="stylesheet" href="/fr/style/form-runner-bootstrap-override.css" type="text/css" />
<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" />
<script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<link rel="shortcut icon" href="/ops/images/orbeon-icon-16.ico" />
<link rel="icon" href="/ops/images/orbeon-icon-16.png" type="image/png" />
<link rel="stylesheet" href="/apps/kerameikos/xforms/css/style.css" />
<xforms:model>
<xforms:instance id="list" xxforms:exclude-result-prefixes="#all">
<list title="" xmlns="">
<item lang=""></item>
<item lang=""></item>
</list>
</xforms:instance>
<xforms:instance id="item-template" xxforms:exclude-result-prefixes="#all">
<item xmlns=""></item>
</xforms:instance>
<xforms:instance id="languages">
<languages xmlns="">
<lang code="en">English</lang>
<lang code="fr">French</lang>
</languages>
</xforms:instance>
<!-- other examples -->
<xforms:instance id="rdf" xxforms:exclude-result-prefixes="#all">
<rdf:RDF xmlns:dcterms="http://purl.org/dc/terms/" xmlns:nm="http://nomisma.org/id/" xmlns:nmo="http://nomisma.org/ontology#" xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:skos="http://www.w3.org/2004/02/skos/core#"
xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:un="http://www.owl-ontologies.com/Ontology1181490123.owl#"
xmlns:osgeo="http://data.ordnancesurvey.co.uk/ontology/geometry/" xmlns:org="http://www.w3.org/ns/org#" xmlns:rdac="http://www.rdaregistry.info/Elements/c/">
<rdf:Description rdf:about="demo:test">
<dcterms:title></dcterms:title>
</rdf:Description>
</rdf:RDF>
</xforms:instance>
<xforms:instance id="control-instance" xxforms:exclude-result-prefixes="#all">
<controls xmlns="">
<viaf-query></viaf-query>
<viaf-field>local.personalNames</viaf-field>
<viaf-uri></viaf-uri>
<save-trigger>false</save-trigger>
</controls>
</xforms:instance>
<xforms:instance id="fon-list" xxforms:exclude-result-prefixes="#all">
<list xmlns=""></list>
</xforms:instance>
<!-- sparql queries -->
<xforms:instance id="sparqlQuery">
<query></query>
</xforms:instance>
<xforms:instance id="sparql-templates">
<templates xmlns="">
<prefix><![CDATA[PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX nm: <http://nomisma.org/id/>
PREFIX nmo: <http://nomisma.org/ontology#>
PREFIX org: <http://www.w3.org/ns/org#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX un: <http://www.owl-ontologies.com/Ontology1181490123.owl#>]]></prefix>
<query id="uncertainty">SELECT ?uri ?label WHERE {?uri a un:Uncertainty ; skos:prefLabel ?label . FILTER(langMatches(lang(?label), "en"))} ORDER BY ?label</query>
<query id="role">SELECT ?uri ?label WHERE {?uri a org:Role ; skos:prefLabel ?label . FILTER(langMatches(lang(?label), "en"))} ORDER BY ?label</query>
<query id="fon">SELECT ?uri ?label WHERE {?uri a nmo:FieldOfNumismatics ; skos:prefLabel ?label . FILTER(langMatches(lang(?label), "en"))} ORDER BY ?label</query>
</templates>
</xforms:instance>
<xforms:instance id="sparqlResponse">
<sparql xmlns="http://www.w3.org/2005/sparql-results#"></sparql>
</xforms:instance>
<xforms:instance id="viaf-response">
<rss xmlns=""></rss>
</xforms:instance>
<xforms:bind nodeset="instance('list')">
<xforms:bind nodeset="@title" required="true()"></xforms:bind>
<xforms:bind nodeset="item" required="true()" type="xs:string">
<xforms:bind nodeset="@lang"
constraint="string-length(.) &gt; 0 and count(ancestor::list/item[@lang='en']) = 1 and count(ancestor::list/item/@lang) = count(distinct-values(ancestor::list/item/@lang))"
></xforms:bind>
</xforms:bind>
</xforms:bind>
<xforms:bind nodeset="instance('rdf')/rdf:Description">
<xforms:bind nodeset="//@rdf:resource" required="true()"></xforms:bind>
<xforms:bind nodeset="dcterms:modified" type="m.data.standardDate"></xforms:bind>
<xforms:bind nodeset="dcterms:title" required="true()">
<xforms:bind nodeset="@xml:lang" constraint="string-length(.) &gt; 0"></xforms:bind>
</xforms:bind>
</xforms:bind>
<xforms:bind nodeset="instance('control-instance')">
<xforms:bind id="save-trigger" nodeset="save-trigger" type="xs:boolean" readonly=". != true()"></xforms:bind>
</xforms:bind>
<!-- **************** MODEL-CONSTRUCT-DONE ********************** -->
<xforms:action ev:event="xforms-model-construct-done">
<xforms:setvalue ref="instance('sparqlQuery')" value="concat(instance('sparql-templates')/prefix, ' ', instance('sparql-templates')/query[@id='fon'])"></xforms:setvalue>
<xforms:send submission="submit-sparqlQuery"></xforms:send>
<xforms:action xxforms:iterate="instance('sparqlResponse')//res:result" ev:event="xforms-submit-done">
<xforms:var name="uri" select="data(res:binding[@name='uri']/res:uri)"></xforms:var>
<xforms:var name="label" select="data(res:binding[@name='label']/res:literal)"></xforms:var>
<xforms:insert context="instance('fon-list')" nodeset="./child::node()[last()]" origin="xforms:element('item', (xforms:attribute('uri', $uri), $label))"></xforms:insert>
</xforms:action>
<!-- insert creation -->
<xforms:insert context="instance('rdf')/rdf:Description" nodeset="./child::node()[last()]"
origin="xforms:element('dcterms:created', (xforms:attribute('rdf:datatype', 'http://www.w3.org/2001/XMLSchema#date'), current-dateTime()))"></xforms:insert>
</xforms:action>
<!-- **************** DYNAMIC VALIDATION CONTROLS ********************** -->
<xforms:action ev:event="xxforms-invalid" ev:observer="rdf">
<xforms:setvalue ref="instance('control-instance')/save-trigger" value="false()"></xforms:setvalue>
</xforms:action>
<xforms:action ev:event="xxforms-valid" ev:observer="rdf">
<xforms:setvalue ref="instance('control-instance')/save-trigger" value="true()"></xforms:setvalue>
</xforms:action>
<!-- **************** XFORMS-READY ********************** -->
<xforms:action ev:event="xforms-ready">
<!-- enable save trigger if the document is valid on ready -->
<xforms:setvalue ref="instance('control-instance')/save-trigger" value="true()" if="xxforms:valid(instance('rdf'), true())"></xforms:setvalue>
</xforms:action>
<!-- ************* SPARQL SUBMISSIONS **********************-->
<!-- SPARQL queries -->
<xforms:submission id="submit-sparqlQuery" action="http://nomisma.org/query?query={encode-for-uri(instance('sparqlQuery'))}&amp;output=xml" ref="instance('sparqlResponse')"
replace="instance" method="get">
<xforms:message ev:event="xforms-submit-error" level="modal">SPARQL query failed.</xforms:message>
</xforms:submission>
<!-- VIAF RSS Feed -->
<xforms:submission id="query-viaf" serialization="none" method="get"
action="http://viaf.org/viaf/search?query={instance('control-instance')/viaf-field}+all+%22{instance('control-instance')/viaf-query}%22&amp;sortKeys=holdingscount&amp;maximumRecords=20&amp;httpAccept=application/rss%2bxml"
instance="viaf-response" replace="instance">
<xforms:message ev:event="xforms-submit-error" level="modal">Error querying VIAF.</xforms:message>
</xforms:submission>
<!-- custom types -->
<xs:schema elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:simpleType name="m.data.standardDate">
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:date">
<xs:maxInclusive value="2099-12-31"></xs:maxInclusive>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:gYear">
<xs:maxInclusive value="2099"></xs:maxInclusive>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:gYearMonth">
<xs:maxInclusive value="2099-12"></xs:maxInclusive>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:schema>
</xforms:model>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<h1>Test Form</h1>
<h2>Powerpoint Demo</h2>
<xforms:group ref=".[instance('list')//@lang[string-length(.) = 0]]">
<p>A language attribute is empty.</p>
</xforms:group>
<xforms:trigger>
<xforms:label>Add Item</xforms:label>
<xforms:action ev:event="DOMActivate">
<xforms:insert context="instance('list')" nodeset="./child::node()[last()]" origin="instance('item-template')"></xforms:insert>
<xforms:insert context="instance('list')/item[last()]" origin="xforms:attribute('lang', instance('languages')/lang[1]/@code)"></xforms:insert>
<xforms:setvalue ref="instance('list')/item[last()]" value="'test'"></xforms:setvalue>
</xforms:action>
</xforms:trigger>
<xforms:group ref="instance('list')">
<div>
<xforms:input ref="@title">
<xforms:label>Title</xforms:label>
<xforms:alert>Required</xforms:alert>
</xforms:input>
</div>
<xforms:repeat nodeset="item">
<h3>Item <small><xforms:trigger appearance="minimal">
<xforms:delete ev:event="DOMActivate" context="."></xforms:delete>
<xforms:label>Delete</xforms:label>
</xforms:trigger></small></h3>
<div>
<xforms:input ref=".">
<xforms:label>Item</xforms:label>
<xforms:alert>Required</xforms:alert>
</xforms:input>
</div>
<div>
<xforms:select1 ref="@lang">
<xforms:label>Language</xforms:label>
<xforms:alert>Required</xforms:alert>
<xforms:item>
<xforms:label>Select...</xforms:label>
<xforms:value></xforms:value>
</xforms:item>
<xforms:itemset nodeset="instance('languages')/lang">
<xforms:label ref="."></xforms:label>
<xforms:value ref="@code"></xforms:value>
</xforms:itemset>
</xforms:select1>
</div>
</xforms:repeat>
</xforms:group>
<hr />
<h2>Misc.</h2>
<p>A dynamic Save button that becomes disabled when the instance is invalid.</p>
<div class="submission">
<xforms:trigger bind="save-trigger">
<xforms:label><span class="glyphicon glyphicon-floppy-disk"></span>Save</xforms:label>
<xforms:action ev:event="DOMActivate">
<xforms:message level="modal">Hook up an xforms:submission here, or other xforms:actions.</xforms:message>
</xforms:action>
</xforms:trigger>
</div>
<p>Constructing very basic RDF</p>
<xforms:group ref="instance('rdf')/rdf:Description">
<div>
<xforms:trigger appearance="minimal">
<xforms:label><span class="glyphicon glyphicon-plus"></span>Title</xforms:label>
<xforms:action ev:event="DOMActivate">
<xforms:insert context="." nodeset="./child::node()[last()]" origin="xforms:element('dcterms:title', '')"></xforms:insert>
</xforms:action>
</xforms:trigger>
<xforms:trigger appearance="minimal">
<xforms:label><span class="glyphicon glyphicon-plus"></span>Field of Numismatics</xforms:label>
<xforms:action ev:event="DOMActivate">
<xforms:insert context="." nodeset="./child::node()[last()]" origin="xforms:element('dcterms:isPartOf', (xforms:attribute('rdf:resource', ''), ''))"
></xforms:insert>
</xforms:action>
</xforms:trigger>
<xforms:group ref=".[count(dcterms:modified) = 0]">
<xforms:trigger appearance="minimal">
<xforms:label><span class="glyphicon glyphicon-plus"></span>Modified</xforms:label>
<xforms:action ev:event="DOMActivate">
<xforms:insert context="." nodeset="./child::node()[last()]" origin="xforms:element('dcterms:modified', '')"
></xforms:insert>
</xforms:action>
</xforms:trigger>
</xforms:group>
</div>
<xforms:repeat nodeset="dcterms:title">
<h4>Title Group <small><xforms:group ref=".[count(parent::node()/dcterms:title) &gt; 1]">
<xforms:trigger appearance="minimal">
<xforms:delete ev:event="DOMActivate" context="."></xforms:delete>
<xforms:label><span class="glyphicon glyphicon-remove"></span></xforms:label>
</xforms:trigger>
</xforms:group></small></h4>
<div>
<xforms:input ref=".">
<xforms:label>Title</xforms:label>
<xforms:alert>Required</xforms:alert>
</xforms:input>
<xforms:group ref=".[not(@xml:lang)]">
<xforms:trigger appearance="minimal">
<xforms:label><span class="glyphicon glyphicon-plus"></span>Language</xforms:label>
<xforms:insert context="." origin="xforms:attribute('xml:lang', '')" ev:event="DOMActivate"></xforms:insert>
</xforms:trigger>
</xforms:group>
</div>
<xforms:group ref="@xml:lang">
<div>
<xforms:select1 ref=".">
<xforms:label>Language</xforms:label>
<xforms:alert>Required</xforms:alert>
<xforms:item>
<xforms:label>Select...</xforms:label>
<xforms:value></xforms:value>
</xforms:item>
<xforms:itemset nodeset="instance('languages')/lang">
<xforms:label ref="."></xforms:label>
<xforms:value ref="@code"></xforms:value>
</xforms:itemset>
</xforms:select1>
<xforms:trigger appearance="minimal">
<xforms:delete ev:event="DOMActivate" context="."></xforms:delete>
<xforms:label><span class="glyphicon glyphicon-remove"></span></xforms:label>
</xforms:trigger>
</div>
</xforms:group>
</xforms:repeat>
<div>
<xforms:output ref="dcterms:created">
<xforms:label>Date (literal)</xforms:label>
</xforms:output>
</div>
<div>
<xforms:output value="format-dateTime(dcterms:created, '[h1]:[m01] [P] on [MNn] [D].')">
<xforms:label>Date (formatted)</xforms:label>
</xforms:output>
</div>
<xforms:group ref="dcterms:modified">
<div>
<xforms:input ref=".">
<xforms:label>Modified</xforms:label>
<xforms:alert>Invalid date</xforms:alert>
</xforms:input>
<xforms:trigger appearance="minimal">
<xforms:delete ev:event="DOMActivate" context="."></xforms:delete>
<xforms:label><span class="glyphicon glyphicon-remove"></span></xforms:label>
</xforms:trigger>
</div>
</xforms:group>
<xforms:repeat nodeset="dcterms:isPartOf">
<div>
<xforms:select1 ref="@rdf:resource">
<xforms:label>Discipline</xforms:label>
<xforms:alert>URI Required</xforms:alert>
<xforms:item>
<xforms:label>Select...</xforms:label>
<xforms:value></xforms:value>
</xforms:item>
<xforms:itemset nodeset="instance('fon-list')//item">
<xforms:label ref="."></xforms:label>
<xforms:value ref="@uri"></xforms:value>
</xforms:itemset>
</xforms:select1>
<xforms:trigger appearance="minimal">
<xforms:delete ev:event="DOMActivate" context="."></xforms:delete>
<xforms:label><span class="glyphicon glyphicon-remove"></span></xforms:label>
</xforms:trigger>
</div>
</xforms:repeat>
<xforms:repeat nodeset="dcterms:creator">
<div>
<xforms:input ref="@rdf:resource">
<xforms:label>Creator</xforms:label>
<xforms:alert>URI Required</xforms:alert>
</xforms:input>
<xforms:trigger appearance="minimal">
<xforms:delete ev:event="DOMActivate" context="."></xforms:delete>
<xforms:label><span class="glyphicon glyphicon-remove"></span></xforms:label>
</xforms:trigger>
</div>
</xforms:repeat>
<div>
<h4>Search VIAF</h4>
<div>
<xforms:select1 ref="instance('control-instance')/viaf-field" appearance="full">
<xforms:item>
<xforms:label>Persons</xforms:label>
<xforms:value>local.personalNames</xforms:value>
</xforms:item>
<xforms:item>
<xforms:label>Corporate Bodies</xforms:label>
<xforms:value>local.corporateNames</xforms:value>
</xforms:item>
</xforms:select1>
</div>
<div>
<xforms:input ref="instance('control-instance')/viaf-query" />
<xforms:trigger>
<xforms:label>Search</xforms:label>
<xforms:action ev:event="DOMActivate">
<xforms:send submission="query-viaf"></xforms:send>
</xforms:action>
</xforms:trigger>
</div>
<xforms:group ref=".[count(instance('viaf-response')//item) &gt; 0]">
<xforms:select1 ref="instance('control-instance')/viaf-uri" appearance="compact" size="10">
<xforms:itemset nodeset="instance('viaf-response')//item">
<xforms:label ref="title"></xforms:label>
<xforms:value ref="link"></xforms:value>
</xforms:itemset>
</xforms:select1>
<xforms:trigger>
<xforms:label>Add Creator</xforms:label>
<xforms:action ev:event="DOMActivate">
<xforms:var name="uri" select="instance('control-instance')/viaf-uri"></xforms:var>
<xforms:insert context="instance('rdf')/rdf:Description" nodeset="./child::node()[last()]"
origin="xforms:element('dcterms:creator', (xforms:attribute('rdf:resource', $uri), ''))"></xforms:insert>
</xforms:action>
</xforms:trigger>
<xforms:trigger>
<xforms:label>Clear</xforms:label>
<xforms:action ev:event="DOMActivate">
<xforms:delete nodeset="instance('viaf-response')/*"></xforms:delete>
<xforms:setvalue ref="instance('control-instance')/viaf-query"></xforms:setvalue>
</xforms:action>
</xforms:trigger>
</xforms:group>
</div>
</xforms:group>
<hr />
<fr:xforms-inspector></fr:xforms-inspector>
</div>
</div>
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment