Next in thread → Next in month →

Re: [xml-dev] Is JSON Schema simpler than XML Schema?

From
Pete Cordell <>
To
"Costello, Roger L." <>, "" <>
Date
2018-08-02T13:51:27Z
ID
<>
Thread
Re: [xml-dev] Is JSON Schema simpler than XML Schema?
Hi Roger,

...

On 02/08/2018 11:29, Costello, Roger L. wrote:
> Neat!
> 
> How is the following XML Schema complexType expressed using JCR? Note that the complexType specifies mixed content.
> 
> <xs:complexType name="InternationalString" mixed="true">
>      <xs:choice minOccurs="0" maxOccurs="unbounded">
>          <xs:element name="bdo" type="bdoType" />
>          <xs:element name="bdi" type="bdiType" />
>      </xs:choice>
>      <xs:attribute name="direction" type="directionType" />
> </xs:complexType>
> 
> Next, suppose the above complexType is extended (derive-by-extension) with an attribute, as shown below. How is this second complexType expressed in JCR?
> 
> <xs:complexType name="PedigreeStringType">
>      <xs:complexContent mixed="true">
>          <xs:extension base="InternationalString">
>              <xs:attribute name="pedigree" type="xs:string" />
>          </xs:extension>
>      </xs:complexContent>
> </xs:complexType>


**Currently** we're investigating using mixins for compositional 
relationships.  We're hoping that, in general, this will be more 
flexible than pure-OO style extension relationships.

Naturally JSON doesn't support mixed types by default or the distinction 
between elements and attributes, and JCR offers nothing 'out-the-box' to 
change that.  (JCR is intended for data-oriented applications, not 
text-oriented.)

But to use the mixin approach, you would currently have to define a 
'group' to be your mixin (such as "InternationalStringMixin") and then 
use that in your instances of "InternationalString" and 
"PedigreeStringType".  So something like:

$InternationalStringMixin = ( ; Note round brackets -> a group def
     "content" : [
         {
             (
                 "bdo" : $bdoType |
                 "bdi" : $bdoType
             ),
             "text" : string
         } *
     ],
     "direction" : $directionType
)

$InternationalString = { ; Braces -> an object definition
     $InternationalStringMixin
}

$PedigreeStringType = {
     $InternationalStringMixin,
     "pedigree" : string
}

**Going forwards** we might be able to consider an object referenced 
inside another object (without a preceding name) to be automatically 
converted to a group.  So, instead of the above, we'd just have:

$InternationalString = { ; Note braces
     "content" : [
         {
             (
                 "bdo" : $bdoType |
                 "bdi" : $bdoType
             ),
             "text" : string
         } *
     ],
     "direction" : $directionType
}

$PedigreeStringType = {
     $InternationalString,
     "pedigree" : string
}

-----------

I don't think my original message made it to the list, so here's the 
links for more info again for those that missed it:

Latest official spec:
 
http://json-content-rules.org/drafts/draft-newton-json-content-rules-09.txt

More info (including syntax checker):
     http://json-content-rules.org/

I hope at some point we can indulge this lists wisdom for some more 
feedback on JCR once we've got a new draft out.

Thanks again,

Pete.
-- 
---------------------------------------------------------------------
Pete Cordell
Codalogic Ltd
C++ tools for C++ programmers, http://codalogic.com
Read & write XML in C++, http://www.xml2cpp.com
---------------------------------------------------------------------
Next in thread → Next in month →