source: metadata/trunk/toolkit/src/main/resources/toolkit/xsd/cmd-component.xsd @ 6904

Last change on this file since 6904 was 6904, checked in by Menzo Windhouwer, 9 years ago

M toolkit/src/test/java/eu/clarin/cmd/toolkit/TestCMDToolkit.java

  • added downgrade tests

M toolkit/src/main/resources/toolkit/xsd/cmd-component.xsd

  • readded a_res Schematron rule to warn that @ref and @ComponentId? wont survive a downgrade to 1.1

M toolkit/src/main/resources/toolkit/downgrade/cmd-component-1_2-to-1_1.xsl

  • fixes around Attributes
  • Property svn:executable set to *
  • Property svn:keywords set to
    Rev
    Date
  • Property svn:mergeinfo set to (toggle deleted branches)
    /ComponentRegistry/branches/ComponentRegistry-1.12.0/ComponentRegistry/src/main/binding/general-component-schema.xsd2071-2124
    /ComponentRegistry/branches/ComponentRegistry-1.13.0-olha/ComponentRegistry/src/main/binding/components/general-component-schema.xsd2143-2514
    /ComponentRegistry/branches/ComponentRegistry-schematron/ComponentRegistry/src/main/binding/general-component-schema.xsd1751-1797
    /ComponentRegistry/tags/ComponentRegistry-1.8.1/ComponentRegistry/src/main/binding/general-component-schema.xsd1420-1453
    /ComponentRegistry/tags/ComponentRegistry-1.9.1/ComponentRegistry/src/main/binding/general-component-schema.xsd1565
    /ComponentRegistry/trunk/ComponentRegistry/src/main/binding/components/general-component-schema.xsd2143-2395
    /ComponentRegistry/trunk/ComponentRegistry/src/main/binding/general-component-schema.xsd17-1476
    /ComponentRegistry/trunk/ComponentRegistry/src/test/resources/clarin_catalog/general-component-schema.xsd3885-3892
