Project

General

Profile

Revision 979d74e5

ID979d74e5929e15529d71931347b52ed89c4b2133
Parent 82e317b8
Child 833731f1

Added by Patrick Plitzner over 1 year ago

ref #8248, #6774 Add character to export

  • adapt test

View differences:

cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/descriptive/owl/OwlUtil.java
32 32
    public static final String RESOURCE_FEATURE_TREE = RESOURCE_URI+"term_tree/";
33 33
    public static final String RESOURCE_TERM_VOCABULARY = RESOURCE_URI+"term_vocabulary/";
34 34
    public static final String RESOURCE_TERM = RESOURCE_URI+"term/";
35
    public static final String RESOURCE_CHARACTER = RESOURCE_URI+"character/";
35 36
    public static final String RESOURCE_MEDIA = RESOURCE_URI+"media/";
36 37

  
37 38
    /**
......
71 72
    public static final String PROPERTY_TERM_ID_IN_VOCABULARY = PROPERTY_BASE_URI+"term_id_in_vocabulary";
72 73

  
73 74
    /**
75
     * feature properties
76
     */
77
    public static final String PROPERTY_FEATURE_IS_QUANTITATIVE = PROPERTY_BASE_URI+"feature_is_quantitative";
78
    public static final String PROPERTY_FEATURE_IS_CATEGORICAL = PROPERTY_BASE_URI+"feature_is_categorical";
79
    public static final String PROPERTY_FEATURE_HAS_RECOMMENDED_MEASUREMENT_UNIT = PROPERTY_BASE_URI+"feature_has_recommended_measurement_unit";
80
    public static final String PROPERTY_FEATURE_HAS_RECOMMENDED_MODIFIER = PROPERTY_BASE_URI+"feature_has_recommended_modifier";
81
    public static final String PROPERTY_FEATURE_HAS_RECOMMENDED_STATISTICAL_MEASURE = PROPERTY_BASE_URI+"feature_has_recommended_statistical_measure";
82
    public static final String PROPERTY_FEATURE_HAS_SUPPORTED_CATEGORICAL_ENUMERATION = PROPERTY_BASE_URI+"feature_has_supported_categorical_enumeration";
83

  
84
    /**
85
     * character properties
86
     */
87
    public static final String PROPERTY_CHARACTER_HAS_STRUCTURE = PROPERTY_BASE_URI+"character_has_structure";
88
    public static final String PROPERTY_CHARACTER_HAS_PROPERTY = PROPERTY_BASE_URI+"character_has_property";
89
    public static final String PROPERTY_CHARACTER_HAS_STRUCTURE_MODIFIER = PROPERTY_BASE_URI+"character_has_structure_modifier";
90

  
91
    /**
74 92
     * media properties
75 93
     */
76 94
    public static final String PROPERTY_MEDIA_URI = PROPERTY_BASE_URI+"media_uri";
......
95 113
    public final static String TREE = "tree";
96 114
    public final static String VOCABULARY = "vocabulary";
97 115
    public final static String TERM = "term";
116
    public final static String CHARACTER = "character";
117
    public final static String FEATURE = "feature";
98 118
    public final static String MEDIA = "media";
99 119

  
100 120
    public static Property propHasSubStructure;
......
122 142
    public static Property propTermSymbol2;
123 143
    public static Property propTermIdInVocabulary;
124 144

  
145
    public static Property propFeatureIsQuantitative;
146
    public static Property propFeatureIsCategorical;
147
    public static Property propFeatureHasRecommendedMeasurementUnit;
148
    public static Property propFeatureHasRecommendedModifierEnumeration;
149
    public static Property propFeatureHasRecommendedStatisticalMeasure;
150
    public static Property propFeatureHasSupportedCategoricalEnumeration;
151

  
152
    public static Property propCharacterHasStructure;
153
    public static Property propCharacterHasProperty;
154
    public static Property propCharacterHasStructureModfier;
155

  
125 156
    public static Property propMediaUri;
126 157
    public static Property propMediaTitle;
