AbstractProperty Specification#
Note
This page has been migrated from the old documentation, and has not yet been fully revised. There might be inconsistencies or errors when using with current LinkAhead versions.
Introduction#
An AbstractProperty is one of the base objects of LinkAhead.
An AbstractProperty MUST have the following qualities (shortcut in brackets):
a persistent id (
id)an unique name (
name)a description (
description)a type (
type)a generator
generator)a creator (
creator)a timestamp of it’s date of creation (
created)a set of owners and owning groups (
owner)a set rules which controls the access to that
AbstractProperty(permission)
Depending on the AbstractProperty's type it MUST have one of the following qualities:
a unit (
unit)a RecordType which is referenced by any instantiating ConcreteProperty. (
reference)
This is described below.
Property Types#
An AbstractProperty MUST have one of the following 7 types:
textintegerdoubledatetimereferencefile
An AbstractProperty of type text, datetime, or file MUST NOT have any unit or referenced
RecordType. A double, integer AbstractProperty MUST have a unit but MUST NOT have a referenced
RecordType. A reference AbstractProperty MUST have referenced RecordType und MUST NOT have a
unit.
XML Representation of AbstractProperty Objects#
An AbstractProperty is represented in xml by a <Property/> tag. It’s qualities except for
owner and permission are represented by an xml attribute of the same name. For example
<Property name="length"/> denotes an AbstractProperty whose name is length.
GET AbstractProperty#
Any xml representation of an AbstractProperty that is retrieved from the LinkAhead Server MUST
have exactly ONE of the following forms, depending on the AbstractProperty's type:
text#
<Property id="$id" name="$name" description="$description" generator="$generator" creator="$creator" created="$created" type="text" />
integer#
<Property id="$id" name="$name" description="$description" generator="$generator" creator="$creator" created="$created" type="integer" unit="$unit" />
double#
<Property id="$id" name="$name" description="$description" generator="$generator" creator="$creator" created="$created" type="double" unit="$unit" />
datetime#
<Property id="$id" name="$name" description="$description" generator="$generator" creator="$creator" created="$created" type="datetime" />
reference#
<Property id="$id" name="$name" description="$description" generator="$generator" creator="$creator" created="$created" type="reference" reference="$reference" />
file#
<Property id="$id" name="$name" description="$description" generator="$generator" creator="$creator" created="$created" type="file" />
‘’’General Notes:
If the called Property does not exist or if the Property called without permission, the LinkAhead Server will return an Error.
POST AbstractProperty#
Any xml representation of an AbstractProperty that is to be posted to the LinkAhead server MUST
have exactly ONE of the following forms, depending on the AbstractProperty's type:
text#
<Property name="$name" description="$description" generator="$generator" type="text" />
integer#
<Property name="$name" description="$description" generator="$generator" type="integer" unit="$unit" />
double#
<Property name="$name" description="$description" generator="$generator" type="double" unit="$unit" />
datetime#
<Property name="$name" description="$description" generator="$generator" type="datetime" />
reference#
<Property name="$name" description="$description" generator="$generator" type="reference" reference="$reference" />
file#
<Property name="$name" description="$description" generator="$generator" type="file" />
General Notes:
The
AbstractProperty'sidand timestamp (created) will be generated by the LinkAhead Server.The
AbstractProperty'screator will be determined by the LinkAhead Server depending on it’s policy configuration.Any given attribute beyond these will be ignored.
If the
<Property/>tag isn’t compliant with these the LinkAhead Server will return an Error.
Examples#
GET Requests#
Single-Get#
Request:
GET http://localhost:8122/mpidsserver/AbstractProperty/1
Response:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Property id="1" name="explanation" type="text" description="explains the thing" generator="Timm (manually)"/>
</Response>
Request:
GET http://localhost:8122/mpidsserver/AbstractProperty/explanation
Response:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Property id="1" name="explanation" type="text" description="explains the thing" />
</Response>
Multi-Get#
Request:
GET http://localhost:8122/mpidsserver/AbstractProperty/explanation&2&3
Response:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Property id="1" name="explanation" type="text" description="explains the thing" />
<Property id="2" name="comment" type="text" description="A comment" generator="Timm (manually)"/>
<Property id="3" name="name" type="text" description="Name" generator="Timm (manually)" />
</Response>
Get all#
Request:
GET http://localhost:8122/server/AbstractProperty/
GET http://localhost:8122/server/AbstractProperty
Response:
<?xml version="1.0" encoding="UTF-8"?>
<Response />
Erroneous Requests#
Non-existing#
Request:
GET http://localhost:8122/mpidsserver/AbstractProperty/123456
Response:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Property id="123456">
<Error code="201" description="Property does not exist. " />
</Property>
</Response>
POST Requests#
Request is to be sent to:
POST http://localhost:8122/mpidsserver/AbstractProperty/
POST http://localhost:8122/mpidsserver/AbstractProperty
Single-Post#
Request body:
<Post>
<Property name="TimmsIntegerProperty1" type="integer" description="This is TimmsIntegerProperty1" unit="kg" generator="Timm (manually)"/>
</Post>
Response:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Property id="39" name="TimmsIntegerProperty1" type="integer" unit="kg" description="This is TimmsIntegerProperty1" generator="Timm (manually)"/>
</Response>
Request body (with a reference to Property 12345):
<Post>
<Property name="Timms reference property 1" type="reference" reference="12345" description="This is Timms reference property 1"/>
</Post>
Multi-Post#
Request body:
<Post>
<Property name="TimmsIntegerProperty7" type="integer" description="This is TimmsIntegerProperty7" unit="kg" generator="Timm (manually)"/>
<Property name="TimmsIntegerProperty8" type="integer" description="This is TimmsIntegerProperty8" unit="kg" generator="Timm (manually)"/>
<Property name="TimmsIntegerProperty9" type="integer" description="This is TimmsIntegerProperty9" unit="kg" generator="Timm (manually)"/>
</Post>
Response:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
...
<Property id="41" name="TimmsIntegerProperty9" type="integer" unit="kg" description="This is TimmsIntegerProperty9" generator="Timm (manually)"/>
</Response>
Erroneous Requests#
No Description#
Request body:
<Post>
<Property name="TimmsIntegerProperty3" type="integer" unit="kg" generator="Timm (manually)"/>
</Post>
Response:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Property name="TimmsIntegerProperty3" type="integer" unit="kg">
<Error code="202" description="Property has no Description. " />
</Property>
</Response>
No generator#
Request body:
<Post>
<Property name="TimmsIntegerProperty3" type="integer" unit="kg" description="This is TimmsIntegerProperty4" />
</Post>
Response:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Property name="TimmsIntegerProperty3" type="integer" unit="kg" >
<Error code="202" description="Property has no generator. " />
</Property>
</Response>
No Type#
Request body:
<Post>
<Property name="TimmsIntegerProperty4" description="This is TimmsIntegerProperty4" unit="kg" generator="Timm (manually)"/>
</Post>
Response:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Property name="TimmsIntegerProperty4" unit="kg" description="This is TimmsIntegerProperty4" generator="Timm (manually)" >
<Error code="252" description="Property has no PropertyType" />
</Property>
</Response>
No Unit#
Request body:
<Post>
<Property name="TimmsIntegerProperty5" type="integer" description="This is TimmsIntegerProperty5" generator="Timm (manually)"/>
</Post>
Response:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Property name="TimmsIntegerProperty5" type="integer" description="This is TimmsIntegerProperty5" generator="Timm (manually)">
<Error code="202" description="Property has no Unit. " />
</Property>
</Response>
No Name#
Request body:
<Post>
<Property type="integer" description="This is TimmsIntegerProperty6" unit="kg" generator="Timm (manually)"/>
</Post>
Response:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Property type="integer" unit="kg" description="This is TimmsIntegerProperty6" generator="Timm (manually)">
<Error code="202" description="Property has no Name. " />
</Property>
</Response>
Invalid Name#
Request body:
<Post>
<Property id="39" name="TimmsIntegerProperty7" type="integer" description="This is TimmsIntegerProperty7" unit="kg" generator="Timm (manually)"/>
</Post>
Response:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Property id="39" name="TimmsIntegerProperty7" type="integer" unit="kg" description="This is TimmsIntegerProperty7" generator="Timm (manually)">
<Error code="204" description="Property has an invalid Name. " />
</Property>
</Response>
Mixed#
Request body:
<Post>
<Property name="TimmsIntegerProperty2" type="integer" description="This is TimmsIntegerProperty2" unit="kg" generator="Timm (manually)"/>
<Property name="TimmsIntegerProperty3" type="integer" unit="kg" generator="Timm (manually)"/>
<Property name="TimmsIntegerProperty4" description="This is TimmsIntegerProperty4" unit="kg" generator="Timm (manually)"/>
<Property name="TimmsIntegerProperty5" type="integer" description="This is TimmsIntegerProperty5" generator="Timm (manually)"/>
<Property type="integer" description="This is TimmsIntegerProperty6" unit="kg" generator="Timm (manually)"/>
<Property id="39" name="TimmsIntegerProperty7" type="integer" description="This is TimmsIntegerProperty7" unit="kg" generator="Timm (manually)"/>
</Post>
Response:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Property type="integer" unit="kg" description="This is TimmsIntegerProperty6" generator="Timm (manually)">
<Error code="202" description="Property has no Name. " />
</Property>
<Property id="39" name="TimmsIntegerProperty7" type="integer" unit="kg" description="This is TimmsIntegerProperty7" generator="Timm (manually)">
<Error code="204" description="Property has an invalid Name. " />
</Property>
...
</Response>
= DELETE AbstractProperties =
HTTP-DELETE-requests are to be sent to http://${host}:${port}/mpidsserver/AbstractProperty/....
Default port is 8123.
Example
DELETE http://${host}:${port}/mpidsserver/AbstractProperty/1&2&3&4