Hi Christian,

The proposed signatures make sense to me. Copied from the github ticket:

db:properties($db as xs:string) as element(properties)*
db:properties($db as xs:string, $path as xs:string) as element(properties)*
db:property($db as xs:string, $path as xs:string, $key as xs:string) as 
xs:string
db:set-property($db as xs:string, $path as xs:string, $key as xs:string, $value 
as xs:string) as empty-sequence()
PROP GET
PROP GET [path]
PROP GET [path] [key]
PROP SET [path] [key] [value]

Possibly add signatures to allow removing a previously set property:

db:set-property($db as xs:string, $path as xs:string, $key as xs:string) as 
empty-sequence()
PROP SET [path] [key]

Allowing arbitrary strings as keys is definitely helpful. The returned values 
of db:properties and PROP GET could be like:

<properties resource="/path/to/file.xml">
<property name="prop1">value1</property>
<property name="prop2">value2</property>
</properties>

Any number of property key-value pairs could be set by users. The resource 
attribute would be unmodifiable, of course. 

Thinking of possible use cases, one might use something like the below example 
to find all documents with a specific property value:

for $a in db:properties('testdb')[properties/property[@name = 'prop1'][string() 
= 'value1']
return if (db:is-xml('testdb', $a/@resource)) then db:open('testdb', 
$a/@resource) else ()

Thanks,
Vincent


-----Original Message-----
From: [email protected] 
[mailto:[email protected]] On Behalf Of Christian Grün
Sent: Wednesday, September 03, 2014 9:43 AM
To: Marco Lettere
Cc: BaseX
Subject: Re: [basex-talk] db documents metadata

> Maybe something like the following could be a good compromise?
>
> <resource raw="false" content-type="application/xml"
> modified-date="2012-02-02T19:13:42.000Z" name="file.xml">  <property 
> name="prop1">value1</property>  <property 
> name="prop2">value2</property> </resource>

Funny, I also thought about this solution.. One advantage would be that we 
could use arbitrary strings as keys. However, it would make the output 
incompatible to previous versions (..unless we use another function for it).

More suggestions are welcome,
C.

Reply via email to