Changeset 3379


Ignore:
Timestamp:
08/14/13 15:02:02 (11 years ago)
Author:
mwindhouwer
Message:

M urn.org.basex.rest/rest/query.dpml

  • can now also handle variables with XML values
  • looks in the BaseX result to see if there was an error message, if so turn that info an exception

M data*

  • use the sc prefix for the SCHEMAcat namespace everywhere

M urn.org.isocat.schemacat.access.data/test/testlist.xml

  • added tests for user data management

M urn.org.isocat.schemacat.access.data/access/user.dpml

  • EXISTS and SOURCE work with id or principal
  • NEW works
  • TODO: SINK

M urn.org.isocat.schemacat.access.data/debug

  • will contain debug output for test runs
Location:
cats/SCHEMAcat/trunk
Files:
1 added
18 edited

Legend:

Unmodified
Added
Removed
  • cats/SCHEMAcat/trunk/data/schemata/AdelheidTag/index.schemacat

    r3005 r3379  
    11<?xml-model href=""?>
    2 <schema xmlns="http://www.isocat.org/ns/schemacat">
    3   <name>AdelheidTag</name>
    4   <version/>
    5   <status>production</status>
    6   <tag type="group">Adelheid</tag>
    7   <pid>hdl:1839/00-SCHM-0000-0000-0012-8</pid>
    8   <owner type="user" ref="u1"/>
    9   <files>
    10     <file type="main">
    11       <name>AdelheidTag.ebnf</name>
    12       <type ref="iso-ebnf"/>
    13     </file>
    14   </files>
    15 </schema>
     2<sc:schema xmlns:sc="http://www.isocat.org/ns/schemacat">
     3  <sc:name>AdelheidTag</sc:name>
     4  <sc:version/>
     5  <sc:status>production</sc:status>
     6  <sc:tag type="group">Adelheid</sc:tag>
     7  <sc:pid>hdl:1839/00-SCHM-0000-0000-0012-8</sc:pid>
     8  <sc:owner type="user" ref="u1"/>
     9  <sc:files>
     10    <sc:file type="main">
     11      <sc:name>AdelheidTag.ebnf</sc:name>
     12      <sc:type ref="iso-ebnf"/>
     13    </sc:file>
     14  </sc:files>
     15</sc:schema>
  • cats/SCHEMAcat/trunk/data/schemata/CGN/index.schemacat

    r3005 r3379  
    11<?xml-model href=""?>
    2 <schema xmlns="http://www.isocat.org/ns/schemacat">
    3   <name>CGN</name>
    4   <version/>
    5   <status>development</status>
    6   <tag type="group">Corpus Gesproken Nederlands</tag>
    7   <pid>hdl:1839/00-SCHM-0000-0000-004A-A</pid>
    8   <owner type="user" ref="u1"/>
    9   <files>
    10     <file type="main">
    11       <name>CGN.ebnf</name>
    12       <type ref="iso-ebnf"/>
    13     </file>
    14   </files>
    15 </schema>
     2<sc:schema xmlns:sc="http://www.isocat.org/ns/schemacat">
     3  <sc:name>CGN</sc:name>
     4  <sc:version/>
     5  <sc:status>development</sc:status>
     6  <sc:tag type="group">Corpus Gesproken Nederlands</sc:tag>
     7  <sc:pid>hdl:1839/00-SCHM-0000-0000-004A-A</sc:pid>
     8  <sc:owner type="user" ref="u1"/>
     9  <sc:files>
     10    <sc:file type="main">
     11      <sc:name>CGN.ebnf</sc:name>
     12      <sc:type ref="iso-ebnf"/>
     13    </sc:file>
     14  </sc:files>
     15</sc:schema>
  • cats/SCHEMAcat/trunk/data/schemata/TEI-header-2.1.0/index.schemacat

    r3005 r3379  
    11<?xml-model href=""?>
    2 <schema xmlns="http://www.isocat.org/ns/schemacat">
    3   <name>TEI-header</name>
    4   <version>2.1.0</version>
    5   <status>development</status>
    6   <pid/>
    7   <tag type="group">TEI 2.1.0</tag>
    8   <owner type="user" ref="u1"/>
    9   <files>
    10     <file type="main">
    11       <name>header.rng</name>
    12       <type ref="relaxng"/>
    13     </file>
    14   </files>
    15 </schema>
     2<sc:schema xmlns:sc="http://www.isocat.org/ns/schemacat">
     3  <sc:name>TEI-header</sc:name>
     4  <sc:version>2.1.0</sc:version>
     5  <sc:status>development</sc:status>
     6  <sc:pid/>
     7  <sc:tag type="group">TEI 2.1.0</sc:tag>
     8  <sc:owner type="user" ref="u1"/>
     9  <sc:files>
     10    <sc:file type="main">
     11      <sc:name>header.rng</sc:name>
     12      <sc:type ref="relaxng"/>
     13    </sc:file>
     14  </sc:files>
     15</sc:schema>
  • cats/SCHEMAcat/trunk/data/schemata/adelheid-charstream/index.schemacat

    r3005 r3379  
    11<?xml-model href=""?>
    2 <schema xmlns="http://www.isocat.org/ns/schemacat">
    3   <name>adelheid-charstream</name>
    4   <version/>
    5   <status>production</status>
    6   <tag type="group">Adelheid</tag>
    7   <pid>hdl:1839/00-SCHM-0000-0000-000F-1</pid>
    8   <owner type="user" ref="u1"/>
    9   <files>
    10     <file type="main">
    11       <name>adelheid-charstream.xsd</name>
    12       <type ref="xsd-1.0"/>
    13     </file>
    14   </files>
    15 </schema>
     2<sc:schema xmlns:sc="http://www.isocat.org/ns/schemacat">
     3  <sc:name>adelheid-charstream</sc:name>
     4  <sc:version/>
     5  <sc:status>production</sc:status>
     6  <sc:tag type="group">Adelheid</sc:tag>
     7  <sc:pid>hdl:1839/00-SCHM-0000-0000-000F-1</sc:pid>
     8  <sc:owner type="user" ref="u1"/>
     9  <sc:files>
     10    <sc:file type="main">
     11      <sc:name>adelheid-charstream.xsd</sc:name>
     12      <sc:type ref="xsd-1.0"/>
     13    </sc:file>
     14  </sc:files>
     15</sc:schema>
  • cats/SCHEMAcat/trunk/data/schemata/adelheid-document/index.schemacat

    r3005 r3379  
    11<?xml-model href=""?>
    2 <schema xmlns="http://www.isocat.org/ns/schemacat">
    3   <name>adelheid-document</name>
    4   <version/>
    5   <status>production</status>
    6   <tag type="group">Adelheid</tag>
    7   <pid>hdl:1839/00-SCHM-0000-0000-0010-C</pid>
    8   <owner type="user" ref="u1"/>
    9   <files>
    10     <file type="main">
    11       <name>adelheid-document.xsd</name>
    12       <type ref="xsd-1.0"/>
    13     </file>
    14   </files>
    15 </schema>
     2<sc:schema xmlns:sc="http://www.isocat.org/ns/schemacat">
     3  <sc:name>adelheid-document</sc:name>
     4  <sc:version/>
     5  <sc:status>production</sc:status>
     6  <sc:tag type="group">Adelheid</sc:tag>
     7  <sc:pid>hdl:1839/00-SCHM-0000-0000-0010-C</sc:pid>
     8  <sc:owner type="user" ref="u1"/>
     9  <sc:files>
     10    <sc:file type="main">
     11      <sc:name>adelheid-document.xsd</sc:name>
     12      <sc:type ref="xsd-1.0"/>
     13    </sc:file>
     14  </sc:files>
     15</sc:schema>
  • cats/SCHEMAcat/trunk/data/schemata/adelheid-lexicon/index.schemacat

    r3005 r3379  
    11<?xml-model href=""?>
    2 <schema xmlns="http://www.isocat.org/ns/schemacat">
    3   <name>adelheid-lexicon</name>
    4   <version/>
    5   <status>production</status>
    6   <tag type="group">Adelheid</tag>
    7   <pid>hdl:1839/00-SCHM-0000-0000-0011-A</pid>
    8   <owner type="user" ref="u1"/>
    9   <files>
    10     <file type="main">
    11       <name>adelheid-lexicon.xsd</name>
    12       <type ref="xsd-1.0"/>
    13     </file>
    14   </files>
    15 </schema>
     2<sc:schema xmlns:sc="http://www.isocat.org/ns/schemacat">
     3  <sc:name>adelheid-lexicon</sc:name>
     4  <sc:version/>
     5  <sc:status>production</sc:status>
     6  <sc:tag type="group">Adelheid</sc:tag>
     7  <sc:pid>hdl:1839/00-SCHM-0000-0000-0011-A</sc:pid>
     8  <sc:owner type="user" ref="u1"/>
     9  <sc:files>
     10    <sc:file type="main">
     11      <sc:name>adelheid-lexicon.xsd</sc:name>
     12      <sc:type ref="xsd-1.0"/>
     13    </sc:file>
     14  </sc:files>
     15</sc:schema>
  • cats/SCHEMAcat/trunk/data/schemata/avatech-tier/index.schemacat

    r3005 r3379  
    11<?xml-model href=""?>
    2 <schema xmlns="http://www.isocat.org/ns/schemacat">
    3   <name>avatech-timeseries</name>
    4   <version/>
    5   <status>production</status>
    6   <tag type="group">AVATecH</tag>
    7   <pid>hdl:1839/00-SCHM-0000-0000-0014-4</pid>
    8   <owner type="user" ref="u1"/>
    9   <files>
    10     <file type="main">
    11       <name>avatech-timeseries.xsd</name>
    12       <type ref="xsd-1.0"/>
    13     </file>
    14   </files>
    15 </schema>
     2<sc:schema xmlns:sc="http://www.isocat.org/ns/schemacat">
     3  <sc:name>avatech-timeseries</sc:name>
     4  <sc:version/>
     5  <sc:status>production</sc:status>
     6  <sc:tag type="group">AVATecH</sc:tag>
     7  <sc:pid>hdl:1839/00-SCHM-0000-0000-0014-4</sc:pid>
     8  <sc:owner type="user" ref="u1"/>
     9  <sc:files>
     10    <sc:file type="main">
     11      <sc:name>avatech-timeseries.xsd</sc:name>
     12      <sc:type ref="xsd-1.0"/>
     13    </sc:file>
     14  </sc:files>
     15</sc:schema>
  • cats/SCHEMAcat/trunk/data/schemata/avatech-timeseries/index.schemacat

    r3005 r3379  
    11<?xml-model href=""?>
    2 <schema xmlns="http://www.isocat.org/ns/schemacat">
    3   <name>avatech-tier</name>
    4   <version/>
    5   <status>production</status>
    6   <tag type="group">AVATecH</tag>
    7   <pid>hdl:1839/00-SCHM-0000-0000-0013-6</pid>
    8   <owner type="user" ref="u1"/>
    9   <files>
    10     <file type="main">
    11       <name>avatech-tier.xsd</name>
    12       <type ref="xsd-1.0"/>
    13     </file>
    14   </files>
    15 </schema>
     2<sc:schema xmlns:sc="http://www.isocat.org/ns/schemacat">
     3  <sc:name>avatech-tier</sc:name>
     4  <sc:version/>
     5  <sc:status>production</sc:status>
     6  <sc:tag type="group">AVATecH</sc:tag>
     7  <sc:pid>hdl:1839/00-SCHM-0000-0000-0013-6</sc:pid>
     8  <sc:owner type="user" ref="u1"/>
     9  <sc:files>
     10    <sc:file type="main">
     11      <sc:name>avatech-tier.xsd</sc:name>
     12      <sc:type ref="xsd-1.0"/>
     13    </sc:file>
     14  </sc:files>
     15</sc:schema>
  • cats/SCHEMAcat/trunk/data/schemata/sonar-cgn/index.schemacat

    r3005 r3379  
    11<?xml-model href=""?>
    2 <schema xmlns="http://www.isocat.org/ns/schemacat">
    3   <name>sonar-cgn</name>
    4   <version/>
    5   <status>development</status>
    6   <tag type="group">SONAR</tag>
    7   <pid>hdl:1839/00-SCHM-0000-0000-000B-9</pid>
    8   <owner type="user" ref="u1"/>
    9   <files>
    10     <file type="main">
    11       <name>placeholder.xml</name>
    12       <type ref="FOLiA-set-def"/>
    13     </file>
    14   </files>
    15 </schema>
     2<sc:schema xmlns:sc="http://www.isocat.org/ns/schemacat">
     3  <sc:name>sonar-cgn</sc:name>
     4  <sc:version/>
     5  <sc:status>development</sc:status>
     6  <sc:tag type="group">SONAR</sc:tag>
     7  <sc:pid>hdl:1839/00-SCHM-0000-0000-000B-9</sc:pid>
     8  <sc:owner type="user" ref="u1"/>
     9  <sc:files>
     10    <sc:file type="main">
     11      <sc:name>placeholder.xml</sc:name>
     12      <sc:type ref="FOLiA-set-def"/>
     13    </sc:file>
     14  </sc:files>
     15</sc:schema>
  • cats/SCHEMAcat/trunk/data/schemata/sonar-events/index.schemacat

    r3005 r3379  
    11<?xml-model href=""?>
    2 <schema xmlns="http://www.isocat.org/ns/schemacat">
    3   <name>sonar-events</name>
    4   <version/>
    5   <status>development</status>
    6   <tag type="group">SONAR</tag>
    7   <pid>hdl:1839/00-SCHM-0000-0000-000A-B</pid>
    8   <owner type="user" ref="u1"/>
    9   <files>
    10     <file type="main">
    11       <name>placeholder.xml</name>
    12       <type ref="FOLiA-set-def"/>
    13     </file>
    14   </files>
    15 </schema>
     2<sc:schema xmlns:sc="http://www.isocat.org/ns/schemacat">
     3  <sc:name>sonar-events</sc:name>
     4  <sc:version/>
     5  <sc:status>development</sc:status>
     6  <sc:tag type="group">SONAR</sc:tag>
     7  <sc:pid>hdl:1839/00-SCHM-0000-0000-000A-B</sc:pid>
     8  <sc:owner type="user" ref="u1"/>
     9  <sc:files>
     10    <sc:file type="main">
     11      <sc:name>placeholder.xml</sc:name>
     12      <sc:type ref="FOLiA-set-def"/>
     13    </sc:file>
     14  </sc:files>
     15</sc:schema>
  • cats/SCHEMAcat/trunk/data/schemata/sonar-lemmas/index.schemacat

    r3005 r3379  
    11<?xml-model href=""?>
    2 <schema xmlns="http://www.isocat.org/ns/schemacat">
    3   <name>sonar-lemmas</name>
    4   <version/>
    5   <status>development</status>
    6   <tag type="group">SONAR</tag>
    7   <pid>hdl:1839/00-SCHM-0000-0000-000E-3</pid>
    8   <owner type="user" ref="u1"/>
    9   <files>
    10     <file type="main">
    11       <name>placeholder.xml</name>
    12       <type ref="FOLiA-set-def"/>
    13     </file>
    14   </files>
    15 </schema>
     2<sc:schema xmlns:sc="http://www.isocat.org/ns/schemacat">
     3  <sc:name>sonar-lemmas</sc:name>
     4  <sc:version/>
     5  <sc:status>development</sc:status>
     6  <sc:tag type="group">SONAR</sc:tag>
     7  <sc:pid>hdl:1839/00-SCHM-0000-0000-000E-3</sc:pid>
     8  <sc:owner type="user" ref="u1"/>
     9  <sc:files>
     10    <sc:file type="main">
     11      <sc:name>placeholder.xml</sc:name>
     12      <sc:type ref="FOLiA-set-def"/>
     13    </sc:file>
     14  </sc:files>
     15</sc:schema>
  • cats/SCHEMAcat/trunk/data/schemata/sonar-ne/index.schemacat

    r3005 r3379  
    11<?xml-model href=""?>
    2 <schema xmlns="http://www.isocat.org/ns/schemacat">
    3   <name>sonar-ne</name>
    4   <version/>
    5   <status>development</status>
    6   <tag type="group">SONAR</tag>
    7   <pid>hdl:1839/00-SCHM-0000-0000-000D-5</pid>
    8   <owner type="user" ref="u1"/>
    9   <files>
    10     <file type="main">
    11       <name>placeholder.xml</name>
    12       <type ref="FOLiA-set-def"/>
    13     </file>
    14   </files>
    15 </schema>
     2<sc:schema xmlns:sc="http://www.isocat.org/ns/schemacat">
     3  <sc:name>sonar-ne</sc:name>
     4  <sc:version/>
     5  <sc:status>development</sc:status>
     6  <sc:tag type="group">SONAR</sc:tag>
     7  <sc:pid>hdl:1839/00-SCHM-0000-0000-000D-5</sc:pid>
     8  <sc:owner type="user" ref="u1"/>
     9  <sc:files>
     10    <sc:file type="main">
     11      <sc:name>placeholder.xml</sc:name>
     12      <sc:type ref="FOLiA-set-def"/>
     13    </sc:file>
     14  </sc:files>
     15</sc:schema>
  • cats/SCHEMAcat/trunk/data/users.schemacat

    r3005 r3379  
    1 <users xmlns="http://www.isocat.org/ns/schemacat">
    2   <user xml:id="u0">
    3     <principal>guest</principal>
    4     <displayName>guest</displayName>
    5     <role>guest</role>
    6   </user>
    7   <user xml:id="u1">
    8     <principal>Menzo.Windhouwer_mpi.nl@clarin.eu</principal>
    9     <displayName>Menzo Windhouwer</displayName>
    10     <email type="main">menzo.windhouwer@dans.knaw.nl</email>
    11     <role>admin</role>
    12     <role>user</role>
    13   </user>
    14 </users>
     1<sc:users xmlns:sc="http://www.isocat.org/ns/schemacat">
     2  <sc:user xml:id="u0">
     3    <sc:principal>guest</sc:principal>
     4    <sc:displayName>guest</sc:displayName>
     5    <sc:role>guest</sc:role>
     6  </sc:user>
     7  <sc:user xml:id="u1">
     8    <sc:principal>Menzo.Windhouwer_mpi.nl@clarin.eu</sc:principal>
     9    <sc:displayName>Menzo Windhouwer</sc:displayName>
     10    <sc:email type="main">menzo.windhouwer@dans.knaw.nl</sc:email>
     11    <sc:role>admin</sc:role>
     12    <sc:role>user</sc:role>
     13  </sc:user>
     14</sc:users>
  • cats/SCHEMAcat/trunk/urn.org.basex.rest/rest/query.dpml

    r3179 r3379  
    5858                                                                        <xsl:message>DBG: variable name[<xsl:value-of select="name()"/>][doc('<xsl:value-of select="string(.)"/>')]</xsl:message>
    5959                                                                </xsl:if>
    60                                                                 <rest:variable name="{name()}" value="{unparsed-text(string(.))}"/>
     60                                                                <xsl:variable name="val" select="unparsed-text(string(.))"/>
     61                                                                <rest:variable name="{name()}" value="{$val}">
     62                                                                        <!-- snif if the value is XML -->
     63                                                                        <xsl:if test="matches(normalize-space($val),'&lt;.*&gt;')">
     64                                                                                <xsl:attribute name="type" select="'element()'"/>
     65                                                                        </xsl:if>
     66                                                                </rest:variable>
    6167                                                        </xsl:for-each>
    6268                                                </rest:query>
     
    144150                </request>
    145151        </sloot-profile>
     152        <!-- httpPost doesn't return the status code, check if we have a BaseX error text -->
     153        <if>
     154                <cond>
     155                        <request>
     156                                <identifier>active:javascript</identifier>
     157                                <argument name="operand">this:response</argument>
     158                                <argument name="operator">
     159                                        <literal type="string">
     160                                                var str = context.source("arg:operand",java.lang.String);
     161                                                context.createResponseFrom(str.startsWith("Stopped at "));                                             
     162                                        </literal>
     163                                </argument>
     164                        </request>
     165                </cond>
     166                <then>
     167                        <throw>
     168                                <id>
     169                                        <request>
     170                                                <identifier>active:javascript</identifier>
     171                                                <argument name="operand">this:response</argument>
     172                                                <argument name="operator">
     173                                                        <literal type="string">
     174                                                                var str = context.source("arg:operand",java.lang.String);
     175                                                                context.createResponseFrom(str.replaceAll("(?s)^.*\\[(.*?)\\].*$","$1"));
     176                                                        </literal>
     177                                                </argument>
     178                                        </request>
     179                                </id>
     180                                <message>
     181                                        <request>
     182                                                <identifier>active:javascript</identifier>
     183                                                <argument name="operand">this:response</argument>
     184                                                <argument name="operator">
     185                                                        <literal type="string">
     186                                                                var str = context.source("arg:operand",java.lang.String);
     187                                                                context.createResponseFrom(str.replaceAll("(?s)^.*\\] ",""));
     188                                                        </literal>
     189                                                </argument>
     190                                        </request>
     191                                </message>
     192                        </throw>
     193                </then>
     194        </if>
    146195        <!-- CHECK: do we always expect XML, so no atomic values or lists? -->
    147196        <sloot-debug>
  • cats/SCHEMAcat/trunk/urn.org.isocat.schemacat.access.data/access/user.dpml

    r3208 r3379  
    11<?xml version="1.0" encoding="UTF-8"?>
    22<sequence debug="false">
     3        <!-- resolve the references in arg:arguments -->
     4        <request assignment="arguments">
     5                <identifier>active:xslt2</identifier>
     6                <argument name="operand">arg:arguments</argument>
     7                <argument name="operator">
     8                        <literal type="xml">
     9                                <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     10                                        version="2.0">
     11                                        <xsl:template match="@*|node()">
     12                                                <xsl:copy>
     13                                                        <xsl:apply-templates select="@*|node()"/>
     14                                                </xsl:copy>
     15                                        </xsl:template>
     16                                        <!-- skip over sloot-operator, which is this DPML script -->
     17                                        <xsl:template match="sloot-operator" priority="1"/>
     18                                        <xsl:template match="arguments/*">
     19                                                <xsl:copy>
     20                                                        <xsl:apply-templates select="@*"/>
     21                                                        <xsl:variable name="val" select="unparsed-text(.)"/>
     22                                                        <xsl:message>DBG: <xsl:value-of select="name()"/>[<xsl:value-of select="."/>][<xsl:value-of select="$val"/>]</xsl:message>
     23                                                        <xsl:choose>
     24                                                                <!-- snif if the value is XML -->
     25                                                                <xsl:when test="matches(normalize-space($val),'&lt;.*&gt;')">
     26                                                                        <xsl:copy-of select="doc(.)"/>
     27                                                                </xsl:when>
     28                                                                <xsl:otherwise>
     29                                                                        <xsl:copy-of select="$val"/>
     30                                                                </xsl:otherwise>
     31                                                        </xsl:choose>
     32                                                </xsl:copy>
     33                                        </xsl:template>
     34                                </xsl:stylesheet>
     35                        </literal>
     36                </argument>
     37        </request>
     38        <request>
     39                <verb>SINK</verb>
     40                <identifier>res:/debug/org.isocat.schemacat.access.data.user.arguments.xml</identifier>
     41                <argument name="primary">arg:arguments</argument>
     42        </request>
     43        <request>
     44                <verb>SINK</verb>
     45                <identifier>res:/debug/org.isocat.schemacat.access.data.user.args.xml</identifier>
     46                <argument name="primary">this:arguments</argument>
     47        </request>
    348        <sloot-debug>
    449                <log>
    550                        <level>INFO</level>
    651                        <message>
    7                                 <literal type="string">user accessor verb: %1 for principal : %2</literal>
     52                                <literal type="string">user accessor verb: %1 with arguments: %2</literal>
    853                        </message>
    954                        <param>arg:verb</param>
    10                         <param>arg:principal</param>
     55                        <param>this:arguments</param>
    1156                        <!-- weird!! first call prints principal 2nd call print object id -->
    1257                </log>
     
    2873                                        <identifier>active:sloot.generateUUID</identifier>
    2974                                </request>
    30                                 <!-- compute the query string for creating a new user -->
    31                                 <request assignment="new-user-query">
    32                                         <identifier>active:xslt2</identifier>
    33                                         <argument name="operand">
    34                                                 <literal type="xml">
    35                                                         <dummy/>
    36                                                 </literal>
    37                                         </argument>
    38                                         <argument name="operator">
    39                                                 <literal type="xml">
    40                                                         <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    41                                                                 version="2.0" xmlns:rest="http://basex.org/rest">
    42                                                                 <xsl:param name="vararg"/>
    43                                                                 <xsl:template match="/">
    44                                                                         <query xmlns:sc="http://www.isocat.org/ns/schemacat">
    45                                                                                 <xsl:text>let $new-user := element user { attribute xml:id {$new-user-id}, element principal {$principal}, element displayName {$display-name}</xsl:text>
    46                                                                                 <xsl:for-each
    47                                                                                         select="$vararg/arguments/*[name() eq 'email']">
    48                                                                                         <xsl:text>, element email {'</xsl:text>
    49                                                                                         <xsl:value-of select="unparsed-text(string(.))"/>
    50                                                                                         <xsl:text>'}</xsl:text>
    51                                                                                 </xsl:for-each>
    52                                                                                 <!-- trying to use various roles. This reads the right number of roles passed but all their values resolve to
    53                                                                                 the first one passed!!!
    54                                                                                 If this work same can be used for emails -->
    55                                                                                 <xsl:for-each select="$vararg/arguments/*[name() eq 'role']">
    56                                                                                         <xsl:text>, element role {'</xsl:text>
    57                                                                                         <xsl:value-of select="unparsed-text(string(.))"/>
    58                                                                                         <xsl:text>'}</xsl:text>
    59                                                                                 </xsl:for-each>
    60                                                                                 <xsl:text>} return insert node $new-user into /sc:users </xsl:text>
    61                                                                         </query>
    62                                                                 </xsl:template>
    63                                                         </xsl:stylesheet>
    64                                                 </literal>
    65                                         </argument>
    66                                         <argument name="vararg">arg:arguments</argument>
    67                                 </request>
    68                                 <sloot-debug>
    69                                         <request>
    70                                                 <verb>SINK</verb>
    71                                                 <identifier>res:/debug/org.isocat.schemacat.access.data.user.new.query.xml</identifier>
    72                                                 <argument name="primary">arg:query</argument>
    73                                         </request>
    74                                 </sloot-debug>
    7575                                <!-- create the new user by running the query-->
     76                                <!-- we will only know the principal -->
    7677                                <request>
    7778                                        <identifier>active:org.basex.query</identifier>
    78                                         <argument name="operator">this:new-user-query</argument>
     79                                        <argument name="operator">
     80                                                <literal type="xml">
     81                                                        <query xmlns:sc="http://www.isocat.org/ns/schemacat">
     82                                                                let $old-user := /sc:users/*:user[@xml:id = $new-user-id or *:principal = $principal],
     83                                                                        $new-user := element sc:user {
     84                                                                                attribute xml:id {$new-user-id},
     85                                                                                element sc:principal {$principal},
     86                                                                                element sc:role{'user'}
     87                                                                        }
     88                                                                return
     89                                                                        if (empty($old-user))
     90                                                                        then (insert node $new-user into /sc:users)
     91                                                                        else (error(xs:QName('sc:uniqueUser'),'There exists already an user with this id or principal!'))
     92                                                        </query>
     93                                                </literal>
     94                                        </argument>
     95                                        <argument name="new-user-id">this:new-user-id</argument>
    7996                                        <argument name="principal">arg:principal</argument>
    80                                         <argument name="display-name">arg:display-name</argument>
    81                                         <argument name="new-user-id">this:new-user-id</argument>
    82                                 </request>
    83                                 <literal assignment="response" type="boolean">true</literal>
     97                                </request>
    8498                                <log>
    8599                                        <level>INFO</level>
    86100                                        <message>
    87                                                 <literal type="string">Created user for principal: [%1]</literal>
     101                                                <literal type="string">Created user[%1] for principal[%2]</literal>
    88102                                        </message>
     103                                        <param>this:new-user-id</param>
    89104                                        <param>arg:principal</param>
    90105                                </log>
    91                         </sequence>
    92                 </then>
    93                 <!-- This is the future code for the SINK verb to update a user info -->
    94                 <!--<cond>
     106                                <request assignment="response">
     107                                        <identifier>this:new-user-id</identifier>
     108                                </request>
     109                        </sequence>
     110                </then>
     111                <cond>
    95112                        <request>
    96113                                <identifier>active:sloot.xpath2</identifier>
     
    103120                <then>
    104121                        <sequence>
    105                                 <!-\- build the 'roles' element for the user -\->
     122                                <!-- build the 'roles' element for the user -->
    106123                                <request assignment="roles">
    107124                                        <identifier>active:xslt2</identifier>
     
    115132                                                        <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
    116133                                                        xmlns:rest="http://basex.org/rest">
     134                                                                <xsl:param name="vararg"/>
    117135                                                                <xsl:template match='/'>
    118136                                                                        <xsl:for-each select="$vararg/arguments/*[name() eq 'role']">
    119137                                                                                <xsl:text>element role {'</xsl:text>
    120                                                                                 <xsl:value-of select="{unparsed-text(string(.))}"/>
     138                                                                                <xsl:value-of select="."/>
    121139                                                                                <xsl:text>'}</xsl:text>
    122                                                                                 <xsl:if test='not(last(.))'>,</xsl:if>
     140                                                                                <xsl:if test='position()!=last()'>,</xsl:if>
    123141                                                                        </xsl:for-each>
    124142                                                                </xsl:template>
     
    126144                                                </literal>
    127145                                        </argument>
    128                                         <argument name="vararg">arg:arguments</argument>
    129                                 </request>
    130                                 <!-\- update the user info -\->
     146                                        <argument name="vararg">this:arguments</argument>
     147                                </request>
     148                                <!-- update the user info -->
    131149                                <request>
    132150                                        <identifier>active:org.basex.query</identifier>
     
    135153                                                        <query xmlns:sc="http://www.isocat.org/ns/schemacat">
    136154                                                                let $user :=
    137                                                                 element user { attribute xml:id {$user-id}, element principal
    138                                                                 {$principal}, element displayName {$display-name}, $roles }
    139                                                                 return replace node /sc:users/sc:user[@xml:id eq '$user-id'] with $user
     155                                                                element user { attribute xml:id {$args//id}, element principal
     156                                                                {$args//principal}, element displayName {$args//display-name}, $roles }
     157                                                                return replace node /sc:users/sc:user[(@xml:id eq '$args//id') or (sc:principal eq '$args//principal')] with $user
    140158                                                                </query>
    141159                                                </literal>
    142                                         <!-\-   replace value of node /sc:users/sc:user[@xml:id eq '$user-id']/sc:$field with '$new-value' -\->
    143                                         </argument>
    144                                         <argument name="user-id">arg:user-id</argument>
    145                                         <argument name="principal">arg:principal</argument>
    146                                         <argument name="display-name">arg:display-name</argument>
     160                                        <!--    replace value of node /sc:users/sc:user[@xml:id eq '$user-id']/sc:$field with '$new-value' -->
     161                                        </argument>
     162                                        <argument name="args">this:arguments</argument>
    147163                                        <argument name="roles">this:roles</argument>
    148164                                </request>
     
    156172                                </log>
    157173                        </sequence>
    158                 </then>-->
     174                </then>
    159175                <cond>
    160176                        <request>
     
    167183                </cond>
    168184                <then>
    169                         <!-- check if the user exists in the database -->
    170                         <!-- TODO: do we always search by principal? also support the user/@xml:id pattern 'u[0-9]+', which is unlikely(?) to clash with the principal? -->
    171                         <request>
    172                                 <identifier>active:org.basex.booleanQuery</identifier>
    173                                 <argument name="operator">
    174                                         <literal type="xml">
    175                                                 <query xmlns:sc="http://www.isocat.org/ns/schemacat">
    176                                                         <b>{exists(//sc:user[sc:principal=$principal])}</b>
    177                                                 </query>
    178                                         </literal>
    179                                 </argument>
    180                                 <argument name="principal">arg:principal</argument>
    181                         </request>
     185                        <sequence>
     186                                <!-- check if the user exists in the database -->
     187                                <request assignment="response">
     188                                        <identifier>active:org.basex.booleanQuery</identifier>
     189                                        <argument name="operator">
     190                                                <literal type="xml">
     191                                                        <query xmlns:sc="http://www.isocat.org/ns/schemacat">
     192                                                                <b>{exists((//sc:user[@xml:id=$args//id],//sc:user[sc:principal=$args//principal]))}</b>
     193                                                        </query>
     194                                                </literal>
     195                                        </argument>
     196                                        <argument name="args">this:arguments</argument>
     197                                </request>
     198                        </sequence>
    182199                </then>
    183200                <cond>
     
    198215                                                <literal type="xml">
    199216                                                        <query xmlns:sc="http://www.isocat.org/ns/schemacat">
    200                                                                 <sc:user>{(//sc:user[sc:principal=$principal]/@*,//sc:user[sc:principal=$principal]/*)}</sc:user>
     217                                                                <sc:user>{
     218                                                                        let $user := exactly-one((//sc:user[@xml:id=$args//id],//sc:user[sc:principal=$args//principal]))
     219                                                                        return ($user/@*,$user/*)
     220                                                                }</sc:user>
    201221                                                        </query>
    202222                                                </literal>
    203223                                        </argument>
    204                                         <argument name="principal">arg:principal</argument>
     224                                        <argument name="args">this:arguments</argument>
    205225                                </request>
    206226                                <!-- pass the document returned by basex trough sloot.xpath2 so
     
    242262                                </id>
    243263                                <message>
    244                                         <literal type="string">org.isocat.schemacat.data.user: unsupported verb!</literal>
     264                                        <literal type="string">org.isocat.schemacat.data.user: unsupported
     265                                                verb!</literal>
    245266                                </message>
    246267                        </throw>
  • cats/SCHEMAcat/trunk/urn.org.isocat.schemacat.access.data/etc/system/Tests.xml

    r3097 r3379  
    55                <name>SCHEMAcat - data</name>
    66                <desc>Access the data stored in SCHEMAcat</desc>
    7                 <uri>res:/access/test/testlist.xml</uri>
     7                <uri>res:/test/testlist.xml</uri>
    88        </test>
    99</tests>
  • cats/SCHEMAcat/trunk/urn.org.isocat.schemacat.access.data/module.xml

    r3208 r3379  
    2727                  <active>
    2828                     <identifier>active:org.isocat.schemacat.access.data.user</identifier>
    29                      <argument name="principal"/>
    30                      <argument name="user-id" min="0" max="1" />
    31                      <argument name="display-name" min="0" max="1" />
    32                      <argument name="email" min="0" />
     29                     <argument name="principal" min="0" max="1"/>
     30                     <argument name="id" min="0" max="1"/>
     31                     <argument name="display-name" min="0" max="1"/>
     32                     <argument name="email" min="0"/>
    3333                     <!-- AAM: trying to pass an arbritary number of roles (max 2 here). Not working1 -> cannot read the second role.
    3434                     Ideally this would be used for 'roles' and 'emails'-->
     
    3636                  </active>
    3737               </grammar>
    38                <verbs>EXISTS,NEW,SOURCE</verbs>
     38               <verbs>EXISTS,NEW,SOURCE,SINK</verbs>
    3939               <request>
    4040                  <identifier>active:sloot.dpml</identifier>
     
    9494         <regex>res:/test/.*</regex>
    9595      </fileset>
    96       <endpoint>
    97          <!-- stop any configuration from module under test from polluting address space -->
     96      <fileset>
     97         <regex>res:/debug/.*</regex>
     98         <mutable/>
     99      </fileset>
     100      <mapper>
     101         <config>
     102            <endpoint>
     103               <grammar>
     104                  <simple>res:/etc/BaseXConfig.xml</simple>
     105               </grammar>
     106               <request>
     107                  <identifier>active:org.isocat.schemacat.admin.config</identifier>
     108               </request>
     109            </endpoint>
     110         </config>
     111         <space>
     112            <import>
     113               <uri>urn:org:isocat:schemacat:admin</uri>
     114            </import>
     115         </space>
     116      </mapper>
     117      <!--<endpoint>
     118         <!-\- stop any configuration from module under test from polluting address space -\->
    98119         <prototype>Limiter</prototype>
    99120         <grammar>res:/etc/
    100121            <regex type="anything"/>
    101122         </grammar>
    102       </endpoint>
     123      </endpoint>-->
    103124      <import>
    104125         <!-- import the main space which we are testing -->
    105126         <uri>urn:org:isocat:schemacat:access:data</uri>
     127      </import>
     128      <import>
     129         <uri>urn:org:basex:rest</uri>
    106130      </import>
    107131      <import>
  • cats/SCHEMAcat/trunk/urn.org.isocat.schemacat.access.data/test/testlist.xml

    r3005 r3379  
    11<?xml version="1.0" encoding="UTF-8"?>
    22<testlist>
    3 
    4         <!--Add your tests here-->
    5         <test>
     3        <test name="SOURCE the guest user">
    64                <request>
    7                         <identifier>res:/THIS-WILL-FAIL-TO-RESOLVE-CHANGE-ME</identifier>
     5                        <verb>SOURCE</verb>
     6                        <identifier>active:org.isocat.schemacat.access.data.user</identifier>
     7                        <argument name="principal">
     8                                <literal type="string">guest</literal>
     9                        </argument>
    810                </request>
    911                <assert>
    10                         <exception/>
     12                        <notNull/>
    1113                </assert>
    1214        </test>
    13                
     15        <test name="SOURCE the guest user via u0">
     16                <request>
     17                        <verb>SOURCE</verb>
     18                        <identifier>active:org.isocat.schemacat.access.data.user</identifier>
     19                        <argument name="id">
     20                                <literal type="string">u0</literal>
     21                        </argument>
     22                </request>
     23                <assert>
     24                        <notNull/>
     25                </assert>
     26        </test>
     27        <test name="EXISTS the guest user via u0">
     28                <request>
     29                        <verb>EXISTS</verb>
     30                        <identifier>active:org.isocat.schemacat.access.data.user</identifier>
     31                        <argument name="id">
     32                                <literal type="string">u0</literal>
     33                        </argument>
     34                </request>
     35                <assert>
     36                        <true/>
     37                </assert>
     38        </test>
     39        <test name="NEW test user">
     40                <setup>
     41                        <identifier>active:org.basex.query</identifier>
     42                        <argument name="operator">
     43                                <literal type="xml">
     44                                        <query xmlns:sc="http://www.isocat.org/ns/schemacat">
     45                                                delete nodes /sc:users/sc:user[sc:principal='test']
     46                                        </query>
     47                                </literal>
     48                        </argument>
     49                </setup>
     50                <request>
     51                        <verb>NEW</verb>
     52                        <identifier>active:org.isocat.schemacat.access.data.user</identifier>
     53                        <argument name="principal">
     54                                <literal type="string">test</literal>
     55                        </argument>
     56                </request>
     57                <assert>
     58                        <notNull/>
     59                </assert>
     60        </test>
     61        <test name="EXISTS test user">
     62                <request>
     63                        <verb>EXISTS</verb>
     64                        <identifier>active:org.isocat.schemacat.access.data.user</identifier>
     65                        <argument name="principal">
     66                                <literal type="string">test</literal>
     67                        </argument>
     68                </request>
     69                <assert>
     70                        <true/>
     71                </assert>
     72        </test>
     73        <test name="SOURCE test user">
     74                <request>
     75                        <verb>SOURCE</verb>
     76                        <identifier>active:org.isocat.schemacat.access.data.user</identifier>
     77                        <argument name="principal">
     78                                <literal type="string">test</literal>
     79                        </argument>
     80                </request>
     81                <assert>
     82                        <notNull/>
     83                </assert>
     84        </test>
     85        <test name="SINK test user">
     86                <request>
     87                        <verb>SINK</verb>
     88                        <identifier>active:org.isocat.schemacat.access.data.user</identifier>
     89                        <argument name="principal">
     90                                <literal type="string">test</literal>
     91                        </argument>
     92                        <argument name="display-name">
     93                                <literal type="string">test cat</literal>
     94                        </argument >
     95                        <argument name="role">
     96                                <literal type="string">admin</literal>
     97                        </argument>
     98                        <argument name="role">
     99                                <literal type="string">moderator</literal>
     100                        </argument>
     101                </request>
     102                <assert>
     103                        <notNull/>
     104                </assert>
     105                <teardown>
     106                        <identifier>active:org.basex.query</identifier>
     107                        <argument name="operator">
     108                                <literal type="xml">
     109                                        <query xmlns:sc="http://www.isocat.org/ns/schemacat">
     110                                                delete nodes /sc:users/sc:user[sc:principal='test']
     111                                        </query>
     112                                </literal>
     113                        </argument>
     114                </teardown>
     115        </test>
    14116</testlist>
Note: See TracChangeset for help on using the changeset viewer.