[
https://issues.apache.org/jira/browse/OPENJPA-1851?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12924743#action_12924743
]
Pinaki Poddar commented on OPENJPA-1851:
----------------------------------------
The proposed XML schema for Java instances serialized on-the-wire
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Licensed to the Apache Software Foundation (ASF) under one or more
contributor
license agreements. See the NOTICE file distributed with this work for
additional
information regarding copyright ownership. The ASF licenses this file
to
you under the Apache License, Version 2.0 (the "License"); you may not
use
this file except in compliance with the License. You may obtain a copy
of
the License at http://www.apache.org/licenses/LICENSE-2.0 Unless
required
by applicable law or agreed to in writing, software distributed under
the
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS
OF ANY KIND, either express or implied. See the License for the
specific
language governing permissions and limitations under the License. -->
<!-- =========================================================================
-->
<!-- Schema for serialized persistence instance.
-->
<!-- =========================================================================
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="unqualified" elementFormDefault="qualified"
version="1.0">
<xsd:annotation>
<xsd:documentation><![CDATA[
Describes closure of managed persistence instance.
Each instance is described by all its loaded persistent attribute.
The related instances are resolved within the document root.
Document root represents zero or more instances.
The file must be named "META-INF/jest-instance.xsd".
]]>
</xsd:documentation>
</xsd:annotation>
<!-- The root element of the document contains zero or more instances -->
<xsd:element name="instances">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="instance"
maxOccurs="unbounded" type="instance-type" />
</xsd:sequence>
<xsd:attribute name="version" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<!-- The root element for a single instance -->
<xsd:complexType name="instance-type">
<xsd:sequence>
<xsd:element name="basic"
type="basic-attr-type" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="lob"
type="lob-attr-type" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="embedded" type="instance-type"
minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="singular"
type="singular-attr-type" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="collection"
type="collection-attr-type" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="map" type="map-attr-type"
minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="id" type="xsd:ID" use="required" />
</xsd:complexType>
<!-- A reference to another instance within the same(?) document -->
<xsd:complexType name="ref-type">
<xsd:attribute name="id" type="xsd:IDREF" />
</xsd:complexType>
<!-- A null reference -->
<xsd:complexType name="ref-null">
</xsd:complexType>
<!-- Basic Attribute has a name and its runtime type -->
<!-- non-null value appears as text content. -->
<!-- null value appears as attribute with empty text . -->
<xsd:complexType name="basic-attr-type">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="name" type="xsd:string"
use="required" />
<xsd:attribute name="type" type="xsd:string"
use="required" />
<xsd:attribute name="null"
type="xsd:boolean" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<!-- Large Binary Objects (LOB) represented as hex array -->
<xsd:complexType name="lob-attr-type">
<xsd:simpleContent>
<xsd:extension base="xsd:hexBinary">
<xsd:attribute name="name" type="xsd:string"
use="required" />
<xsd:attribute name="type" type="xsd:string"
use="required" />
<xsd:attribute name="null"
type="xsd:boolean" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<!-- Singular attribute can be a reference or another instance. -->
<xsd:complexType name="singular-attr-type">
<xsd:choice>
<xsd:element name="null" type="ref-null" />
<xsd:element name="ref" type="ref-type" />
<xsd:element name="instance" type="instance-type" />
</xsd:choice>
<xsd:attribute name="name" type="xsd:string" use="required" />
<xsd:attribute name="type" type="xsd:string" use="required"
/>
</xsd:complexType>
<!-- Collection attributes list their members with their runtime type
-->
<!-- Members can be basic or other managed instance
-->
<xsd:complexType name="collection-attr-type">
<xsd:sequence>
<xsd:element name="member" type="member-type"
minOccurs="0"
maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
<xsd:attribute name="type" type="xsd:string" use="required"
/>
<xsd:attribute name="member-type" type="xsd:string"
use="required" />
</xsd:complexType>
<!-- Map attributes list their entries with runtime type of key and
value -->
<!-- Both key and value can be independently basic or other managed
instance -->
<xsd:complexType name="map-attr-type">
<xsd:sequence>
<xsd:element name="entry" type="entry-type" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
<xsd:attribute name="type" type="xsd:string" use="required" />
<xsd:attribute name="key-type" type="xsd:string" use="required"
/>
<xsd:attribute name="value-type" type="xsd:string"
use="required" />
</xsd:complexType>
<!-- Value of a member of basic type. -->
<xsd:complexType name="basic-value-type">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="null" type="xsd:boolean" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<!-- Value of a member of a collection/map -->
<xsd:complexType name="member-type">
<xsd:choice>
<xsd:element name="basic" type="basic-value-type" />
<xsd:element name="instance" type="instance-type" />
<xsd:element name="null" type="ref-null" />
<xsd:element name="ref" type="ref-type" />
</xsd:choice>
</xsd:complexType>
<!-- Denotes entry of a map element -->
<xsd:complexType name="entry-type">
<xsd:sequence>
<xsd:element name="key" type="member-type"
minOccurs="1" maxOccurs="1" />
<xsd:element name="value" type="member-type"
minOccurs="1" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
and here is a typical example of a Person with a singular reference to another
Person (spouse) and multi-valued relation to Persons (friends)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<instances xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"
xsi:noNamespaceSchemaLocation="jest-instance.xsd">
<instance id="Person-1288026511796">
<basic name="ssn" type="long">1288026511796</basic>
<basic name="age" type="int">20</basic>
<basic name="name" type="String">P1</basic>
<singular name="spouse" type="Person">
<instance id="Person-1288026511797">
<basic name="ssn" type="long">1288026511797</basic>
<basic name="age" type="int">20</basic>
<basic name="name" type="String">P2</basic>
<singular name="spouse" type="Person">
<ref id="Person-1288026511796"/>
</singular>
<collection member-type="Person" name="friends" type="List">
<member>
<ref id="Person-1288026511796"/>
</member>
</collection>
</instance>
</singular>
<collection member-type="Person" name="friends" type="List">
<member>
<ref id="Person-1288026511797"/>
</member>
<member>
<instance id="Person-1288026511798">
<basic name="ssn" type="long">1288026511798</basic>
<basic name="age" type="int">20</basic>
<basic name="name" type="String">P3</basic>
<singular name="spouse" type="Person">
<null/>
</singular>
<collection member-type="Person" name="friends" type="List">
<member>
<ref id="Person-1288026511798"/>
</member>
</collection>
</instance>
</member>
</collection>
</instance>
</instances>
1. The object references are of the format <type>-<ior>
where <type> is the simple name of the type and ior is a string
representation of its primary key (we need a syntax for complex identity)
2. The type names are simple name (if unambiguous in the given persistence unit)
> RESTful access to Persistence Unit runtime
> -------------------------------------------
>
> Key: OPENJPA-1851
> URL: https://issues.apache.org/jira/browse/OPENJPA-1851
> Project: OpenJPA
> Issue Type: New Feature
> Components: competitive, jpa, usability
> Reporter: Pinaki Poddar
> Assignee: Pinaki Poddar
>
> A persistence unit should provide access to a remote, non-Java client in a
> RESTful fashion.
> The communication protocol should be HTTP.
> The 'safe' operations (HTTP GET for find, query, properties, metamodel
> browsing etc) can be encoded in URI syntax itself.
> The state representation would start with schema-less XML, followed by
> schema-compliant XML and JSON
> The POST/PUT operations and transactions will be addressed in a separate task.
>
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.