micropub-edit-examples

Create an Object

 * Some properties have a single value, some have multiple values, e.g.
 * name: Hello World
 * category: foo, bar

Requires:
 * Specify all the properties and values in the request

A

 * action=create
 * name=Hello World
 * content=post content here
 * category[]=foo&category[]=bar

B
Follow the example of 'h' and 'q', use single-letter control parameters. 'a' is the action, 'u' is the url to edit. Maybe 's' would replace mp-syndicate-to?


 * a=create
 * name=Hello World
 * content=post content here
 * category[]=foo&category[]=bar

Add a Value

 * Adding a new property to an object, e.g.
 * adding "syndication" when there were previously no other values for syndication
 * Adding a new value to an existing property, e.g.
 * adding an additional "category" property to the list

These two can be considered the same operation if you "auto-create" the property when the first value is added to it.

Requires:
 * Specify the existing object to edit
 * Specify the list of new properties and values to add

A

 * url=http://example.com/post/100
 * action=add
 * property=syndication
 * value=http://twitter.com/status...

A (alternate)

 * url=http://example.com/post/100
 * action=add
 * syndication=http://twitter.com/status...

B

 * u=http://example.com/post/100
 * a=add
 * syndication=http://twitter.com/status...

JSON Patch
Applied to the microformats jf2 representation of the object.

POST /micropub Content-type: application/json

{ "url": "http://example.com/post/100", "patch": [ { "op": "add", "path": "/syndication/-", "value": "http://twitter.com/status..." } ] }

Note that the JSON Patch spec requires that when appending values to an array, the array already exist. If the post does not already have a "syndication" property, the operation will fail. This means in order to support JSON Patch, a micropub endpoint would have to relax this requirement, or silently create all known vocabulary properties.

Replace a Value

 * Replace all values of a property with new values, e.g.
 * replacing the content of a post

Requires:
 * Specify the existing object to edit
 * Specify the existing property and new value

A

 * url=http://example.com/post/100
 * action=replace
 * property=content
 * value=new post content here

A (alternate)

 * url=http://example.com/post/100
 * action=update
 * title=new post title here
 * content=new post content here

B

 * u=http://example.com/post/100
 * a=update
 * title=new post title here
 * content=new post content here

Delete a Value

 * Delete a value from a list, e.g.
 * deleting a specific tag but keeping all the others

Requires:
 * Specify the existing object to edit
 * Specify the property to delete from
 * Specify the value to delete

A

 * url=http://example.com/post/100
 * action=remove
 * property=category
 * value=foo

A (alternate)

 * url=http://example.com/post/100
 * action=remove
 * category=foo

B

 * u=http://example.com/post/100
 * a=remove
 * category=foo

Delete a Property

 * Delete all values for a property, e.g.
 * deleting all person-tags

Requires:
 * Specify the existing object to edit
 * Specify the property to delete

A

 * url=http://example.com/post/100
 * action=clear
 * property=category

B

 * u=http://example.com/post/100
 * a=clear
 * category=

Delete an Object

 * Delete an entire object including all values

Requires:
 * Specify the existing object to delete

A

 * url=http://example.com/post/100
 * action=delete

B

 * u=http://example.com/post/100
 * a=delete