Created
June 12, 2015 01:22
-
-
Save ewg118/d5a3e4624c3075764d81 to your computer and use it in GitHub Desktop.
Basic XForms Introduction
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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(.) > 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(.) > 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'))}&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&sortKeys=holdingscount&maximumRecords=20&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) > 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) > 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