<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="eml://ecoinformatics.org/dataquery" targetNamespace="eml://ecoinformatics.org/dataquery"> <xs:element name="dataquery"> <xs:complexType> <xs:sequence> <xs:choice> <xs:element name="union" type="unionType"/> <xs:element name="query" type="queryType"/> </xs:choice> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="unionType"> <xs:sequence> <xs:element name="query" type="queryType" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="order" type="xs:boolean" use="optional" default="false"/> </xs:complexType> <xs:complexType name="queryType"> <xs:sequence> <xs:element name="selection" type="selectionType" maxOccurs="unbounded"/> <xs:element name="where" type="whereType" minOccurs="0"/> </xs:sequence> <xs:attribute name="distinct" type="xs:boolean" use="optional" default="false"/> </xs:complexType> <xs:complexType name="selectionType"> <xs:sequence> <xs:element name="datapackage" type="datapackageType" maxOccurs="unbounded"/> <xs:element name="staticItem" type="staticItemType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name="whereType"> <xs:sequence> <xs:choice> <xs:sequence> <xs:element name="condition" type="conditionType" minOccurs="0"/> <xs:element name="or" type="logicalRelationType" minOccurs="0"/> <xs:element name="and" type="logicalRelationType" minOccurs="0"/> </xs:sequence> </xs:choice> </xs:sequence> </xs:complexType> <xs:complexType name="logicalRelationType"> <xs:sequence> <xs:choice> <xs:sequence> <xs:element name="condition" type="conditionType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="or" type="logicalRelationType" minOccurs="0"/> <xs:element name="and" type="logicalRelationType" minOccurs="0"/> </xs:sequence> </xs:choice> </xs:sequence> </xs:complexType> <xs:complexType name="conditionType"> <xs:sequence> <xs:element name="left" type="conditionMemberType"/> <xs:element name="operator" type="xs:string"/> <xs:element name="right" type="conditionMemberType"/> </xs:sequence> <xs:attribute name="type" type="xs:string" use="required"/> </xs:complexType> <xs:complexType name="conditionMemberType"> <xs:sequence> <xs:choice> <xs:element name="datapackage" type="datapackageType"/> <xs:element name="value" type="xs:string"/> <xs:element name="subquery" type="queryType"/> </xs:choice> </xs:sequence> </xs:complexType> <xs:complexType name="datapackageType"> <xs:sequence> <xs:element name="entity" type="entityType" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="xs:string"/> </xs:complexType> <xs:complexType name="entityType"> <xs:sequence> <xs:element name="attribute" type="attributeType" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="index" type="xs:int"/> <xs:attribute name="name" type="xs:string" use="optional"/> <xs:attribute name="id" type="xs:string" use="optional"/> </xs:complexType> <xs:complexType name="attributeType"> <xs:sequence> <xs:element name="pathexpr" minOccurs="0"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="label" type="xs:string" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="index" type="xs:int" use="optional"></xs:attribute> <xs:attribute name="name" type="xs:string" use="optional"></xs:attribute> </xs:complexType> <xs:complexType name="staticItemType"> <xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="value" type="xs:string" use="optional" /> </xs:complexType> </xs:schema>