127 158

  
......
133 164

  
134 165
    public static Model createModel(){
135 166
        Model model = ModelFactory.createDefaultModel();
167

  
136 168
        propHasSubStructure = model.createProperty(OwlUtil.PROPERTY_HAS_SUBSTRUCTURE);
137 169
        propHasRepresentation = model.createProperty(OwlUtil.PROPERTY_HAS_REPRESENTATION);
138 170
        propHasRootNode = model.createProperty(OwlUtil.PROPERTY_HAS_ROOT_NODE);
......
150 182
        propHasVocabulary = model.createProperty(OwlUtil.PROPERTY_HAS_VOCABULARY);
151 183
        propHasTerm = model.createProperty(OwlUtil.PROPERTY_HAS_TERM);
152 184

  
185
        // term
153 186
        propTermIsGeneralizationOf = model.createProperty(OwlUtil.PROPERTY_TERM_IS_GENERALIZATION_OF);
154 187
        propTermIncludes = model.createProperty(OwlUtil.PROPERTY_TERM_INCLUDES);
155 188
        propTermHasMedia = model.createProperty(OwlUtil.PROPERTY_TERM_HAS_MEDIA);
......
158 191
        propTermSymbol2 = model.createProperty(OwlUtil.PROPERTY_TERM_SYMBOL2);
159 192
        propTermIdInVocabulary = model.createProperty(OwlUtil.PROPERTY_TERM_ID_IN_VOCABULARY);
160 193

  
194
        // feature
195
        propFeatureIsQuantitative = model.createProperty(OwlUtil.PROPERTY_FEATURE_IS_QUANTITATIVE);
196
        propFeatureIsCategorical = model.createProperty(OwlUtil.PROPERTY_FEATURE_IS_CATEGORICAL);
197
        propFeatureHasRecommendedMeasurementUnit = model.createProperty(OwlUtil.PROPERTY_FEATURE_HAS_RECOMMENDED_MEASUREMENT_UNIT);
198
        propFeatureHasRecommendedModifierEnumeration = model.createProperty(OwlUtil.PROPERTY_FEATURE_HAS_RECOMMENDED_MODIFIER);
199
        propFeatureHasRecommendedStatisticalMeasure = model.createProperty(OwlUtil.PROPERTY_FEATURE_HAS_RECOMMENDED_STATISTICAL_MEASURE);
200
        propFeatureHasSupportedCategoricalEnumeration = model.createProperty(OwlUtil.PROPERTY_FEATURE_HAS_SUPPORTED_CATEGORICAL_ENUMERATION);
201

  
202
        // character
203
        propCharacterHasStructure = model.createProperty(OwlUtil.PROPERTY_CHARACTER_HAS_STRUCTURE);
204
        propCharacterHasProperty = model.createProperty(OwlUtil.PROPERTY_CHARACTER_HAS_PROPERTY);
205
        propCharacterHasStructureModfier = model.createProperty(OwlUtil.PROPERTY_CHARACTER_HAS_STRUCTURE_MODIFIER);
206

  
207
        // media
161 208
        propMediaUri = model.createProperty(OwlUtil.PROPERTY_MEDIA_URI);
162 209
        propMediaTitle = model.createProperty(OwlUtil.PROPERTY_MEDIA_TITLE);
163 210

  
211
        // source
164 212
        propSourceType = model.createProperty(OwlUtil.PROPERTY_SOURCE_TYPE);
165 213
        propSourceIdInSource = model.createProperty(OwlUtil.PROPERTY_SOURCE_ID_IN_SOURCE);
166 214
        propSourceHasCitation = model.createProperty(OwlUtil.PROPERTY_SOURCE_HAS_CITATION);
167 215

  
216
        // reference
168 217
        propReferenceTitle = model.createProperty(OwlUtil.PROPERTY_REFERENCE_TITLE);
169 218

  
170 219
        return model;
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/descriptive/owl/out/OwlExportUtil.java
10 10

  
11 11
import java.util.ArrayList;
12 12
import java.util.List;
13
import java.util.Set;
13 14

  
14 15
import com.hp.hpl.jena.rdf.model.Resource;
15 16

  
16 17
import eu.etaxonomy.cdm.common.CdmUtils;
18
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
17 19
import eu.etaxonomy.cdm.io.descriptive.owl.OwlUtil;
18 20
import eu.etaxonomy.cdm.model.common.IdentifiableSource;
19 21
import eu.etaxonomy.cdm.model.common.Language;
22
import eu.etaxonomy.cdm.model.description.Character;
23
import eu.etaxonomy.cdm.model.description.Feature;
24
import eu.etaxonomy.cdm.model.description.MeasurementUnit;
25
import eu.etaxonomy.cdm.model.description.State;
26
import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
20 27
import eu.etaxonomy.cdm.model.media.Media;
21 28
import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;
22 29
import eu.etaxonomy.cdm.model.media.MediaUtils;
23 30
import eu.etaxonomy.cdm.model.reference.Reference;
31
import eu.etaxonomy.cdm.model.term.DefinedTerm;
24 32
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
25 33
import eu.etaxonomy.cdm.model.term.FeatureNode;
26 34
import eu.etaxonomy.cdm.model.term.FeatureTree;
......
98 106
        return representations;
99 107
    }
