wiki:DASISH/XSD and XML

Version 6 (modified by olhsha, 11 years ago) (diff)

--

Contents

  1. XSD Schema
  2. Scenario XML's validated vs the given schema
    1. Responding GET api/user
    2. Responding GET api/annotations?source="http://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia"&access=read
    3. Responding GET api/annotations/AID02 (example usage for resolvable target sources)
    4. Responding GET api/annotations/AID01 (example usage for unresolvable target sources)
    5. Responding GET api/annotations/AID01/sources (example usage for non-resolvable target sources)
    6. Responding GET api/sources/SID05/cached (example usage for unresolvable target sources)
    7. Responding GET api/sources/SID05/cached/CID005A (example usage for unresolvable target sources)
    8. Request body for POST api/annotation

XSD Schema

<?xml version="1.1" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.dasish.eu/ns/addit"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns="http://www.dasish.eu/ns/addit"
    elementFormDefault="qualified">
    <xs:import namespace="http://www.w3.org/XML/1998/namespace"
        schemaLocation="http://www.w3.org/2005/08/xml.xsd"/>


    <!--////////////////////////////////////////////////////-->
    <!-- Annotation-body types according to the UML diagram -->


    <!-- Body -->

    <xs:complexType name="Body">
        <xs:sequence>
            <xs:any processContents="lax" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:anyAttribute processContents="lax"/>
    </xs:complexType>

    <!--////////////////////////-->
    <!--Cached representations -->

    <xs:complexType name="CachedRepresentation">
        <xs:attribute ref="xml:id" use="required"/>
        <xs:attribute name="URI" type="xs:anyURI" use="required"/>
        <xs:attribute name="mimeType" type="xs:string" use="required"/>
        <xs:attribute name="tool" type="xs:string" use="required"/>
        <xs:attribute name="type" type="xs:string" use="required"/>
    </xs:complexType>

    <xs:complexType name="listCachedRepresentations">
        <xs:sequence>
            <xs:element name="cachedRepresentation" type="CachedRepresentation"
                maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <!--////////////////////////////-->
    <!-- Versions -->
    <xs:complexType name="sourceREF">
        <xs:attribute name="ref" type="xs:NCName" use="required"/>
    </xs:complexType>

    <xs:complexType name="listVersionREFs">
        <xs:sequence>
            <xs:element name="version" type="sourceREF" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <!--////////////////////////////-->
    <!-- Sources (== Targets in OA) -->

    <xs:complexType name="Source">
        <xs:sequence>
            <xs:element name="URI" type="xs:anyURI" minOccurs="1"/>
            <xs:element name="versionString" type="xs:string" minOccurs="1"/>
            <xs:element name="versions" type="listVersionREFs" minOccurs="1"/>
            <xs:element name="cachedRepresentations" type="listCachedRepresentations" minOccurs="1"/>
        </xs:sequence>
        <xs:attribute ref="xml:id" use="required"/>
        <xs:attribute name="lastModified" type="xs:dateTime" use="required"/>
    </xs:complexType>


    <xs:complexType name="SourceInfoForAnnotation">
        <xs:sequence>
            <xs:element name="URI" type="xs:anyURI" minOccurs="1"/>
            <xs:element name="versionString" type="xs:string" minOccurs="1"/>
        </xs:sequence>   
        <xs:attribute ref="xml:id" use="required"/>
    </xs:complexType>

   

   
    <!--////////////////////////////-->
    <!-- Human Agents (Users) -->

    <xs:complexType name="userREF">
        <xs:annotation>
            <xs:documentation xml:lang="nl">De referentiele integriteit moet door de backend afgedwongen worden.</xs:documentation>
            <xs:documentation xml:lang="en">The integrity of the references must be forced via the backend</xs:documentation>
        </xs:annotation>
        <xs:attribute name="ref" type="xs:NCName" use="required"/>
    </xs:complexType>


    <!--////////////////////////////-->
    <!-- Annotation -->

    <xs:complexType name="listReaderREFs">
        <xs:sequence>
            <xs:element name="reader" type="userREF" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="listWriterREFs">
        <xs:sequence>
            <xs:element name="writer" type="userREF" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="listSourceInfoForAnnotation">
        <xs:sequence>
            <xs:element name="targetSource" type="SourceInfoForAnnotation" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="notebookInfo">
        <xs:sequence>
            <xs:element name="title" type="xs:string" minOccurs="1"/>
        </xs:sequence>
        <xs:attribute name="ref" type="xs:NCName" use="required"/>
   </xs:complexType>
    
    <xs:complexType name="listNotebookInfos">
        <xs:sequence>
            <xs:element name="notebook" type="notebookInfo" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Annotation">
        <xs:sequence>
            <xs:element name="owner" type="userREF" minOccurs="1"/>
            <xs:element name="headline" type="xs:string" minOccurs="1"/> <!-- schematron checks the length <== 100 -->
            <xs:element name="body" type="Body" minOccurs="1"/>
            <xs:element name="targetSources" type="listSourceInfoForAnnotation" minOccurs="1"/> 
            <xs:element name="readers" type="listReaderREFs" minOccurs="1"/>
            <xs:element name="writers" type="listWriterREFs" minOccurs="1"/>
            <xs:element name="notebooks" type="listNotebookInfos" minOccurs="1"/>
        </xs:sequence>
        <xs:attribute ref="xml:id" use="required"/>
        <xs:attribute name="URI" type="xs:anyURI" use="required"/>
        <xs:attribute name="timeStamp" type="xs:dateTime" use="required"/>
    </xs:complexType>
     
    
    


    <!--////////////////////////////-->
    <!-- Notebook -->
    
    <xs:complexType name="listAnnotations">
        <xs:sequence>
            <xs:element name="annotation" type="Annotation" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="Notebook">
        <xs:sequence>
            <xs:element name="title" type="xs:string"/>
            <xs:element name="annotations" type="listAnnotations"/>
            <xs:element name="readers" type="listReaderREFs"/>
            <xs:element name="writers" type="listWriterREFs"/>
        </xs:sequence>
        <xs:attribute ref="xml:id" use="required"/>
        <xs:attribute name="URI" type="xs:anyURI" use="required"/>
        <xs:attribute name="timeStamp" type="xs:dateTime" use="required"/>
    </xs:complexType>

    <xs:complexType name="NotebookInfo">
        <xs:sequence>
            <xs:element name="title" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="ref" type="xs:NCName" use="required"/>
    </xs:complexType>

    <xs:complexType name="listNotebooks">
        <xs:sequence>
            <xs:element name="notebook" type="NotebookInfo" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>