File size: 25.8 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3    $Revision: 6904 $
4    $Date: 2016-01-13 12:37:51 +0000 (Wed, 13 Jan 2016) $
5-->
6
7<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sch="http://purl.oclc.org/dsdl/schematron"
8    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.0" vc:maxVersion="1.1">
9
10    <xs:import namespace="http://www.w3.org/XML/1998/namespace"
11        schemaLocation="http://www.w3.org/2005/08/xml.xsd"/>
12
13    <!-- root element -->
14    <xs:element name="ComponentSpec">
15        <xs:annotation>
16            <xs:appinfo>
17                <sch:pattern id="h_succ">
18                    <sch:title>Check successor</sch:title>
19                    <sch:rule context="Header/Successor">
20                        <sch:assert test="../Status='deprecated'">There can only be a successor component/profile if the status of this component/profile is deprecated!</sch:assert>
21                    </sch:rule>
22                </sch:pattern>
23                <sch:pattern id="r_card">
24                    <sch:title>Cardinality root component</sch:title>
25                    <sch:rule context="ComponentSpec/Component">
26                        <sch:assert test="empty(@CardinalityMin) or @CardinalityMin='1'">The minimum cardinality of the root component should be 1!</sch:assert>
27                        <sch:assert test="empty(@CardinalityMax) or @CardinalityMax='1'">The maximum cardinality of the root component should be 1!</sch:assert>
28                    </sch:rule>
29                </sch:pattern>
30            </xs:appinfo>
31        </xs:annotation>
32        <xs:complexType>
33            <xs:sequence>
34                <xs:element name="Header">
35                    <xs:complexType>
36                        <xs:sequence>
37                            <xs:element name="ID" type="xs:anyURI" minOccurs="0" maxOccurs="1"/>
38                            <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1"/>
39                            <xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1"/>
40                            <!-- status information -->
41                            <xs:element name="Status" minOccurs="1" maxOccurs="1">
42                                <xs:simpleType>
43                                    <xs:restriction base="xs:string">
44                                        <xs:enumeration value="development"/>
45                                        <xs:enumeration value="production"/>
46                                        <xs:enumeration value="deprecated"/>
47                                    </xs:restriction>
48                                </xs:simpleType>
49                            </xs:element>
50                            <xs:element name="StatusComment" type="xs:string" minOccurs="0" maxOccurs="1"/>
51                            <xs:element name="Successor" type="xs:anyURI" minOccurs="0" maxOccurs="1"/>
52                        </xs:sequence>
53                    </xs:complexType>
54                </xs:element>
55                <xs:element name="Component" type="Component_type">
56                    <xs:annotation>
57                        <xs:documentation>At the root level there should always be a Component.</xs:documentation>
58                    </xs:annotation>
59                </xs:element>
60            </xs:sequence>
61            <xs:attribute name="isProfile" type="xs:boolean" use="required"/>
62        </xs:complexType>
63    </xs:element>
64
65    <!-- recursive construction: A component can contain elements and/or other components  -->
66    <xs:group name="group">
67        <xs:annotation>
68            <xs:appinfo>
69                <sch:pattern id="c_sibs">
70                    <sch:title>Check siblings</sch:title>
71                    <sch:rule context="Component|Element">
72                        <sch:assert test="empty(preceding-sibling::*[@name=current()/@name])">Sibling components or elements should all have a different name. Found multiple components or elements named '<sch:value-of select="@name"/>'!</sch:assert>
73                    </sch:rule>
74                </sch:pattern>
75                <sch:pattern id="c_csibs">
76                    <sch:title>Check component siblings</sch:title>
77                    <sch:rule context="Component">
78                        <sch:assert test="empty(preceding-sibling::Component[@ComponentId=current()/@ComponentId])">Sibling components should all be different. Found multiple components with id '<sch:value-of select="@ComponentId"/>'!</sch:assert>
79                    </sch:rule>
80                </sch:pattern>
81                <!-- TODO: check: the names of referenced external components are not known, so we can't currently check if two or more of them use the same name -->
82                <sch:pattern id="c_nest">
83                    <sch:title>Check nesting</sch:title>
84                    <sch:rule context="Component[exists(Component|Element)]" role="warning">
85                        <sch:assert test="empty((Component|Element)[@name=current()/@name])">A nested component or element has the same name ('<sch:value-of select="@name"/>') as this component! Please, consider to rename one of them.</sch:assert>
86                    </sch:rule>
87                </sch:pattern>
88            </xs:appinfo>
89        </xs:annotation>
90        <xs:sequence>
91            <xs:element name="Documentation" type="Documentation_type" minOccurs="0" maxOccurs="unbounded"/>
92            <!-- from small (attribute) to big (component) -->
93            <xs:element name="AttributeList" type="AttributeList_type" minOccurs="0" maxOccurs="1"/>
94            <xs:element name="Element" type="Element_type" minOccurs="0" maxOccurs="unbounded"/>
95            <xs:element name="Component" type="Component_type" minOccurs="0" maxOccurs="unbounded"/>
96        </xs:sequence>
97    </xs:group>
98
99    <!-- type definitions -->
100    <xs:complexType name="Documentation_type">
101        <xs:annotation>
102            <xs:documentation>Some information an application (eg Arbil) can display to give
103                guidance to the user when entering metadata.</xs:documentation>
104            <xs:appinfo>
105                <sch:pattern id="d_dsibs">
106                    <sch:title>Check Documentation siblings</sch:title>
107                    <sch:rule context="Documentation">
108                        <sch:assert test="empty(preceding-sibling::Documentation[@xml:lang=current()/@xml:lang])">Sibling Documentation elements should all be for different languages. Found multiple Documentation elements with xml:lang '<sch:value-of select="@xml:lang"/>'!</sch:assert>
109                    </sch:rule>
110                </sch:pattern>
111            </xs:appinfo>
112        </xs:annotation>
113        <xs:simpleContent>
114            <xs:extension base="xs:string">
115                <xs:attribute ref="xml:lang" use="optional"/>
116            </xs:extension>
117        </xs:simpleContent>
118    </xs:complexType>
119
120    <xs:complexType name="Element_type">
121        <xs:annotation>
122            <xs:appinfo>
123                <sch:pattern id="e_vs">
124                    <sch:title>Check Element ValueScheme</sch:title>
125                    <sch:rule context="Element">
126                        <sch:assert test="exists(@ValueScheme) or exists(ValueScheme)">An Element must have either a @ValueScheme or a ./ValueScheme!</sch:assert>
127                    </sch:rule>
128                </sch:pattern>
129            </xs:appinfo>
130        </xs:annotation>
131        <xs:sequence>
132            <xs:element name="Documentation" type="Documentation_type" minOccurs="0" maxOccurs="unbounded"/>
133            <xs:element name="AttributeList" type="AttributeList_type" minOccurs="0" maxOccurs="1">
134                <xs:annotation>
135                    <xs:documentation>The AttributeList child of an element contains a set of XML
136                        attributes for that element.</xs:documentation>
137                </xs:annotation>
138            </xs:element>
139            <xs:element minOccurs="0" maxOccurs="1" name="ValueScheme" type="ValueScheme_type">
140                <xs:annotation>
141                    <xs:documentation>When an element is linked to a regular expression or a
142                        controlled vocabulary, the ValueScheme sub-element contains more information
143                        about this.</xs:documentation>
144                </xs:annotation>
145            </xs:element>
146            <xs:element name="AutoValue" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
147        </xs:sequence>
148        <xs:attributeGroup ref="element_attributes"/>
149    </xs:complexType>
150
151    <xs:complexType name="ValueScheme_type">
152        <xs:annotation>
153            <xs:appinfo>
154                <sch:pattern id="v_uri">
155                    <sch:title>Check Vocabulary URI</sch:title>
156                    <sch:rule context="Vocabulary[exists(@URI)]">
157                        <sch:assert test="exists(@ValueProperty)">When an external vocabulary is used (identified by the @URI) a @ValueProperty has to be specified!</sch:assert>
158                    </sch:rule>
159                </sch:pattern>
160            </xs:appinfo>
161        </xs:annotation>
162        <xs:choice>
163            <xs:element name="pattern" type="xs:string" minOccurs="1" maxOccurs="1">
164                <xs:annotation>
165                    <xs:documentation>Specification of a regular expression the element should
166                        comply with.</xs:documentation>
167                </xs:annotation>
168            </xs:element>
169            <xs:element name="Vocabulary" type="Vocabulary_type" minOccurs="1" maxOccurs="1">
170                <xs:annotation>
171                    <xs:documentation>Specification of an open or closed vocabulary</xs:documentation>
172                </xs:annotation>
173            </xs:element>
174        </xs:choice>
175    </xs:complexType>
176
177    <xs:complexType name="Vocabulary_type">
178        <xs:sequence>
179            <xs:element name="enumeration" type="enumeration_type" minOccurs="0" maxOccurs="1">
180                <xs:annotation>
181                    <xs:documentation>A list of the allowed values of a controlled vocabulary.</xs:documentation>
182                </xs:annotation>
183            </xs:element>
184        </xs:sequence>
185        <xs:attribute name="URI" type="xs:anyURI" use="optional"/>
186        <!-- optionally selects a label -->
187        <xs:attribute name="ValueProperty" type="xs:string" use="optional"/>
188        <!-- optionally selects a language -->
189        <xs:attribute name="ValueLanguage" type="xs:language" use="optional"/>
190    </xs:complexType>
191
192    <xs:complexType name="AttributeList_type">
193        <xs:annotation>
194            <xs:appinfo>
195                <sch:pattern id="a_vs">
196                    <sch:title>Check Attribute ValueScheme</sch:title>
197                    <sch:rule context="Attribute">
198                        <sch:assert test="exists(@ValueScheme) or exists(ValueScheme)">An Attribute must have either a @ValueScheme or a ./ValueScheme!</sch:assert>
199                    </sch:rule>
200                </sch:pattern>
201            </xs:appinfo>
202        </xs:annotation>
203        <xs:sequence>
204            <xs:element name="Attribute" minOccurs="1" maxOccurs="unbounded">
205                <xs:annotation>
206                    <xs:appinfo>
207                        <sch:pattern id="a_res">
208                            <sch:title>Check reserved attribute names</sch:title>
209                            <sch:rule context="Attribute" role="warning">
210                                <sch:assert test="not(exists(parent::AttributeList/parent::Component) and @name=('ref','ComponentId'))">Attributes with name 'ref' or 'ComponentId' will not be available in a downgrade to CMDI 1.1!</sch:assert>
211                            </sch:rule>
212                        </sch:pattern>
213                        <sch:pattern id="a_sibs">
214                            <sch:title>Check attribute siblings</sch:title>
215                            <sch:rule context="Attribute">
216                                <sch:assert test="empty(preceding-sibling::Attribute[@name=current()/@name])">All attributes in an attribute list should have a different name. Found multiple attributes named '<sch:value-of select="Name"/>'!</sch:assert>
217                            </sch:rule>
218                        </sch:pattern>
219                        <sch:pattern id="a_nest">
220                            <sch:title>Check attribute nesting</sch:title>
221                            <sch:rule context="Attribute" role="warning">
222                                <sch:assert test="empty((ancestor::Component|ancestor::Element)[1][@name=current()/@ame])">An attribute has the same name ('<sch:value-of select="@name"/>') as its element or component! Please, consider to rename one of them.</sch:assert>
223                            </sch:rule>
224                        </sch:pattern>
225                    </xs:appinfo>
226                </xs:annotation>
227                <xs:complexType>
228                    <xs:sequence>
229                        <xs:element name="Documentation" type="Documentation_type" minOccurs="0" maxOccurs="unbounded"/>
230                        <xs:element name="ValueScheme" type="ValueScheme_type" minOccurs="0" maxOccurs="1">
231                            <xs:annotation>
232                                <xs:documentation>For the use of a regular expression or a
233                                    controlled vocabulary as the type of the
234                                    attribute.</xs:documentation>
235                            </xs:annotation>
236                        </xs:element>
237                        <xs:element name="AutoValue" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
238                    </xs:sequence>
239                    <xs:attributeGroup ref="attribute_attributes"/>
240                </xs:complexType>
241            </xs:element>
242        </xs:sequence>
243    </xs:complexType>
244
245    <xs:complexType name="Component_type">
246        <xs:group ref="group" minOccurs="0"/>
247        <xs:attributeGroup ref="component_attributes"/>
248    </xs:complexType>
249
250    <xs:attributeGroup name="attribute_attributes">
251        <xs:attribute name="name" type="xs:Name" use="required">
252            <xs:annotation>
253                <xs:documentation>The name of the attribute.</xs:documentation>
254            </xs:annotation>
255        </xs:attribute>
256        <xs:attribute name="ConceptLink" type="xs:anyURI" use="optional">
257            <xs:annotation>
258                <xs:documentation>A link to the ISOcat data category registry (or any other concept
259                    registry).</xs:documentation>
260            </xs:annotation>
261        </xs:attribute>
262        <xs:attribute name="ValueScheme" type="allowed_attributetypes_type" use="optional">
263            <xs:annotation>
264                <xs:documentation>For the use of simple XML types as the type of
265                    the attribute.</xs:documentation>
266            </xs:annotation>
267        </xs:attribute>
268        <xs:attribute name="Required" type="xs:boolean" use="optional">
269            <xs:annotation>
270                <xs:documentation>Is the attribute required or not?</xs:documentation>
271            </xs:annotation>
272        </xs:attribute>
273        <xs:anyAttribute namespace="http://www.clarin.eu/cmdi/cues/1" processContents="lax"/>
274    </xs:attributeGroup>
275
276    <xs:attributeGroup name="element_attributes">
277        <xs:attribute name="name" type="xs:Name" use="required">
278            <xs:annotation>
279                <xs:documentation>The name of the element.</xs:documentation>
280            </xs:annotation>
281        </xs:attribute>
282        <xs:attribute name="ConceptLink" type="xs:anyURI" use="optional">
283            <xs:annotation>
284                <xs:documentation>A link to the ISOcat data category registry (or any other concept
285                    registry).</xs:documentation>
286            </xs:annotation>
287        </xs:attribute>
288        <xs:attribute name="ValueScheme" type="allowed_attributetypes_type" use="optional">
289            <xs:annotation>
290                <xs:documentation>Used to specify that an element has a simple XML type (string,
291                    integer, etc)</xs:documentation>
292            </xs:annotation>
293        </xs:attribute>
294        <xs:attribute name="CardinalityMin" type="cardinality_type" use="optional" default="1">
295            <xs:annotation>
296                <xs:documentation>Minimal number of occurrences.</xs:documentation>
297            </xs:annotation>
298        </xs:attribute>
299        <xs:attribute name="CardinalityMax" type="cardinality_type" use="optional" default="1">
300            <xs:annotation>
301                <xs:documentation>Maximal number of occurrences.</xs:documentation>
302            </xs:annotation>
303        </xs:attribute>
304        <xs:attribute name="Multilingual" type="xs:boolean" use="optional">
305            <xs:annotation>
306                <xs:documentation>Indicates that this element can have values in multiple languages
307                    (and thus is repeatable). This will result in the possibility of using the
308                    xml:lang attribute in the metadata instances that are
309                created.</xs:documentation>
310            </xs:annotation>
311        </xs:attribute>
312        <xs:anyAttribute namespace="http://www.clarin.eu/cmdi/cues/1" processContents="lax"/>
313    </xs:attributeGroup>
314
315    <xs:attributeGroup name="component_attributes">
316        <xs:annotation>
317            <xs:appinfo>
318                <sch:pattern id="c_atts">
319                    <sch:title>Check component attributes</sch:title>
320                    <sch:rule context="Component">
321                        <sch:assert test="normalize-space(@name)!='' or normalize-space(@ComponentId)!=''">A Component should have a name or a ComponentId!</sch:assert>
322                    </sch:rule>
323                </sch:pattern>
324            </xs:appinfo>
325        </xs:annotation>
326        <xs:attribute name="name" type="xs:Name" use="optional"/>
327        <xs:attribute name="ComponentId" type="xs:anyURI" use="optional">
328            <xs:annotation>
329                <xs:documentation>Indicates that a component (using its unique ComponentId issued by
330                    the ComponentRegistry) should be included.</xs:documentation>
331            </xs:annotation>
332        </xs:attribute>
333        <xs:attribute name="ConceptLink" type="xs:anyURI" use="optional">
334            <xs:annotation>
335                <xs:documentation>A link to the ISOcat data category registry (or any other concept
336                    registry). Currently not used.</xs:documentation>
337            </xs:annotation>
338        </xs:attribute>
339        <xs:attribute name="CardinalityMin" type="cardinality_type" use="optional" default="1"/>
340        <xs:attribute name="CardinalityMax" type="cardinality_type" use="optional" default="1"/>
341        <xs:attribute ref="xml:base" use="optional"/>
342        <xs:anyAttribute namespace="http://www.clarin.eu/cmdi/cues/1" processContents="lax"/>
343    </xs:attributeGroup>
344
345
346    <xs:simpleType name="cardinality_type">
347        <xs:annotation>
348            <xs:documentation>cardinality for elements and components</xs:documentation>
349            <xs:appinfo>
350                <sch:pattern id="c_card">
351                    <sch:title>Check cardinalities</sch:title>
352                    <!--
353                        case minimum   maximum   check
354                        1    UNK       UNK       OK
355                        2    UNK       number    maximum ne 0
356                        3    UNK       unbounded OK
357                        4    number    UNK       minimum le 1
358                        5    number    number    minimum le maximum
359                        6    number    unbounded OK
360                        7    unbounded UNK       NOK
361                        8    unbounded number    NOK
362                        9    unbounded unbounded OK
363
364                        UNK can be either a missing attribute or an empty value, both can be detected with normalize-space(@...)=''
365
366                        default CardinalityMin is 1 (based on the XSD minOccurs default value)
367                        default CardinalityMax is 1 (based on the XSD maxOccurs default value)
368
369                        If a basic XSLT 2.0 engine, like Saxon HE, is used for Schematron validation we can't cast to xs:nonNegativeInteger.
370                        So we cast to xs:integer. The XSD validator should have already validated that the values are valid cardinality_types.
371                    -->
372                    <!-- skip case 1 -->
373                    <!-- case 2 -->
374                    <sch:rule context="*[(normalize-space(@CardinalityMin)='')][@CardinalityMax castable as xs:integer]">
375                        <sch:assert test="xs:integer(@CardinalityMax) ne 0">Maximum cardinality (0) cannot be lower than the default minimum cardinality (1)!</sch:assert>
376                    </sch:rule>
377                    <!-- skip case 3 -->
378                    <!-- case 4 -->
379                    <sch:rule context="*[@CardinalityMin castable as xs:integer][normalize-space(@CardinalityMax)='']">
380                        <sch:assert test="xs:integer(@CardinalityMin) le 1">Minimum cardinality (<sch:value-of select="@CardinalityMin"/>) should be lower or equal then the default maximum cardinality (1)!</sch:assert>
381                    </sch:rule>
382                    <!-- case 5 -->
383                    <sch:rule context="*[@CardinalityMin castable as xs:integer][@CardinalityMax castable as xs:integer]">
384                        <sch:assert test="xs:integer(@CardinalityMin) le xs:integer(@CardinalityMax)">Minimum cardinality (<sch:value-of select="@CardinalityMin"/>) should be lower or equal then the maximum cardinality (<sch:value-of select="@CardinalityMax"/>)!</sch:assert>
385                    </sch:rule>
386                    <!-- skip case 6 -->
387                    <!-- case 7, 8 and 9 -->
388                    <sch:rule context="*[@CardinalityMin='unbounded']">
389                        <!-- case 7 and 8 -->
390                        <sch:assert test="@CardinalityMax='unbounded'">Minimum cardinality (unbounded) can't be higher than the (default) maximum cardinality (<sch:value-of select="if (normalize-space(@CardinalityMax)='') then ('1') else (@CardinalityMax)"/>)!</sch:assert>
391                        <!-- skip case 9 -->
392                    </sch:rule>
393                </sch:pattern>
394            </xs:appinfo>
395        </xs:annotation>
396        <xs:union>
397            <xs:simpleType>
398                <xs:list itemType="xs:nonNegativeInteger"/>
399            </xs:simpleType>
400            <xs:simpleType>
401                <xs:restriction base="xs:string">
402                    <xs:enumeration value="unbounded"/>
403                </xs:restriction>
404            </xs:simpleType>
405        </xs:union>
406    </xs:simpleType>
407
408    <xs:simpleType name="allowed_attributetypes_type">
409        <xs:annotation>
410            <xs:documentation>Subset of XSD types that are allowed as CMD type</xs:documentation>
411        </xs:annotation>
412
413        <xs:restriction base="xs:token">
414            <xs:enumeration value="boolean"/>
415            <xs:enumeration value="decimal"/>
416            <xs:enumeration value="float"/>
417            <xs:enumeration value="int"/>
418            <xs:enumeration value="string"/>
419            <xs:enumeration value="anyURI"/>
420            <xs:enumeration value="date"/>
421            <xs:enumeration value="gDay"/>
422            <xs:enumeration value="gMonth"/>
423            <xs:enumeration value="gYear"/>
424            <xs:enumeration value="time"/>
425            <xs:enumeration value="dateTime"/>
426        </xs:restriction>
427    </xs:simpleType>
428
429    <xs:complexType name="enumeration_type">
430        <xs:annotation>
431            <xs:documentation>controlled vocabularies</xs:documentation>
432        </xs:annotation>
433        <xs:sequence>
434            <xs:element name="appinfo" type="xs:string" minOccurs="0" maxOccurs="1">
435                <xs:annotation>
436                    <xs:documentation>End-user guidance about the value of the controlled vocabulary
437                        as a whole. Currently not used.</xs:documentation>
438                </xs:annotation>
439            </xs:element>
440            <xs:element name="item" type="item_type" minOccurs="0" maxOccurs="unbounded">
441                <xs:annotation>
442                    <xs:documentation>An item from a controlled vocabulary.</xs:documentation>
443                </xs:annotation>
444            </xs:element>
445        </xs:sequence>
446    </xs:complexType>
447
448    <xs:complexType name="item_type">
449        <xs:annotation>
450            <xs:appinfo>
451                <sch:pattern id="item">
452                    <sch:title>CMD enumeration item</sch:title>
453                    <sch:rule context="item">
454                        <sch:assert test="empty(preceding-sibling::item[.=current()])">All items in an enumeration should be different. Found multiple items with value '<sch:value-of select="."/>'!</sch:assert>
455                    </sch:rule>
456                </sch:pattern>
457            </xs:appinfo>
458        </xs:annotation>
459        <xs:simpleContent>
460            <xs:extension base="xs:string">
461                <xs:attribute type="xs:anyURI" name="ConceptLink" use="optional">
462                    <xs:annotation>
463                        <xs:documentation>A link to the ISOcat data category registry (or any other
464                            concept registry) related to this controllec vocabulary
465                        item.</xs:documentation>
466                    </xs:annotation>
467                </xs:attribute>
468                <xs:attribute type="xs:string" name="AppInfo" use="optional">
469                    <xs:annotation>
470                        <xs:documentation>End-user guidance about the value of this controlled
471                            vocabulary item.</xs:documentation>
472                    </xs:annotation>
473                </xs:attribute>
474                <xs:anyAttribute namespace="http://www.clarin.eu/cmdi/cues/1" processContents="lax"/>
475            </xs:extension>
476        </xs:simpleContent>
477    </xs:complexType>
478
479</xs:schema>
Note: See TracBrowser for help on using the repository browser.