100 108

  
109
    private static Resource addCharacterResource(Character character, Resource termResource, StructureTreeOwlExportState state) {
110
        addFeatureResource(character, termResource, state);
111

  
112
        Resource structureNodeResource = createNodeResource(state, character.getStructure());
113
        termResource.addProperty(OwlUtil.propCharacterHasStructure, structureNodeResource);
114
        Resource propertyNodeResource = createNodeResource(state, character.getProperty());
115
        termResource.addProperty(OwlUtil.propCharacterHasProperty, propertyNodeResource);
116
        if(character.getStructureModifier()!=null){
117
            Resource structureModifierResource = createTermResource(character.getStructureModifier(), state);
118
            termResource.addProperty(OwlUtil.propCharacterHasStructureModfier, structureModifierResource);
119
        }
120
        return termResource;
121
    }
122

  
123
    private static Resource addFeatureResource(Feature feature, Resource termResource, StructureTreeOwlExportState state) {
124
        if(feature.isSupportsCategoricalData()){
125
            termResource.addLiteral(OwlUtil.propFeatureIsCategorical, true);
126
        }
127
        if(feature.isSupportsQuantitativeData()){
128
            termResource.addLiteral(OwlUtil.propFeatureIsQuantitative, true);
129
        }
130
        Set<MeasurementUnit> recommendedMeasurementUnits = feature.getRecommendedMeasurementUnits();
131
        for (MeasurementUnit measurementUnit : recommendedMeasurementUnits) {
132
            Resource measurementUnitResource = createTermResource(measurementUnit, state);
133
            termResource.addProperty(OwlUtil.propFeatureHasRecommendedMeasurementUnit, measurementUnitResource);
134
        }
135
        Set<TermVocabulary<DefinedTerm>> recommendedModifierEnumerations = feature.getRecommendedModifierEnumeration();
136
        for (TermVocabulary<DefinedTerm> modifierVocabulary : recommendedModifierEnumerations) {
137
            Resource modifierEnumerationResource = createVocabularyResource(modifierVocabulary, state);
138
            termResource.addProperty(OwlUtil.propFeatureHasRecommendedModifierEnumeration, modifierEnumerationResource);
139
        }
140
        Set<StatisticalMeasure> recommendedStatisticalMeasures = feature.getRecommendedStatisticalMeasures();
141
        for (StatisticalMeasure statisticalMeasure : recommendedStatisticalMeasures) {
142
            Resource statisticalMeasureResource = createTermResource(statisticalMeasure, state);
143
            termResource.addProperty(OwlUtil.propFeatureHasRecommendedStatisticalMeasure, statisticalMeasureResource);
144
        }
145
        Set<TermVocabulary<State>> supportedCategoricalEnumerations = feature.getSupportedCategoricalEnumerations();
146
        for (TermVocabulary<State> stateVocabulary : supportedCategoricalEnumerations) {
147
            Resource supportedCategoricalEnumerationResource = createVocabularyResource(stateVocabulary, state);
148
            termResource.addProperty(OwlUtil.propFeatureHasSupportedCategoricalEnumeration, supportedCategoricalEnumerationResource);
149
        }
150
        return termResource;
151
    }
