Jump to content
Roger Cigol

XML File - I need a schema for this file

Recommended Posts

I have a short sample XML file which is as follows

<?xml version="1.0"?>
<authors>
  <author>
    <name>abc</name>
    <posts>
      <items>
        <title lang="eng1">abc item 1</title>
        <content lang="eng2">abc item 1</content>
      </items>
      <items>
        <title lang="eng3">abc item 2</title>
        <content lang="eng4">abc item 2</content>
      </items>
      <items>
        <title lang="eng5">abc item 3</title>
        <content>abc item 3</content>
      </items>
      <items>
        <title>abc item 4</title>
        <content lang="eng6">abc item 4</content>
      </items>
    </posts>
  </author>
</authors>

I need a schema (ie a file *.xsd format) for this xml format. 

Schema creation tools I have tried don't seem to be able to handle the fact that nodes such as <title>...</title> contain both an attribute and text data. If I use a tool to create a schema *.xsd and then recreate a sample xml from the created schema I always find that the resulting xml created is missing either the attribute or the data, meaning the schema I have generated does NOT match my XML file. Can anyone create a schema that does correctly map to an XML file with nodes with both attribute and text data?

I know it's not a delphi question (or a C++ Builder question) but I also know there are some XML gurus on Delphi Praxis that might be able to solve my problem very easily !

Thanks in anticipation

Share this post


Link to post

From https://www.freeformatter.com/xsd-generator.html - "Salami Slice" design
Does this look ok?

 

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="title">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute type="xs:string" name="lang" use="optional"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="content">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute type="xs:string" name="lang" use="optional"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="items">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="title"/>
        <xs:element ref="content"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="name" type="xs:string"/>
  <xs:element name="posts">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="items" maxOccurs="unbounded" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="author">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:element ref="posts"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="authors">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="author"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

 

Share this post


Link to post

Wow! super fast response. I wasn't aware of that useful site - so thanks for the link.

I will try this xsd and see how I get on.... Thank you Lars.

  • Like 1

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×