<!--/////////////////////////////////////-->
<!-- GET api/user respond -->
    
    
    
    <xs:complexType name="GetApiUserRespond">
        <xs:sequence>
            <xs:element name="myID" type="xs:string"></xs:element>
            <xs:element name="notebooksToRead" type="listNotebooks"></xs:element>
            <xs:element name="notebooksToWrite" type="listNotebooks"></xs:element>
        </xs:sequence>
    </xs:complexType>
    
    
    <xs:element name="getApiUserScenario" type="GetApiUserRespond"/>
    
    
    <!--/////////////////////////////////////-->
    <!-- GET api/annotations?source="http://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia"&access=read  respond -->   
    
    <xs:complexType name="SourceInfoForRespond">
        <xs:sequence>
            <xs:element name="URI" type="xs:anyURI" minOccurs="1"/>
            <xs:element name="versionString" type="xs:string" minOccurs="1"/>
        </xs:sequence>  
    </xs:complexType>
    
    
    <xs:complexType name="listSourceInfoForRespond">
        <xs:sequence>
            <xs:element name="targetSource" type="SourceInfoForRespond" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="AnnotationInfoForRespond">
        <xs:sequence>
            <xs:element name="ownerIDref" type="xs:NCName" minOccurs="1"/>
            <xs:element name="headline" type="xs:string" minOccurs="1"/> 
            <xs:element name="targetSources" type="listSourceInfoForRespond" minOccurs="1"/> 
            <xs:element name="notebooks" type="listNotebookInfos" minOccurs="1"/>
        </xs:sequence>
        <xs:attribute name="IDRef" type="xs:NCName" use="required"/>
    </xs:complexType>
    
    <xs:complexType name="listAnnotationInfoForRespond">
        <xs:sequence>
            <xs:element name="annotation" type="AnnotationInfoForRespond" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    
    
    
    <xs:complexType name="GetApiAnnotationsRespond">
        <xs:sequence>
            <xs:element name="annotations" type="listAnnotationInfoForRespond"></xs:element>
        </xs:sequence>
    </xs:complexType>
    
    
    <xs:element name="getApiAnnotationsScenario" type="GetApiAnnotationsRespond"/>
    
    <!--/////////////////////////////////////-->
    <!-- GET api/annotations/AID02  respond -->  
    
    <xs:element name="annotation" type="Annotation"/>
    
       
    <!--/////////////////////////////////////-->
    <!--  GET api/annotations/AID01/sources   respond (non-resolvable, obsolete target sources)-->  
    
    <xs:complexType name="listSources">
        <xs:sequence>
            <xs:element name="targetSource" type="Source" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    
    <xs:element name="sources" type="listSources"/>  
    
    
    <!--/////////////////////////////////////-->
    <!--  GET api/sources/SID05/cached    respond -->  
    
    <xs:element name="cashedRepresentations" type="listCachedRepresentations"/>  
    
    <!--/////////////////////////////////////-->
    <!--  GET api/sources/SID05/cached/CID005A    respond -->  
    
    <xs:element name="cashedRepresentation" type="CachedRepresentation"/>  
    
    
    <!-- POST api/annotation, annotation body  -->
    
    <xs:element name="newAnnotation" type="Annotation"/>
   