152

  
101 153
    static Resource createTermResource(DefinedTermBase term, StructureTreeOwlExportState state) {
102 154
        Resource termResource = state.getModel().createResource(OwlUtil.RESOURCE_TERM+term.getUuid().toString())
103 155
                .addProperty(OwlUtil.propUuid, term.getUuid().toString())
104
                .addProperty(OwlUtil.propIsA, OwlUtil.TERM)
105 156
                .addProperty(OwlUtil.propType, term.getTermType().getKey())
106 157
                ;
107 158
        if(term.getUri()!=null){
......
120 171
        List<Resource> termRepresentationResources = createRepresentationResources(term, state);
121 172
        termRepresentationResources.forEach(rep->termResource.addProperty(OwlUtil.propHasRepresentation, rep));
122 173

  
174
        // create vocabulary resource
175
        Resource vocabularyResource = OwlExportUtil.createVocabularyResource(term.getVocabulary(), state);
176
        // add vocabulary to term
177
        termResource.addProperty(OwlUtil.propHasVocabulary, vocabularyResource);
178
        // add term to vocabulary
179
        vocabularyResource.addProperty(OwlUtil.propHasTerm, termResource);
180

  
181
        // add media
182
        Set<Media> media = term.getMedia();
183
        for (Media medium : media) {
184
            Resource mediaResource = OwlExportUtil.createMediaResource(medium, state);
185
            termResource.addProperty(OwlUtil.propTermHasMedia, mediaResource);
186
        }
187

  
123 188
        // add term sources
124 189
        List<Resource> termSourceResources = createSourceResources(term, state);
125 190
        termSourceResources.forEach(source->termResource.addProperty(OwlUtil.propTermHasSource, source));
126 191

  
192
        // add term sub class properties
193
        if(term.isInstanceOf(eu.etaxonomy.cdm.model.description.Character.class)){
194
            termResource.addProperty(OwlUtil.propIsA, OwlUtil.CHARACTER);
195
            addCharacterResource(HibernateProxyHelper.deproxy(term, Character.class), termResource, state);
196
        }
197
        else if(term.isInstanceOf(Feature.class)){
198
            termResource.addProperty(OwlUtil.propIsA, OwlUtil.FEATURE);
199
            addFeatureResource(HibernateProxyHelper.deproxy(term, Feature.class), termResource, state);
200
        }
201
        else {
202
            termResource.addProperty(OwlUtil.propIsA, OwlUtil.TERM);
203
        }
204

  
127 205
        return termResource;
128 206
    }
129 207

  
......
156 234
    }
157 235

  
158 236
    static Resource createNodeResource(StructureTreeOwlExportState state, FeatureNode node) {
159
        Resource resourceRootNode = state.getModel().createResource(OwlUtil.RESOURCE_NODE + node.getUuid().toString())
237
        Resource nodeResource = state.getModel().createResource(OwlUtil.RESOURCE_NODE + node.getUuid().toString())
160 238
                .addProperty(OwlUtil.propIsA, OwlUtil.NODE)
161 239
                .addProperty(OwlUtil.propUuid, node.getUuid().toString())
162 240
                ;
163
        return resourceRootNode;
241
        if(node.getTerm()!=null){
242
            // add term to node
243
            Resource termResource = OwlExportUtil.createTermResource(node.getTerm(), state);
244
            nodeResource.addProperty(OwlUtil.propHasTerm, termResource);
245
        }
246
        return nodeResource;
164 247
    }
165 248

  
166 249
}
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/descriptive/owl/out/StructureTreeOwlExport.java
11 11
import java.io.ByteArrayOutputStream;
12 12
import java.io.File;
13 13
import java.util.List;
14
import java.util.Set;
15 14
import java.util.UUID;
16 15

  
17 16
import org.springframework.stereotype.Component;
......
22 21
import eu.etaxonomy.cdm.io.common.CdmExportBase;
23 22
import eu.etaxonomy.cdm.io.common.mapping.out.IExportTransformer;
24 23
import eu.etaxonomy.cdm.io.descriptive.owl.OwlUtil;
25
import eu.etaxonomy.cdm.model.media.Media;
26 24
import eu.etaxonomy.cdm.model.term.FeatureNode;
27 25
import eu.etaxonomy.cdm.model.term.FeatureTree;
28 26

  
......
81 79
        for (FeatureNode child : childNodes) {
82 80
            // create node resource with term
83 81
            Resource nodeResource = OwlExportUtil.createNodeResource(state, child);
84
            // add term to node
85
            Resource termResource = OwlExportUtil.createTermResource(child.getTerm(), state);
86
            nodeResource.addProperty(OwlUtil.propHasTerm, termResource);
87

  
88
            // export media
89
            Set<Media> media = child.getTerm().getMedia();
90
            for (Media medium : media) {
91
                Resource mediaResource = OwlExportUtil.createMediaResource(medium, state);
92
                termResource.addProperty(OwlUtil.propTermHasMedia, mediaResource);
93
            }
94 82

  
95 83
            // add node to parent node
96 84
            parentResourceNode.addProperty(OwlUtil.propHasSubStructure, nodeResource);
97 85

  
98
            // create vocabulary resource
99
            Resource vocabularyResource = OwlExportUtil.createVocabularyResource(child.getTerm().getVocabulary(), state);
100
            // add vocabulary to term
101
            termResource.addProperty(OwlUtil.propHasVocabulary, vocabularyResource);
102
            // add term to vocabulary
103
            vocabularyResource.addProperty(OwlUtil.propHasTerm, termResource);
104

  
105 86
            addChildNode(child, nodeResource, state);
106 87
        }
