[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
Re: [xml-dev] How to represent mixed content in JSON and JSON Schema?
- From: doug.duboulay@gmail.com
- To: xml-dev@lists.xml.org
- Date: Thu, 12 Jul 2018 14:17:48 +0800
I recently used pandoc to do a Latex to DocBook conversion.
http://pandoc.org/
Turns out, IIUC, that they use a JSON representation of the document (mixed)
content as the intermediate format for conversion between all of the target
specifications.
I see there is a proto schema here:
https://gist.github.com/tarleb/bcb4b31e35263fcbc6cf7e533670c1cf
I don't know that they have an explicit slot for a bidirectional attribute,
but since pandoc also reads DocBook and DocBook has a "dir" attribute on some
elements, it might be worth a look under the hood...
On Wednesday, 11 July 2018 3:57:22 PM AWST Costello, Roger L. wrote:
> Hi Folks,
>
> I am converting an XML Schema to a JSON Schema.
>
> The XML Schema declares an <example> element that has bidirectional-override
> (BDO) elements intermingled with text, e.g.,
>
> <example>Some text <bdo dir="rtl">reverse this text <bdo dir="ltr">not this
> text</bdo></bdo> finishing text</example>
>
> rtl = right-to-left
> ltr = left-to-right
>
> As you can see, the <example> element has mixed content, as does the <bdo>
> element.
>
> At the bottom of this message is the XML Schema.
>
> JSON and JSON Schema do not support mixed content, nor do they support
> attributes.
>
> How to represent the XML in JSON and JSON Schema?
>
> Here's what I am thinking: Mixed content is essentially an ordered sequence
> of text, element, text, element, ...
>
> JSON arrays are intended to represent ordered sequences. So, I am thinking
> that mixed content can be represented in JSON with an array. The above
> <example> element can be expressed this way in JSON:
>
> {
> "example": [
> {"text": "Some text "},
> {"bdo":
> [
> {"dir": "rtl"},
> {"text": "reverse this text "},
> {"bdo":
> [
> {"dir": "ltr"},
> {"text": "not this text"}
> ]
> }
> ]
> },
> {"text": " finishing text"}
> ]
> }
>
> Notice that the content of the items with mixed content (example and bdo)
> are represented with arrays.
>
> At the bottom of this message is the JSON Schema.
>
> Is there a better way to represent mixed content in JSON? What makes one way
> better than another? One way can be processed easier, more efficiently than
> another? /Roger
>
> XML Schema
>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
>
> <xs:element name="example" type="BDOMixedContent" />
>
> <xs:complexType name="BDOMixedContent" mixed="true">
> <xs:choice minOccurs="0" maxOccurs="unbounded">
> <xs:element name="bdo" type="BDOMixedContent" />
> </xs:choice>
> <xs:attribute name="dir">
> <xs:simpleType>
> <xs:restriction base="xs:string">
> <xs:enumeration value="ltr" />
> <xs:enumeration value="rtl" />
> </xs:restriction>
> </xs:simpleType>
> </xs:attribute>
> </xs:complexType>
>
> </xs:schema>
>
>
> JSON Schema
>
> {
> "$schema": "http://json-schema.org/draft-07/schema#",
> "definitions": {
> "BDOMixedContent": {
> "type": "array",
> "items": {
> "anyOf": [
> {
> "type": "object",
> "properties": {
> "text": {"type": "string"}
> },
> "additionalProperties": false
> },
> {
> "type": "object",
> "properties": {
> "bdo": {"$ref":
> "#/definitions/BDOMixedContent"} },
> "additionalProperties": false
> },
> {
> "type": "object",
> "properties": {
> "dir": {"type": "string", "enum": ["ltr",
> "rtl"]} },
> "additionalProperties": false
> }
> ]
> }
> }
> },
> "type": "object",
> "properties": {
> "example": {"$ref": "#/definitions/BDOMixedContent"}
> },
> "required": [ "example" ],
> "additionalProperties": false
> }
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]