</xs:schema>

Scenario XML's validated vs the given schema

See https://trac.clarin.eu/wiki/DASISH/Scenario|Scenario.

Responding GET api/user

<?xml version="1.0" encoding="UTF-8"?>
<getApiUserScenario xmlns="http://www.dasish.eu/ns/addit"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.dasish.eu/ns/addit file:/Users/olhsha/repositories/DASISH/t5.6/docs/XMLandXSD/DASISH-schema.xsd">
    <myID>ID01</myID>
    <notebooksToRead>
        <notebook ref="NID01">
            <title>Sagrada Famiglia</title>
        </notebook>
        <notebook ref="NID02">
            <title>Buildings</title>
        </notebook>
    </notebooksToRead>
    <notebooksToWrite>
        <notebook ref="NID01">
            <title>Sagrada Famiglia</title>
        </notebook>
    </notebooksToWrite>
</getApiUserScenario>

Responding GET api/annotations?source="http://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia"&access=read

<?xml version="1.0" encoding="UTF-8"?>
<getApiAnnotationsScenario xmlns="http://www.dasish.eu/ns/addit"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.dasish.eu/ns/addit file:/Users/olhsha/repositories/DASISH/t5.6/docs/XMLandXSD/DASISH-schema.xsd"> 
    <annotations>
        <annotation IDRef="AID03">
            <ownerIDref>ID02</ownerIDref>
            <headline>My client is not in a hurry</headline>
            <targetSources>
                <targetSource>
                    <URI>http://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia#cite_note-Time-15</URI>
                    <versionString>2013-04-15T15:15:00-05:30</versionString>
                </targetSource>
            </targetSources>
            <notebooks>
                <notebook ref="NID01">
                    <title>Sagrada Famiglia</title>
                </notebook>
                <notebook ref="NID02">
                    <title>Buildings</title>
                </notebook>
            </notebooks>
        </annotation>
        <annotation IDRef="AID02">
            <ownerIDref>ID01</ownerIDref>
            <headline>Nativity Facade</headline>
            <targetSources>
                <targetSource>
                    <URI>http://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia#Nativity_Fa.C3.A7ade</URI>
                    <versionString>5.0</versionString>
                </targetSource>
                <targetSource>
                    <URI>http://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia#Passion_Fa.C3.A7ade</URI>
                    <versionString>4.1</versionString>
                </targetSource>
            </targetSources>
            <notebooks>
                <notebook ref="NID01">
                    <title>Sagrada Famiglia</title>
                </notebook>
            </notebooks>
        </annotation>
        <annotation IDRef="AID01">
            <ownerIDref>ID01</ownerIDref>
            <headline>Nativity Facade (old site)</headline>
            <targetSources>
                <targetSource>
                    <URI>http://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia#Nativity_Fa.C3.A7ade</URI>
                    <versionString>1.0</versionString>
                </targetSource>
                <targetSource>
                    <URI>http://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia#Passion_Fa.C3.A7ade</URI>
                    <versionString>1.0</versionString>
                </targetSource>
            </targetSources>
            <notebooks>
                <notebook ref="NID01">
                    <title>Sagrada Famiglia</title>
                </notebook>
            </notebooks>
        </annotation>
    </annotations>