107 88
    }
cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/owl/in/StructureTreeOwlImportTest.java
204 204
            definedTermBase = termService.load(definedTermBase.getUuid(), termProperties);
205 205
            Set<IdentifiableSource> sources = definedTermBase.getSources();
206 206
            assertTrue("Import source is missing for term: "+definedTermBase, !sources.isEmpty());
207
            IdentifiableSource source = sources.iterator().next();
208
            assertEquals("wrong source type", OriginalSourceType.Import.getKey(), source.getType());
207
            assertTrue("import source type not found", sources.stream().anyMatch(source->OriginalSourceType.Import.getKey().equals(source.getType().getKey())));
209 208
        }
210 209

  
211 210
    }
cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/owl/in/test_structures.owl
1 1
<rdf:RDF
2 2
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3 3
    xmlns:j.0="http://cybertaxonomy.eu/property/" > 
4
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/node/ea699e79-1239-4432-9ce3-3e5a23ff180c">
5
    <j.0:has_sub_structure rdf:resource="http://cybertaxonomy.eu/resource/node/b474e0d3-2ad0-4066-9d3f-c02464e5849e"/>
6
    <j.0:has_term rdf:resource="http://cybertaxonomy.eu/resource/term/4ca7907c-46a7-4721-bab0-6733a73ef544"/>
7
    <j.0:uuid>ea699e79-1239-4432-9ce3-3e5a23ff180c</j.0:uuid>
8
    <j.0:is_a>node</j.0:is_a>
9
  </rdf:Description>
10 4
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/term/74ef4971-55b4-4bee-a453-f00f1a158f9c">
5
    <j.0:is_a>term</j.0:is_a>
11 6
    <j.0:has_vocabulary rdf:resource="http://cybertaxonomy.eu/resource/term_vocabulary/01b4d3ab-afbe-44f8-8e1c-30a9b7950f62"/>
12 7
    <j.0:has_representation rdf:resource="http://cybertaxonomy.eu/resource/representation/0a18e1bf-2e6f-425c-be3f-d357cc50cb11"/>
13 8
    <j.0:type>STRU</j.0:type>
14
    <j.0:is_a>term</j.0:is_a>
15 9
    <j.0:uuid>74ef4971-55b4-4bee-a453-f00f1a158f9c</j.0:uuid>
16 10
  </rdf:Description>
17 11
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/term_vocabulary/01b4d3ab-afbe-44f8-8e1c-30a9b7950f62">
......
30 24
    <j.0:type>STRU</j.0:type>
31 25
    <j.0:uuid>cb2e5f49-1cc8-4a6e-a476-db9a22de305d</j.0:uuid>
32 26
  </rdf:Description>
27
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/node/4da61a9a-0557-4e45-b5cc-7b4a7ecb8ba4">
28
    <j.0:has_sub_structure rdf:resource="http://cybertaxonomy.eu/resource/node/aae99c0b-5e62-49f7-94ff-d161fea8a08f"/>
29
    <j.0:has_term rdf:resource="http://cybertaxonomy.eu/resource/term/4ca7907c-46a7-4721-bab0-6733a73ef544"/>
30
    <j.0:uuid>4da61a9a-0557-4e45-b5cc-7b4a7ecb8ba4</j.0:uuid>
31
    <j.0:is_a>node</j.0:is_a>
