Skip to content
Snippets Groups Projects
Commit 220c0acb authored by Miguel Angel Reina Ortega's avatar Miguel Angel Reina Ortega
Browse files

XSD v1_3_0 baseline

parent 8f46fe64
No related branches found
No related tags found
No related merge requests found
...@@ -98,15 +98,25 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -98,15 +98,25 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
<xs:sequence> <xs:sequence>
<xs:element name="ipv4Addresses" minOccurs="0" maxOccurs="1"> <xs:element name="ipv4Addresses" minOccurs="0" maxOccurs="1">
<!-- space separated list of IPv4 addresses --> <!-- space separated list of IPv4 addresses -->
<xs:simpleType>
<xs:restriction>
<xs:simpleType> <xs:simpleType>
<xs:list itemType="m2m:ipv4" /> <xs:list itemType="m2m:ipv4" />
</xs:simpleType> </xs:simpleType>
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element> </xs:element>
<xs:element name="ipv6Addresses" minOccurs="0" maxOccurs="1"> <xs:element name="ipv6Addresses" minOccurs="0" maxOccurs="1">
<!-- space separated list of IPv6 addresses --> <!-- space separated list of IPv6 addresses -->
<xs:simpleType>
<xs:restriction>
<xs:simpleType> <xs:simpleType>
<xs:list itemType="m2m:ipv6" /> <xs:list itemType="m2m:ipv6" />
</xs:simpleType> </xs:simpleType>
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element> </xs:element>
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
...@@ -122,9 +132,14 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -122,9 +132,14 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
<xs:choice> <xs:choice>
<xs:element name="countryCode"> <xs:element name="countryCode">
<!-- Space separated list of 2-digit country codes --> <!-- Space separated list of 2-digit country codes -->
<xs:simpleType>
<xs:restriction>
<xs:simpleType> <xs:simpleType>
<xs:list itemType="m2m:countryCode" /> <xs:list itemType="m2m:countryCode" />
</xs:simpleType> </xs:simpleType>
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element> </xs:element>
<xs:element name="circRegion"> <xs:element name="circRegion">
<!-- "circularRegion" is an ordered list of following three parameters of data type float ´ 1) longitude in the range <!-- "circularRegion" is an ordered list of following three parameters of data type float ´ 1) longitude in the range
...@@ -134,8 +149,7 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -134,8 +149,7 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
<xs:simpleType> <xs:simpleType>
<xs:list itemType="xs:float" /> <xs:list itemType="xs:float" />
</xs:simpleType> </xs:simpleType>
<xs:minLength value="3" /> <xs:length value="3" />
<xs:maxLength value="3" />
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
</xs:element> </xs:element>
......
...@@ -62,12 +62,22 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -62,12 +62,22 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
</xs:simpleType> </xs:simpleType>
<xs:simpleType name="acpType"> <xs:simpleType name="acpType">
<list itemType="m2m:ID" /> <xs:restriction>
<xs:simpleType>
<xs:list itemType="m2m:ID" />
</xs:simpleType>
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType> </xs:simpleType>
<xs:simpleType name="labels"> <xs:simpleType name="labels">
<xs:restriction>
<xs:simpleType>
<xs:list itemType="xs:token" /> <xs:list itemType="xs:token" />
</xs:simpleType> </xs:simpleType>
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="triggerRecipientID"> <xs:simpleType name="triggerRecipientID">
<xs:restriction base="xs:unsignedInt"> <xs:restriction base="xs:unsignedInt">
...@@ -78,8 +88,13 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -78,8 +88,13 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
<!-- "listOfM2MID" is a space separated list of CSE-IDs and/or AE-IDs (i.e. elements of data type m2m:ID") --> <!-- "listOfM2MID" is a space separated list of CSE-IDs and/or AE-IDs (i.e. elements of data type m2m:ID") -->
<xs:simpleType name="listOfM2MID"> <xs:simpleType name="listOfM2MID">
<xs:restriction>
<xs:simpleType>
<xs:list itemType="m2m:ID" /> <xs:list itemType="m2m:ID" />
</xs:simpleType> </xs:simpleType>
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
<!-- auxiliary data type required to define "listOflongMin-1" below --> <!-- auxiliary data type required to define "listOflongMin-1" below -->
<xs:simpleType name="longMin-1"> <xs:simpleType name="longMin-1">
...@@ -88,29 +103,24 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -88,29 +103,24 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
<!-- auxiliary data type required to define "listOfMinMax" below -->
<xs:simpleType name="listOflongMin-1">
<xs:list itemType="m2m:longMin-1" />
</xs:simpleType>
<!-- "listOfMinMax" represents a list of min and max numbers used in attributes of the [cmdhLimits] resource based on <!-- "listOfMinMax" represents a list of min and max numbers used in attributes of the [cmdhLimits] resource based on
type xs:long in the range -1, 0, 1, 2 ... . Unit is milliseconds. Value setting of -1 expresses infinity --> type xs:long in the range -1, 0, 1, 2 ... . Unit is milliseconds. Value setting of -1 expresses infinity -->
<xs:simpleType name="listOfMinMax"> <xs:simpleType name="listOfMinMax">
<xs:restriction base="m2m:listOflongMin-1"> <xs:restriction>
<xs:simpleType>
<xs:list itemType="m2m:longMin-1" />
</xs:simpleType>
<xs:length value="2" /> <xs:length value="2" />
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
<!-- auxiliary data type required to define "backOffParameters" below -->
<xs:simpleType name="listOfNonNegInt">
<xs:list itemType="xs:nonNegativeInteger" />
</xs:simpleType>
<!-- "backOffParameters" is an ordered list of 3 nonNegativeInteger numbers: backoffTime, backoffTimeIncrement, maximumBackoffTime <!-- "backOffParameters" is an ordered list of 3 nonNegativeInteger numbers: backoffTime, backoffTimeIncrement, maximumBackoffTime
(in that order!), all units in milliseconds --> (in that order!), all units in milliseconds -->
<xs:simpleType name="backOffParameters"> <xs:simpleType name="backOffParameters">
<xs:restriction base="m2m:listOfNonNegInt"> <xs:restriction>
<xs:simpleType>
<xs:list itemType="xs:nonNegativeInteger" />
</xs:simpleType>
<xs:length value="3" /> <xs:length value="3" />
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
...@@ -118,8 +128,13 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -118,8 +128,13 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
<!-- m2m:ipv4 and m2m:ipv6 and m2m:countryCode are defined in the CDT-accessControlPolicy file --> <!-- m2m:ipv4 and m2m:ipv6 and m2m:countryCode are defined in the CDT-accessControlPolicy file -->
<xs:simpleType name="poaList"> <xs:simpleType name="poaList">
<xs:restriction>
<xs:simpleType>
<xs:list itemType="xs:string" /> <xs:list itemType="xs:string" />
</xs:simpleType> </xs:simpleType>
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
<!--Format is YYYYMMDDThhmmss with no punctuation --> <!--Format is YYYYMMDDThhmmss with no punctuation -->
<xs:simpleType name="timestamp"> <xs:simpleType name="timestamp">
...@@ -128,6 +143,21 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -128,6 +143,21 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
<xs:simpleType name="absRelTimestamp">
<xs:union>
<!-- absolute Time -->
<xs:simpleType>
<xs:restriction base='m2m:timestamp' />
</xs:simpleType>
<!-- relative Time -->
<xs:simpleType>
<xs:restriction base='xs:long' />
</xs:simpleType>
</xs:union>
</xs:simpleType>
<xs:simpleType name="typeOfContent"> <xs:simpleType name="typeOfContent">
<xs:restriction base="xs:string"> <xs:restriction base="xs:string">
<xs:pattern value="[\w/!#$^_.+&amp;\-]+" /> <xs:pattern value="[\w/!#$^_.+&amp;\-]+" />
...@@ -170,22 +200,37 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -170,22 +200,37 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
</xs:simpleType> </xs:simpleType>
<xs:simpleType name="listOfEventCat"> <xs:simpleType name="listOfEventCat">
<list itemType="m2m:eventCat" /> <xs:restriction>
<xs:simpleType>
<xs:list itemType="m2m:eventCat" />
</xs:simpleType>
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType> </xs:simpleType>
<xs:simpleType name="listOfEventCatWithDef"> <xs:simpleType name="listOfEventCatWithDef">
<list itemType="m2m:eventCatWithDef" /> <xs:restriction>
<xs:simpleType>
<xs:list itemType="m2m:eventCatWithDef" />
</xs:simpleType>
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType> </xs:simpleType>
<xs:simpleType name="scheduleEntry"> <xs:simpleType name="scheduleEntry">
<xs:restriction base="xs:string"> <xs:restriction base="xs:string">
<xs:pattern <xs:pattern
value="(([*]|[1-5]?\d([,-][1-5]?\d)*)\s+){2}([*]|((1?\d|2[0-3])([,-](1?\d|2[0-3]))*))\s+([*]|(([1-9]|1\d|2\d|3[01])([,-]([1-9]|1\d|2\d|3[01]))*))\s+([*]|(([1-9]|1[0-2])([,-]([1-9]|1[0-2]))*))\s+[*]|([0-6]([,-][0-6])*)" /> value="(([*]|[1-5]?\d([,-][1-5]?\d)*)\s+){2}([*]|((1?\d|2[0-3])([,-](1?\d|2[0-3]))*))\s+([*]|(([1-9]|1\d|2\d|3[01])([,-]([1-9]|1\d|2\d|3[01]))*))\s+([*]|(([1-9]|1[0-2])([,-]([1-9]|1[0-2]))*))\s+([*]|([0-6]([,-][0-6])*))" />
</xs:restriction> </xs:restriction>
</xs:simpleType> </xs:simpleType>
<xs:simpleType name="listOfURIs"> <xs:simpleType name="listOfURIs">
<list itemType="xs:anyURI" /> <xs:restriction>
<xs:simpleType>
<xs:list itemType="xs:anyURI" />
</xs:simpleType>
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType> </xs:simpleType>
...@@ -225,11 +270,11 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -225,11 +270,11 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
<xs:element name="resourceType" type="m2m:resourceType" minOccurs="0" /> <xs:element name="resourceType" type="m2m:resourceType" minOccurs="0" />
<xs:element name="name" type="xs:NCName" minOccurs="0" /> <xs:element name="name" type="xs:NCName" minOccurs="0" />
<xs:element name="originatingTimestamp" type="m2m:timestamp" minOccurs="0" /> <xs:element name="originatingTimestamp" type="m2m:timestamp" minOccurs="0" />
<xs:element name="requestExpirationTimestamp" type="m2m:timestamp" minOccurs="0" /> <xs:element name="requestExpirationTimestamp" type="m2m:absRelTimestamp" minOccurs="0" />
<xs:element name="resultExpirationTimestamp" type="m2m:timestamp" minOccurs="0" /> <xs:element name="resultExpirationTimestamp" type="m2m:absRelTimestamp" minOccurs="0" />
<xs:element name="operationExecutionTime" type="m2m:timestamp" minOccurs="0" /> <xs:element name="operationExecutionTime" type="m2m:absRelTimestamp" minOccurs="0" />
<xs:element name="responseType" type="m2m:responseTypeInfo" minOccurs="0" /> <xs:element name="responseType" type="m2m:responseTypeInfo" minOccurs="0" />
<xs:element name="resultPersistence" type="xs:duration" minOccurs="0" /> <xs:element name="resultPersistence" type="m2m:absRelTimestamp" minOccurs="0" />
<xs:element name="resultContent" type="m2m:resultContent" minOccurs="0" /> <xs:element name="resultContent" type="m2m:resultContent" minOccurs="0" />
<xs:element name="eventCategory" type="m2m:eventCat" minOccurs="0" /> <xs:element name="eventCategory" type="m2m:eventCat" minOccurs="0" />
<xs:element name="deliveryAggregation" type="xs:boolean" minOccurs="0" /> <xs:element name="deliveryAggregation" type="xs:boolean" minOccurs="0" />
...@@ -431,7 +476,7 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -431,7 +476,7 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
<xs:element name="to" type="xs:anyURI" minOccurs="0" /> <xs:element name="to" type="xs:anyURI" minOccurs="0" />
<xs:element name="from" type="m2m:ID" minOccurs="0" /> <xs:element name="from" type="m2m:ID" minOccurs="0" />
<xs:element name="originatingTimestamp" type="m2m:timestamp" minOccurs="0" /> <xs:element name="originatingTimestamp" type="m2m:timestamp" minOccurs="0" />
<xs:element name="resultExpirationTimestamp" type="m2m:timestamp" minOccurs="0" /> <xs:element name="resultExpirationTimestamp" type="m2m:absRelTimestamp" minOccurs="0" />
<xs:element name="eventCategory" type="m2m:eventCat" minOccurs="0" /> <xs:element name="eventCategory" type="m2m:eventCat" minOccurs="0" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
...@@ -471,9 +516,14 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -471,9 +516,14 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
<xs:sequence> <xs:sequence>
<xs:element name="announceTo" type="m2m:listOfURIs" minOccurs="0" /> <xs:element name="announceTo" type="m2m:listOfURIs" minOccurs="0" />
<xs:element name="announcedAttribute" minOccurs="0"> <xs:element name="announcedAttribute" minOccurs="0">
<xs:simpleType>
<xs:restriction>
<xs:simpleType> <xs:simpleType>
<xs:list itemType="xs:NCName" /> <xs:list itemType="xs:NCName" />
</xs:simpleType> </xs:simpleType>
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
</xs:element> </xs:element>
</xs:sequence> </xs:sequence>
</xs:extension> </xs:extension>
...@@ -501,7 +551,12 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -501,7 +551,12 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
<xs:element name="announceTo" type="m2m:listOfURIs" minOccurs="0" /> <xs:element name="announceTo" type="m2m:listOfURIs" minOccurs="0" />
<xs:element name="announcedAttribute" minOccurs="0"> <xs:element name="announcedAttribute" minOccurs="0">
<xs:simpleType> <xs:simpleType>
<xs:list itemType="xs:token" /> <xs:restriction>
<xs:simpleType>
<xs:list itemType="xs:NCName" />
</xs:simpleType>
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType> </xs:simpleType>
</xs:element> </xs:element>
</xs:sequence> </xs:sequence>
......
...@@ -47,18 +47,20 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -47,18 +47,20 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
<xs:element name="name" type="xs:NCName" minOccurs="0"/> <xs:element name="name" type="xs:NCName" minOccurs="0"/>
<!-- parameter "Content" --> <!-- parameter "Content" -->
<xs:element name="primitiveContent" type="m2m:primitiveContent" minOccurs="0"/> <xs:element name="primitiveContent" type="m2m:primitiveContent" minOccurs="0"/>
<!-- parameter "Role" -->
<xs:element name="role" type="xs:anyType" minOccurs="0"/>
<!-- parameter "Originating Timestamp" --> <!-- parameter "Originating Timestamp" -->
<xs:element name="originatingTimestamp" type="m2m:timestamp" minOccurs="0"/> <xs:element name="originatingTimestamp" type="m2m:timestamp" minOccurs="0"/>
<!-- parameter "Request Expiration Timestamp" --> <!-- parameter "Request Expiration Timestamp" -->
<xs:element name="requestExpirationTimestamp" type="m2m:timestamp" minOccurs="0"/> <xs:element name="requestExpirationTimestamp" type="m2m:absRelTimestamp" minOccurs="0"/>
<!-- parameter "Result Expiration Timestamp" --> <!-- parameter "Result Expiration Timestamp" -->
<xs:element name="resultExpirationTimestamp" type="m2m:timestamp" minOccurs="0"/> <xs:element name="resultExpirationTimestamp" type="m2m:absRelTimestamp" minOccurs="0"/>
<!-- parameter "Operation Execution Time" --> <!-- parameter "Operation Execution Time" -->
<xs:element name="operationExecutionTime" type="m2m:timestamp" minOccurs="0"/> <xs:element name="operationExecutionTime" type="m2m:absRelTimestamp" minOccurs="0"/>
<!-- parameter "Response Type" --> <!-- parameter "Response Type" -->
<xs:element name="responseType" type="m2m:responseTypeInfo" minOccurs="0"/> <xs:element name="responseType" type="m2m:responseTypeInfo" minOccurs="0"/>
<!-- parameter "Result Persistence" --> <!-- parameter "Result Persistence" -->
<xs:element name="resultPersistence" type="xs:duration" minOccurs="0"/> <xs:element name="resultPersistence" type="m2m:absRelTimestamp" minOccurs="0"/>
<!-- parameter "Result Content" --> <!-- parameter "Result Content" -->
<xs:element name="resultContent" type="m2m:resultContent" minOccurs="0"/> <xs:element name="resultContent" type="m2m:resultContent" minOccurs="0"/>
<!-- parameter "Event Category" --> <!-- parameter "Event Category" -->
......
...@@ -48,7 +48,7 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -48,7 +48,7 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
<!-- parameter "Originating Timestamp" --> <!-- parameter "Originating Timestamp" -->
<xs:element name="originatingTimestamp" type="m2m:timestamp" minOccurs="0"/> <xs:element name="originatingTimestamp" type="m2m:timestamp" minOccurs="0"/>
<!-- parameter "Result Expiration Timestamp" --> <!-- parameter "Result Expiration Timestamp" -->
<xs:element name="resultExpirationTimestamp" type="m2m:timestamp" minOccurs="0"/> <xs:element name="resultExpirationTimestamp" type="m2m:absRelTimestamp" minOccurs="0"/>
<!-- parameter "Event Category" --> <!-- parameter "Event Category" -->
<xs:element name="eventCategory" type="m2m:eventCat" minOccurs="0" /> <xs:element name="eventCategory" type="m2m:eventCat" minOccurs="0" />
</xs:sequence> </xs:sequence>
...@@ -57,7 +57,7 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -57,7 +57,7 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
<xs:element name="resource" type="m2m:resourceWrapper" /> <xs:element name="resource" type="m2m:resourceWrapper" />
<xs:element name="URIlist" type="m2m:listOfURIs" /> <xs:element name="URIList" type="m2m:listOfURIs" />
<xs:element name="aggregatedResponse" type="m2m:aggregatedResponse" /> <xs:element name="aggregatedResponse" type="m2m:aggregatedResponse" />
......
...@@ -84,8 +84,8 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR ...@@ -84,8 +84,8 @@ oneM2M EXPRESSLY ADVISES ANY AND ALL USE OF OR RELIANCE UPON THIS INFORMATION PR
<xs:complexType name="batchNotify"> <xs:complexType name="batchNotify">
<xs:sequence> <xs:sequence>
<xs:element name="number" type="xs:nonNegativeInteger" minOccurs="0" /> <xs:element name="number" type="xs:nonNegativeInteger" />
<xs:element name="duration" type="xs:duration" minOccurs="0" /> <xs:element name="duration" type="xs:duration" />
</xs:sequence> </xs:sequence>
</xs:complexType> </xs:complexType>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment