<?xml version="1.0" encoding="UTF-8"?>
<!--
$Id: value.xsd 332 2009-05-29 02:16:28Z radack $
ISO TC 184/SC 4/WG 12 N5192 - ISO/TS 29002-10 Value - XML schema
-->
<!--
The following permission notice and disclaimer shall be included in all copies of this XML schema ("the Schema"), and derivations of the Schema:
Permission is hereby granted, free of charge in perpetuity, to any person obtaining a copy of the Schema, to use, copy, modify, merge and distribute free of charge, copies of the Schema for the purposes of developing, implementing, installing and using software based on the Schema, and to permit persons to whom the Schema is furnished to do so, subject to the following conditions:
THE SCHEMA IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SCHEMA OR THE USE OR OTHER DEALINGS IN THE SCHEMA.
In addition, any modified copy of the Schema shall include the following notice:
THIS SCHEMA HAS BEEN MODIFIED FROM THE SCHEMA DEFINED IN ISO/TS 29002-10, AND SHOULD NOT BE INTERPRETED AS COMPLYING WITH THAT STANDARD.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:val="urn:iso:std:iso:ts:29002:-10:ed-1:tech:xml-schema:value" xmlns:bas="urn:iso:std:iso:ts:29002:-4:ed-1:tech:xml-schema:basic" xmlns:id="urn:iso:std:iso:ts:29002:-5:ed-1:tech:xml-schema:identifier" targetNamespace="urn:iso:std:iso:ts:29002:-10:ed-1:tech:xml-schema:value" elementFormDefault="qualified">
<xs:import namespace="urn:iso:std:iso:ts:29002:-5:ed-1:tech:xml-schema:identifier" schemaLocation="identifier.xsd"/>
<xs:import namespace="urn:iso:std:iso:ts:29002:-4:ed-1:tech:xml-schema:basic" schemaLocation="basic.xsd"/>
<!-- Global Elements -->
<xs:element name="combination" type="val:combination_Type"/>
<xs:element name="bag_value" type="val:bag_value_Type"/>
<xs:element name="boolean_value" type="val:boolean_value_Type"/>
<xs:element name="complex_value" type="val:complex_value_Type"/>
<xs:element name="composite_value" type="val:composite_value_Type"/>
<xs:element name="controlled_value" type="val:controlled_value_Type"/>
<xs:element name="currency_value" type="val:currency_value_Type"/>
<xs:element name="date_value" type="val:date_value_Type"/>
<xs:element name="date_time_value" type="val:date_time_value_Type"/>
<xs:element name="environment" type="val:environment_Type"/>
<xs:element name="file_value" type="val:file_value_Type"/>
<xs:element name="integer_value" type="val:integer_value_Type"/>
<xs:element name="item_reference_value" type="val:item_reference_value_Type"/>
<xs:element name="localized_text_value" type="val:localized_text_value_Type"/>
<xs:element name="measure_qualified_number_value" type="val:measure_qualified_number_value_Type"/>
<xs:element name="measure_range_value" type="val:measure_range_value_Type"/>
<xs:element name="measure_single_number_value" type="val:measure_single_number_value_Type"/>
<xs:element name="null_value" type="val:null_value_Type"/>
<xs:element name="one_of" type="val:one_of_Type"/>
<xs:element name="rational_value" type="val:rational_value_Type"/>
<xs:element name="real_value" type="val:real_value_Type"/>
<xs:element name="sequence_value" type="val:sequence_value_Type"/>
<xs:element name="set_value" type="val:set_value_Type"/>
<xs:element name="string_value" type="val:string_value_Type"/>
<xs:element name="time_value" type="val:time_value_Type"/>
<xs:element name="year_month_value" type="val:year_month_value_Type"/>
<xs:element name="year_value" type="val:year_value_Type"/>
<!-- Groups -->
<!-- Extended Value -->
<xs:group name="extended_value_Group">
<xs:choice>
<xs:group ref="val:value_Group"/>
<xs:element ref="val:one_of"/>
<xs:element ref="val:combination"/>
</xs:choice>
</xs:group>
<!-- Value -->
<xs:group name="value_Group">
<xs:choice>
<!-- The first element in the following list is the one that will be created by default in some XML editors whenever a property_value is added. -->
<xs:element ref="val:string_value"/>
<xs:element ref="val:bag_value"/>
<xs:element ref="val:boolean_value"/>
<xs:element ref="val:complex_value"/>
<xs:element ref="val:composite_value"/>
<xs:element ref="val:controlled_value"/>
<xs:element ref="val:currency_value"/>
<xs:element ref="val:date_value"/>
<xs:element ref="val:date_time_value"/>
<xs:element ref="val:file_value"/>
<xs:element ref="val:integer_value"/>
<xs:element ref="val:item_reference_value"/>
<xs:element ref="val:localized_text_value"/>
<xs:element ref="val:measure_qualified_number_value"/>
<xs:element ref="val:measure_range_value"/>
<xs:element ref="val:measure_single_number_value"/>
<xs:element ref="val:null_value"/>
<xs:element ref="val:rational_value"/>
<xs:element ref="val:real_value"/>
<xs:element ref="val:sequence_value"/>
<xs:element ref="val:set_value"/>
<xs:element ref="val:time_value"/>
<xs:element ref="val:year_month_value"/>
<xs:element ref="val:year_value"/>
</xs:choice>
</xs:group>
<!-- Numeric Value -->
<xs:group name="numeric_value">
<xs:choice>
<!-- The first element in the following list is the one that will be created by default in some XML editors whenever a property_value is added. -->
<xs:element ref="val:real_value"/>
<xs:element ref="val:complex_value"/>
<xs:element ref="val:integer_value"/>
<xs:element ref="val:rational_value"/>
</xs:choice>
</xs:group>
<!-- Global Types -->
<!-- Bag Value -->
<xs:complexType name="bag_value_Type">
<xs:sequence>
<xs:group ref="val:value_Group" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- Boolean Value -->
<xs:complexType name="boolean_value_Type">
<xs:simpleContent>
<xs:extension base="xs:boolean"/>
</xs:simpleContent>
</xs:complexType>
<!-- Combination -->
<xs:complexType name="combination_Type">
<xs:sequence>
<xs:group ref="val:value_Group" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- Complex Value -->
<xs:complexType name="complex_value_Type">
<xs:sequence>
<xs:element name="real_part" type="xs:double"/>
<xs:element name="imaginary_part" type="xs:double"/>
</xs:sequence>
</xs:complexType>
<!-- Composite Value -->
<xs:complexType name="composite_value_Type">
<xs:sequence>
<xs:element name="field" type="val:field_Type" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- Condition Element -->
<xs:complexType name="condition_element_Type">
<xs:sequence>
<xs:group ref="val:value_Group"/>
</xs:sequence>
<xs:attribute name="property_ref" type="id:IRDI_type" use="required"/>
</xs:complexType>
<!-- Controlled Value -->
<xs:complexType name="controlled_value_Type">
<xs:attribute name="value_ref" type="id:IRDI_type" use="optional"/>
<xs:attribute name="value_code" type="xs:string" use="optional"/>
<!-- Constraint: value_ref or value_code (or both) must be specified. -->
<!-- Constraint: If both value_ref and value_code specified, they must denote the same concept. -->
</xs:complexType>
<!-- Currency Value -->
<xs:complexType name="currency_value_Type">
<xs:sequence>
<xs:group ref="val:numeric_value"/>
</xs:sequence>
<xs:attribute name="currency_ref" type="id:IRDI_type" use="optional"/>
<xs:attribute name="currency_code" type="bas:ISO_currency_code_Type" use="optional"/>
<!-- Constraint: currency_ref or currency_code (or both) must be specified. -->
<!-- Constraint: If both currency_ref and currency_code are specified, they must denote the same concept. -->
</xs:complexType>
<!-- Date Value -->
<xs:complexType name="date_value_Type">
<xs:simpleContent>
<xs:extension base="xs:date"/>
</xs:simpleContent>
</xs:complexType>
<!-- Date Time Value -->
<xs:complexType name="date_time_value_Type">
<xs:simpleContent>
<xs:extension base="xs:dateTime"/>
</xs:simpleContent>
</xs:complexType>
<!-- Environment -->
<xs:complexType name="environment_Type">
<xs:sequence>
<xs:element name="property_value" type="val:condition_element_Type" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- Field -->
<xs:complexType name="field_Type">
<xs:sequence>
<xs:group ref="val:value_Group"/>
</xs:sequence>
<xs:attribute name="property_ref" type="id:IRDI_type" use="optional"/>
</xs:complexType>
<!-- File Value -->
<xs:complexType name="file_value_Type">
<xs:sequence>
<xs:element name="URI" type="xs:anyURI"/>
</xs:sequence>
</xs:complexType>
<!-- Integer Value -->
<xs:complexType name="integer_value_Type">
<xs:simpleContent>
<xs:extension base="xs:int"/>
</xs:simpleContent>
</xs:complexType>
<!-- Item Reference Value -->
<xs:complexType name="item_reference_value_Type">
<xs:attribute name="item_local_ref" type="xs:IDREF" use="required"/>
</xs:complexType>
<!-- Localized Text Value -->
<xs:complexType name="localized_text_value_Type">
<xs:sequence>
<xs:element name="content" type="bas:international_text_Type"/>
</xs:sequence>
</xs:complexType>
<!-- Measure Qualified Number Value -->
<xs:complexType name="measure_qualified_number_value_Type">
<xs:complexContent>
<xs:extension base="val:measure_value_Type">
<xs:sequence>
<xs:element name="qualified_value" type="val:qualified_value_Type" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Measure Range Value -->
<xs:complexType name="measure_range_value_Type">
<xs:complexContent>
<xs:extension base="val:measure_value_Type">
<xs:sequence>
<xs:element name="lower_value" type="val:numeric_value_Type"/>
<xs:element name="upper_value" type="val:numeric_value_Type"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Measure Single Number Value -->
<xs:complexType name="measure_single_number_value_Type">
<xs:complexContent>
<xs:extension base="val:measure_value_Type">
<xs:sequence>
<xs:choice>
<xs:group ref="val:numeric_value"/>
</xs:choice>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- Measure Value -->
<xs:complexType name="measure_value_Type" abstract="true">
<xs:attribute name="UOM_ref" type="id:IRDI_type" use="optional"/>
<xs:attribute name="UOM_code" type="xs:string" use="optional"/>
<!-- Constraint: UOM_ref or UOM_code (or both) must be specified. -->
<!-- Constraint: If UOM_ref or UOM_code are specified, they must denote the same concept. -->
</xs:complexType>
<!-- Null Value -->
<xs:complexType name="null_value_Type"/>
<!-- Numeric Value -->
<xs:complexType name="numeric_value_Type">
<xs:sequence>
<xs:group ref="val:numeric_value"/>
</xs:sequence>
</xs:complexType>
<!-- OneOf -->
<xs:complexType name="one_of_Type">
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element ref="val:combination"/>
<xs:group ref="val:value_Group"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
<!-- Qualified Value -->
<xs:complexType name="qualified_value_Type">
<xs:sequence>
<xs:group ref="val:numeric_value"/>
</xs:sequence>
<xs:attribute name="qualifier_ref" type="id:IRDI_type" use="optional"/>
<xs:attribute name="qualifier_code" type="xs:string" use="optional"/>
<!-- Constraint: qualifier_ref or qualifier_code (or both) must be specified. -->
<!-- Constraint: If both qualifier_ref or qualifier_code are specified, they must denote the same concept. -->
</xs:complexType>
<!-- Rational Value -->
<xs:complexType name="rational_value_Type">
<xs:sequence>
<xs:element name="whole_part" type="xs:int" minOccurs="0"/>
<xs:element name="numerator" type="xs:int"/>
<xs:element name="denominator" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<!-- Real Value -->
<xs:complexType name="real_value_Type">
<xs:simpleContent>
<xs:extension base="xs:double"/>
</xs:simpleContent>
</xs:complexType>
<!-- Sequence Value -->
<xs:complexType name="sequence_value_Type">
<xs:sequence>
<xs:group ref="val:value_Group" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- Set Value -->
<xs:complexType name="set_value_Type">
<xs:sequence>
<xs:group ref="val:value_Group" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<!-- String Value -->
<xs:complexType name="string_value_Type">
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
<!-- Time Value -->
<xs:complexType name="time_value_Type">
<xs:simpleContent>
<xs:extension base="xs:time"/>
</xs:simpleContent>
</xs:complexType>
<!-- Year Month Value -->
<xs:complexType name="year_month_value_Type">
<xs:simpleContent>
<xs:extension base="xs:gYearMonth"/>
</xs:simpleContent>
</xs:complexType>
<!-- Year Value -->
<xs:complexType name="year_value_Type">
<xs:simpleContent>
<xs:extension base="xs:gYear"/>
</xs:simpleContent>
</xs:complexType>
</xs:schema>