32
  </rdf:Description>
33 33
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/representation/5ddaffb7-921f-4f68-a3b7-9987c3ec7b2e">
34 34
    <j.0:language_uuid>e9f8cdb7-6819-44e8-95d3-e2d0690c3523</j.0:language_uuid>
35 35
    <j.0:language>English</j.0:language>
36 36
    <j.0:label>01 Entire Plant</j.0:label>
37 37
  </rdf:Description>
38
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/node/b474e0d3-2ad0-4066-9d3f-c02464e5849e">
39
    <j.0:has_term rdf:resource="http://cybertaxonomy.eu/resource/term/a8063aed-83d5-422d-b5b2-2777369c45fd"/>
40
    <j.0:uuid>b474e0d3-2ad0-4066-9d3f-c02464e5849e</j.0:uuid>
41
    <j.0:is_a>node</j.0:is_a>
42
  </rdf:Description>
43 38
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/representation/e45136c1-9c22-46bf-a8d6-b31d9d21766b">
44 39
    <j.0:description> in grasses; the part of the spikelet carrying one flower; its lodicules and glumes; and sometimes the segment of the spikelet rachis adjoining them</j.0:description>
45 40
    <j.0:language_uuid>e9f8cdb7-6819-44e8-95d3-e2d0690c3523</j.0:language_uuid>
......
51 46
    <j.0:language>English</j.0:language>
52 47
    <j.0:label>Flower</j.0:label>
53 48
  </rdf:Description>
54
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/node/d842e1db-407e-4902-af25-dea64410cd34">
55
    <j.0:has_sub_structure rdf:resource="http://cybertaxonomy.eu/resource/node/77284bc2-ab3c-4839-a903-4a4f2eb7bdd1"/>
56
    <j.0:uuid>d842e1db-407e-4902-af25-dea64410cd34</j.0:uuid>
49
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/node/aae99c0b-5e62-49f7-94ff-d161fea8a08f">
50
    <j.0:has_term rdf:resource="http://cybertaxonomy.eu/resource/term/a8063aed-83d5-422d-b5b2-2777369c45fd"/>
51
    <j.0:uuid>aae99c0b-5e62-49f7-94ff-d161fea8a08f</j.0:uuid>
57 52
    <j.0:is_a>node</j.0:is_a>
58 53
  </rdf:Description>
59
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/node/9b921fe2-0276-44b1-b7d6-98639f958fe4">
60
    <j.0:has_term rdf:resource="http://cybertaxonomy.eu/resource/term/74ef4971-55b4-4bee-a453-f00f1a158f9c"/>
61
    <j.0:uuid>9b921fe2-0276-44b1-b7d6-98639f958fe4</j.0:uuid>
62
    <j.0:is_a>node</j.0:is_a>
54
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/source/1b4608ad-d6d9-439e-8ac6-9703d6c18932">
55
    <j.0:source_has_citation rdf:resource="http://cybertaxonomy.eu/resource/reference/be70c558-95d7-4f26-a64e-90e11bd9ba06"/>
56
    <j.0:source_id_in_source>inflorescence</j.0:source_id_in_source>
57
    <j.0:source_type>DIM</j.0:source_type>
63 58
  </rdf:Description>
64 59
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/term/4ca7907c-46a7-4721-bab0-6733a73ef544">
60
    <j.0:is_a>term</j.0:is_a>
61
    <j.0:term_has_source rdf:resource="http://cybertaxonomy.eu/resource/source/1b4608ad-d6d9-439e-8ac6-9703d6c18932"/>
65 62
    <j.0:has_vocabulary rdf:resource="http://cybertaxonomy.eu/resource/term_vocabulary/01b4d3ab-afbe-44f8-8e1c-30a9b7950f62"/>
66 63
    <j.0:has_representation rdf:resource="http://cybertaxonomy.eu/resource/representation/bf3ac87b-39e8-4360-8fe1-3dd0aeafb600"/>
67 64
    <j.0:has_representation rdf:resource="http://cybertaxonomy.eu/resource/representation/25d6e3de-9b31-469b-a3a4-4a971a023379"/>
......
70 67
    <j.0:term_symbol2>infloSymbol2</j.0:term_symbol2>
71 68
    <j.0:term_symbol>infloSymbol</j.0:term_symbol>