</getApiAnnotationsScenario>

Responding GET api/annotations/AID02 (example usage for resolvable target sources)

<?xml version="1.0" encoding="UTF-8"?>
<sources xmlns="http://www.dasish.eu/ns/addit"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.dasish.eu/ns/addit file:/Users/olhsha/repositories/DASISH/t5.6/docs/XMLandXSD/DASISH-schema.xsd">
    <targetSource xml:id="SID005" lastModified="2006-05-04T18:13:51.0Z">
        <URI>http://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia#Nativity_Fa.C3.A7ade</URI>
        <versionString>1.0</versionString>
        <versions>
            <version ref="SID005"/>
            <version ref="SID015"/>
        </versions>
        <cachedRepresentations>
            <cachedRepresentation xml:id="CID005" URI="http://www.dasish.eu/DB/CID005" mimeType="text/html" tool="tool1" type="text"/>
            <cachedRepresentation xml:id="CID005A" URI="http://www.dasish.eu/DB/CID005A" mimeType="image/png" tool="tool2" type="screenshot"/>
            <cachedRepresentation xml:id="CID015" URI="http://www.dasish.eu/DB/CID015" mimeType="mimeType3" tool="tool3" type="type3"/>
        </cachedRepresentations>
    </targetSource>
    <targetSource xml:id="SID007" lastModified="2006-05-04T18:13:51.0Z">
        <URI>http://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia#Passion_Fa.C3.A7ade</URI>
        <versionString>1.0</versionString>
        <versions>
            <version ref="SID007"/>
            <version ref="SID017"/>
        </versions>
        <cachedRepresentations>
            <cachedRepresentation xml:id="CID007" URI="http://www.dasish.eu/DB/CID007" mimeType="mimeType5" tool="tool5" type="type5"/>
            <cachedRepresentation xml:id="CID017" URI="http://www.dasish.eu/DB/CID017" mimeType="mimeType7" tool="tool7" type="type7"/>
        </cachedRepresentations>
    </targetSource>
</sources>

Responding GET api/annotations/AID01 (example usage for unresolvable target sources)

<?xml version="1.0" encoding="UTF-8"?>
<annotation xmlns="http://www.dasish.eu/ns/addit"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.dasish.eu/ns/addit file:/Users/olhsha/repositories/DASISH/t5.6/docs/XMLandXSD/DASISH-schema.xsd" 
 xml:id="AID002" 
 URI="http://www.dasish.eu/DB/AID002" 
 timeStamp="2010-05-04T18:13:51.0Z">
    <owner ref="ID01"/>
    <headline>Nativity Facade (old site)</headline>
    <body type="relation">
        <relation>different</relation>
        <this ref="SID005"/>
        <that ref="SID007"/>   
    </body>
    <targetSources>
        <targetSource xml:id="SID005">
            <URI>http://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia#Nativity_Fa.C3.A7ade</URI>
            <versionString>1.0</versionString>
        </targetSource>
        <targetSource xml:id="SID007">
            <URI>http://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia#Passion_Fa.C3.A7ade</URI>
            <versionString>1.0</versionString>
        </targetSource>
    </targetSources>
    <readers>
        <reader ref="ID01"/>
        <reader ref="ID03"/>
        <reader ref="ID04"/>
    </readers>
    <writers>
        <writer ref="ID01"/>
        <writer ref="ID03"/>
    </writers>
    <notebooks>
    </notebooks>
</annotation>

Responding GET api/annotations/AID01/sources (example usage for non-resolvable target sources)