72 69
    <j.0:type>STRU</j.0:type>
73
    <j.0:is_a>term</j.0:is_a>
74 70
    <j.0:uuid>4ca7907c-46a7-4721-bab0-6733a73ef544</j.0:uuid>
75 71
  </rdf:Description>
72
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/source/444407e7-60dc-4c07-af96-5700dfab2754">
73
    <j.0:source_has_citation rdf:resource="http://cybertaxonomy.eu/resource/reference/be70c558-95d7-4f26-a64e-90e11bd9ba06"/>
74
    <j.0:source_id_in_source>anthecium</j.0:source_id_in_source>
75
    <j.0:source_type>DIM</j.0:source_type>
76
  </rdf:Description>
77
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/node/dc8d07e9-5e5b-44ac-adf7-b35c48c0f7f5">
78
    <j.0:has_term rdf:resource="http://cybertaxonomy.eu/resource/term/74ef4971-55b4-4bee-a453-f00f1a158f9c"/>
79
    <j.0:uuid>dc8d07e9-5e5b-44ac-adf7-b35c48c0f7f5</j.0:uuid>
80
    <j.0:is_a>node</j.0:is_a>
81
  </rdf:Description>
76 82
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/representation/82406634-44b7-4187-93a9-815f5621098c">
77 83
    <j.0:language_uuid>e9f8cdb7-6819-44e8-95d3-e2d0690c3523</j.0:language_uuid>
78 84
    <j.0:language>English</j.0:language>
......
85 91
    <j.0:language>German</j.0:language>
86 92
    <j.0:label>Infloreszenz</j.0:label>
87 93
  </rdf:Description>
88
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/term_tree/f28536f7-38b4-4dda-addd-c6b0b5a398ec">
89
    <j.0:has_root_node rdf:resource="http://cybertaxonomy.eu/resource/node/d842e1db-407e-4902-af25-dea64410cd34"/>
90
    <j.0:type>STRU</j.0:type>
91
    <j.0:is_a>tree</j.0:is_a>
92
    <j.0:label>test_structures</j.0:label>
93
    <j.0:uuid>f28536f7-38b4-4dda-addd-c6b0b5a398ec</j.0:uuid>
94
  </rdf:Description>
95 94
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/term/c957a28f-4377-4fb4-a287-0655ec91b621">
95
    <j.0:is_a>term</j.0:is_a>
96 96
    <j.0:has_vocabulary rdf:resource="http://cybertaxonomy.eu/resource/term_vocabulary/cb2e5f49-1cc8-4a6e-a476-db9a22de305d"/>
97 97
    <j.0:has_representation rdf:resource="http://cybertaxonomy.eu/resource/representation/63dcf1d5-02e2-43a3-8e3a-2cd8f52fe08b"/>
98 98
    <j.0:type>STRU</j.0:type>
99
    <j.0:is_a>term</j.0:is_a>
100 99
    <j.0:uuid>c957a28f-4377-4fb4-a287-0655ec91b621</j.0:uuid>
101 100
  </rdf:Description>
101
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/reference/be70c558-95d7-4f26-a64e-90e11bd9ba06">
102
    <j.0:reference_title>The Kew Plant Glossary, an illustrated dictionary of plant terms</j.0:reference_title>
103
  </rdf:Description>
104
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/term_tree/00769387-b8df-47e2-bdea-b8e47c5a1240">
105
    <j.0:has_root_node rdf:resource="http://cybertaxonomy.eu/resource/node/61a19aff-04fd-42b2-b7f0-a7c6a4091824"/>
106
    <j.0:type>STRU</j.0:type>
107
    <j.0:is_a>tree</j.0:is_a>
108
    <j.0:label>test_structures</j.0:label>
109
    <j.0:uuid>00769387-b8df-47e2-bdea-b8e47c5a1240</j.0:uuid>
110
  </rdf:Description>
111
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/node/bd6b6b47-27b8-4bf1-8e22-fc23c5f7036b">
112
    <j.0:has_sub_structure rdf:resource="http://cybertaxonomy.eu/resource/node/dc8d07e9-5e5b-44ac-adf7-b35c48c0f7f5"/>
113
    <j.0:has_sub_structure rdf:resource="http://cybertaxonomy.eu/resource/node/4da61a9a-0557-4e45-b5cc-7b4a7ecb8ba4"/>
114
    <j.0:has_term rdf:resource="http://cybertaxonomy.eu/resource/term/c957a28f-4377-4fb4-a287-0655ec91b621"/>
115
    <j.0:uuid>bd6b6b47-27b8-4bf1-8e22-fc23c5f7036b</j.0:uuid>
116
    <j.0:is_a>node</j.0:is_a>
117
  </rdf:Description>
102 118
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/representation/63dcf1d5-02e2-43a3-8e3a-2cd8f52fe08b">
103 119
    <j.0:language_uuid>e9f8cdb7-6819-44e8-95d3-e2d0690c3523</j.0:language_uuid>
104 120
    <j.0:language>English</j.0:language>
105 121
    <j.0:label>entire plant*</j.0:label>
106 122
  </rdf:Description>
107
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/node/77284bc2-ab3c-4839-a903-4a4f2eb7bdd1">
108
    <j.0:has_sub_structure rdf:resource="http://cybertaxonomy.eu/resource/node/9b921fe2-0276-44b1-b7d6-98639f958fe4"/>
109
    <j.0:has_sub_structure rdf:resource="http://cybertaxonomy.eu/resource/node/ea699e79-1239-4432-9ce3-3e5a23ff180c"/>
110
    <j.0:has_term rdf:resource="http://cybertaxonomy.eu/resource/term/c957a28f-4377-4fb4-a287-0655ec91b621"/>
111
    <j.0:uuid>77284bc2-ab3c-4839-a903-4a4f2eb7bdd1</j.0:uuid>
112
    <j.0:is_a>node</j.0:is_a>
113
  </rdf:Description>
114 123
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/representation/25d6e3de-9b31-469b-a3a4-4a971a023379">
115 124
    <j.0:description> the part of the plant that bears the flowers, including all its bracts  branches and flowers  but excluding unmodified leaves               </j.0:description>
116 125
    <j.0:language_uuid>e9f8cdb7-6819-44e8-95d3-e2d0690c3523</j.0:language_uuid>
......
120 129
    <j.0:label_plural>inflorescences</j.0:label_plural>
121 130
  </rdf:Description>
122 131
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/term/a8063aed-83d5-422d-b5b2-2777369c45fd">
132
    <j.0:is_a>term</j.0:is_a>
133
    <j.0:term_has_source rdf:resource="http://cybertaxonomy.eu/resource/source/444407e7-60dc-4c07-af96-5700dfab2754"/>
123 134
    <j.0:has_vocabulary rdf:resource="http://cybertaxonomy.eu/resource/term_vocabulary/01b4d3ab-afbe-44f8-8e1c-30a9b7950f62"/>
124 135
    <j.0:has_representation rdf:resource="http://cybertaxonomy.eu/resource/representation/e45136c1-9c22-46bf-a8d6-b31d9d21766b"/>
125 136
    <j.0:term_id_in_vocabulary>anthecium</j.0:term_id_in_vocabulary>
126 137
    <j.0:type>STRU</j.0:type>
127
    <j.0:is_a>term</j.0:is_a>
128 138
    <j.0:uuid>a8063aed-83d5-422d-b5b2-2777369c45fd</j.0:uuid>
129 139
  </rdf:Description>
140
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/node/61a19aff-04fd-42b2-b7f0-a7c6a4091824">
141
    <j.0:has_sub_structure rdf:resource="http://cybertaxonomy.eu/resource/node/bd6b6b47-27b8-4bf1-8e22-fc23c5f7036b"/>
142
    <j.0:uuid>61a19aff-04fd-42b2-b7f0-a7c6a4091824</j.0:uuid>
143
    <j.0:is_a>node</j.0:is_a>
144
  </rdf:Description>
130 145
  <rdf:Description rdf:about="http://cybertaxonomy.eu/resource/media/f002a25c-d75c-4b58-8f1c-1188d9b11ad0">
131 146
    <j.0:media_uri>https://upload.wikimedia.org/wikipedia/commons/8/82/Aloe_hereroensis_Auob_C15.JPG</j.0:media_uri>
132 147
    <j.0:media_title>Aloe hereroensis</j.0:media_title>

Also available in: Unified diff

Add picture from clipboard (Maximum size: 40 MB)