<?xml version="1.0" encoding="UTF-8"?>
<sources xmlns="http://www.dasish.eu/ns/addit"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.dasish.eu/ns/addit file:/Users/olhsha/repositories/DASISH/t5.6/docs/XMLandXSD/DASISH-schema.xsd">
    <targetSource xml:id="SID005" lastModified="2006-05-04T18:13:51.0Z">
        <URI>http://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia#Nativity_Fa.C3.A7ade</URI>
        <versionString>1.0</versionString>
        <versions>
            <version ref="SID005"/>
            <version ref="SID015"/>
        </versions>
        <cachedRepresentations>
            <cachedRepresentation xml:id="CID005" URI="http://www.dasish.eu/DB/CID005" mimeType="text/html" tool="tool1" type="text"/>
            <cachedRepresentation xml:id="CID005A" URI="http://www.dasish.eu/DB/CID005A" mimeType="image/png" tool="tool2" type="screenshot"/>
            <cachedRepresentation xml:id="CID015" URI="http://www.dasish.eu/DB/CID015" mimeType="mimeType3" tool="tool3" type="type3"/>
        </cachedRepresentations>
    </targetSource>
    <targetSource xml:id="SID007" lastModified="2006-05-04T18:13:51.0Z">
        <URI>http://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia#Passion_Fa.C3.A7ade</URI>
        <versionString>1.0</versionString>
        <versions>
            <version ref="SID007"/>
            <version ref="SID017"/>
        </versions>
        <cachedRepresentations>
            <cachedRepresentation xml:id="CID007" URI="http://www.dasish.eu/DB/CID007" mimeType="mimeType5" tool="tool5" type="type5"/>
            <cachedRepresentation xml:id="CID017" URI="http://www.dasish.eu/DB/CID017" mimeType="mimeType7" tool="tool7" type="type7"/>
        </cachedRepresentations>
    </targetSource>
</sources>

Responding GET api/sources/SID05/cached (example usage for unresolvable target sources)

<?xml version="1.0" encoding="UTF-8"?>
<cashedRepresentations xmlns="http://www.dasish.eu/ns/addit"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.dasish.eu/ns/addit file:/Users/olhsha/repositories/DASISH/t5.6/docs/XMLandXSD/DASISH-schema.xsd">
   <cachedRepresentation xml:id="CID005" URI="http://www.dasish.eu/DB/CID005" mimeType="text/html" tool="tool1" type="text"/>
   <cachedRepresentation xml:id="CID005A" URI="http://www.dasish.eu/DB/CID005A" mimeType="image/png" tool="tool2" type="screenshot"/>
</cashedRepresentations>

Responding GET api/sources/SID05/cached/CID005A (example usage for unresolvable target sources)

<?xml version="1.0" encoding="UTF-8"?>
<cashedRepresentation xmlns="http://www.dasish.eu/ns/addit"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.dasish.eu/ns/addit file:/Users/olhsha/repositories/DASISH/t5.6/docs/XMLandXSD/DASISH-schema.xsd" 
 xml:id="CID005A" URI="http://www.dasish.eu/DB/CID005A" mimeType="image/png" tool="tool2" type="screenshot"/>

Request body for POST api/annotation

<?xml version="1.0" encoding="UTF-8"?>
<newAnnotation xmlns="http://www.dasish.eu/ns/addit"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.dasish.eu/ns/addit file:/Users/olhsha/repositories/DASISH/t5.6/docs/XMLandXSD/DASISH-schema.xsd" 
 xml:id="AID0010" 
 URI="http://www.dasish.eu/ns/addit/DB" 
 timeStamp="2013-05-04T18:13:51.0Z">
    <owner ref="ID02"/>
    <headline>Organ</headline>
    <body>
        <note>installed in 2010</note>
    </body>
    <targetSources>
        <targetSource xml:id="SID018">
            <URI>http://en.wikipedia.org/wiki/Sagrada_Fam%C3%ADlia#Organ</URI>
            <versionString></versionString>
        </targetSource>
    </targetSources>
    <readers>
        <reader ref="ID02"/>
    </readers>
    <writers>
        <writer ref="ID02"/>
    </writers>
    <notebooks>
    </notebooks>
</newAnnotation>