diff --git a/fim-adapter/pom.xml b/fim-adapter/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..e3acc94b6541b7e0114f613c3c0d69ab85c77a72 --- /dev/null +++ b/fim-adapter/pom.xml @@ -0,0 +1,65 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>de.ozgcloud.eingang</groupId> + <artifactId>eingang-manager</artifactId> + <version>2.10.0-SNAPSHOT</version> + </parent> + <artifactId>fim-adapter</artifactId> + <name>Eingangs Adapter - FIM</name> + + <dependencies> + <!--ozg-Cloud--> + <dependency> + <groupId>de.ozgcloud.eingang</groupId> + <artifactId>common</artifactId> + </dependency> + <dependency> + <groupId>de.ozgcloud.eingang</groupId> + <artifactId>semantik-adapter</artifactId> + </dependency> + + <!--spring--> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-actuator</artifactId> + </dependency> + + <!--test --> + <dependency> + <groupId>de.ozgcloud.eingang</groupId> + <artifactId>common</artifactId> + <type>test-jar</type> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-failsafe-plugin</artifactId> + </plugin> + + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + </plugin> + </plugins> + </build> +</project> diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/AntragstellerExtractor.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/AntragstellerExtractor.java new file mode 100644 index 0000000000000000000000000000000000000000..5b4d631b42b68e2c6be47dce4e3cc8f5c7b870d2 --- /dev/null +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/AntragstellerExtractor.java @@ -0,0 +1,8 @@ +package de.ozgcloud.eingang.fim; + +import de.ozgcloud.eingang.common.formdata.FormData; + +public interface AntragstellerExtractor { + + default void extractAntragsteller(final FormData.FormDataBuilder builder, final FormData initialFormData) {} +} diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedMapper.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..90ec29b65fcca537e6017857bf8af0ec2ffcd312 --- /dev/null +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedMapper.java @@ -0,0 +1,85 @@ +package de.ozgcloud.eingang.fim; + +import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.IncomingFile; +import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; +import de.ozgcloud.eingang.semantik.enginebased.EngineBasedMapper; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import java.util.Collection; +import java.util.List; +import java.util.Optional; + +@Log4j2 +@Component +class FimBasedMapper implements EngineBasedMapper { + + @Autowired + private FimService fimService; + + public boolean isResponsible(final FormData formData) { + //FIXME isResponsible from meta data + final List<IncomingFileGroup> attachments = formData.getAttachments(); + final Optional<IncomingFile> metadataFileOpt = findFile(attachments, "fim_xtaMetadata.xml"); + return metadataFileOpt.isPresent(); + } + + public FormData parseFormData(final FormData initialFormData) { + if (!isResponsible(initialFormData)) { + return initialFormData; + } + + final List<IncomingFileGroup> attachments = initialFormData.getAttachments(); + final Optional<IncomingFile> metadataFileOpt = findFile(attachments, "fim_xtaMetadata.xml"); + if (metadataFileOpt.isEmpty()) { + LOG.error("Metadata File not found for fim data mapping"); + return initialFormData; + } + final Optional<String> entryPointOpt = getEntryPoint(metadataFileOpt.get()); + if (entryPointOpt.isEmpty()) { + LOG.error("No entry point found in metadata file for fim data mapping"); + return initialFormData; + } + final Optional<IncomingFile> fileOpt = findFile(attachments, entryPointOpt.get()); + if (fileOpt.isEmpty()) { + LOG.error("Entry point file not found for fim data mapping"); + return initialFormData; + } + try { + final Document document = loadDocument(fileOpt.get()); + return fimService.transformDocument(document, initialFormData); + } catch (ParserConfigurationException | SAXException | IOException | FimException e) { + LOG.error("Can't transform document into fim formdata"); + return initialFormData; + } + } + + private Optional<IncomingFile> findFile(final Collection<IncomingFileGroup> attachments, final String name) { + for (IncomingFileGroup group : attachments) { + for (IncomingFile file : group.getFiles()) { + if (file.getName().endsWith(name)) { + return Optional.of(file); + } + } + } + return Optional.empty(); + } + + private Optional<String> getEntryPoint(final IncomingFile incomingFile) { + // FIXME sollte über formdata metadaten kommen statt aus dem meta file geparsed zu werden + return Optional.of("Antrag.xml"); + } + + private Document loadDocument(final IncomingFile incomingFile) throws ParserConfigurationException, IOException, SAXException { + final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + return builder.parse(incomingFile.getContentStream()); + } +} diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataMapper.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..799798b5cc151c199a7b80534d7d834f1fb6c746 --- /dev/null +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataMapper.java @@ -0,0 +1,60 @@ +package de.ozgcloud.eingang.fim; + +import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; +import lombok.extern.log4j.Log4j2; +import org.apache.commons.lang3.function.TriFunction; +import org.springframework.stereotype.Service; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.w3c.dom.Text; + +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Optional; + +@Service +@Log4j2 +class FimDataMapper implements TriFunction<Document, FimScheme, Collection<IncomingFileGroup>, FormData.FormDataBuilder> { + + private static final String LABEL_KEY = "label"; + private static final String VALUE_KEY = "value"; + + @Override + public FormData.FormDataBuilder apply(final Document document, final FimScheme fimScheme, final Collection<IncomingFileGroup> attachments) { + final FormData.FormDataBuilder formDataBuilder = FormData.builder(); + Map<String, Object> data = new LinkedHashMap<>(); + process(document.getDocumentElement(), fimScheme, data, 0); + formDataBuilder.formData(data); + formDataBuilder.attachments(attachments); + return formDataBuilder; + } + + private void process(final Element element, final FimScheme fimScheme, final Map<String, Object> data, final int level) { + final NodeList childNodes = element.getChildNodes(); + + LOG.debug(">".repeat(level) + " " + element.getNodeName()); + + for(int i = 0; i < childNodes.getLength();i++) { + final Node child = childNodes.item(i); + if (!(child instanceof Element)) { + continue; + } + if (child.getChildNodes().getLength() == 1 && child.getChildNodes().item(0) instanceof Text textNode) { + insertValueIntoFormData(data, fimScheme.getFieldName(child.getNodeName()), child.getNodeName(), textNode.getTextContent()); + } else { + final Map<String, Object> childMap = new LinkedHashMap<>(); + insertValueIntoFormData(data, fimScheme.getFieldName(child.getNodeName()), child.getNodeName(), childMap); + process((Element) child, fimScheme, childMap, level + 1); + } + } + } + + private void insertValueIntoFormData(final Map<String, Object> data, final Optional<String> fieldName, final String nodeName, final Object obj) { + final Map<String, Object> labelMap = Map.of(LABEL_KEY, fieldName.orElse(nodeName), VALUE_KEY, obj); + data.put(nodeName, labelMap); + } +} diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimException.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimException.java new file mode 100644 index 0000000000000000000000000000000000000000..ec25fcb3101f859b275fc917516449e1a422e95c --- /dev/null +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimException.java @@ -0,0 +1,9 @@ +package de.ozgcloud.eingang.fim; + +import de.ozgcloud.eingang.common.errorhandling.TechnicalException; + +public class FimException extends TechnicalException { + public FimException(final String ex) { + super(ex); + } +} diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimProperties.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..df67ec1a3468ca2e96a0a63e8edaa27d1f7ba24c --- /dev/null +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimProperties.java @@ -0,0 +1,25 @@ +package de.ozgcloud.eingang.fim; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import lombok.Getter; +import org.springframework.validation.annotation.Validated; + +import java.util.ArrayList; +import java.util.List; + +@Validated +@Configuration +@ConfigurationProperties(prefix = FimProperties.PROPERTIES_PREFIX) +@Getter +public class FimProperties { + static final String PROPERTIES_PREFIX = "fim"; + + /** + * List of paths to fim scheme files which should be processed by the fim-adapter. + * + * Only fim data that is in the namespace and versions of these files will be mapped by the fim-adapter. + * All other fim data will be left untouched by the mapper. + */ + private final List<String> schemeLocations = new ArrayList<>(); +} diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimScheme.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimScheme.java new file mode 100644 index 0000000000000000000000000000000000000000..e38bd99ba4f4d4ab5586b1d4ae436f533017ecc0 --- /dev/null +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimScheme.java @@ -0,0 +1,42 @@ +package de.ozgcloud.eingang.fim; + +import lombok.Getter; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import org.w3c.dom.NodeList; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Optional; + +class FimScheme { + + private final Document doc; + @Getter + private final FimSchemeIdentifier identifier; + + @Getter + private final FimSchemeAdapter schemeAdapter; + private final Map<String, Element> fieldIndex = new LinkedHashMap<>(); + + FimScheme(final Document doc, final FimSchemeIdentifier identifier, final FimSchemeAdapter schemeAdapter) { + this.doc = doc; + this.identifier = identifier; + this.schemeAdapter = schemeAdapter; + + buildFieldIndex(); + } + private void buildFieldIndex() { + final NodeList groupList = doc.getElementsByTagName("xs:element"); + for (int i = 0; i < groupList.getLength();i++) { + final Element group = (Element) groupList.item(i); + final String groupName = group.getAttribute("name"); + fieldIndex.put(groupName, group); + } + } + + Optional<String> getFieldName(final String fieldName) { + return schemeAdapter.getFieldName(fieldIndex, fieldName); + } +} diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeAdapter.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..4166b23656cc1d845ee729fdc86212d6f4efc392 --- /dev/null +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeAdapter.java @@ -0,0 +1,38 @@ +package de.ozgcloud.eingang.fim; + +import lombok.extern.log4j.Log4j2; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.util.Map; +import java.util.Optional; + +@Log4j2 +public abstract class FimSchemeAdapter implements ZustaendigeStelleExtractor, AntragstellerExtractor { + + public abstract FimSchemeIdentifier forIdentifier(); + + public Optional<String> getFieldName(final Map<String, Element> fieldIndex, final String fieldName) { + final String[] fieldNameParts = fieldName.split(":"); + final String fieldNameWithoutNamespace = fieldNameParts[fieldNameParts.length - 1]; + if (!fieldIndex.containsKey(fieldNameWithoutNamespace)) { + LOG.error("Cannot find Field: " + fieldName); + return Optional.empty(); + } + final Element nodeNameElement = fieldIndex.get(fieldNameWithoutNamespace); + final Optional<String> nodeNameOpt = getNameForElement(nodeNameElement); + return nodeNameOpt.map(this::cleanNodeName); + } + + public Optional<String> getNameForElement(final Element element) { + final NodeList nameTags = element.getElementsByTagName("name"); + if (nameTags.getLength() != 1) { + return Optional.empty(); + } + return Optional.ofNullable(nameTags.item(0).getTextContent()); + } + + public String cleanNodeName(final String s) { + return s.trim(); + } +} diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeAdapterCatalogue.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeAdapterCatalogue.java new file mode 100644 index 0000000000000000000000000000000000000000..934f3f8af3c717e76bbf894362316ad6b13cc2df --- /dev/null +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeAdapterCatalogue.java @@ -0,0 +1,5 @@ +package de.ozgcloud.eingang.fim; + +import java.util.LinkedHashMap; +class FimSchemeAdapterCatalogue extends LinkedHashMap<FimSchemeIdentifier, FimSchemeAdapter> { +} diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeCatalogue.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeCatalogue.java new file mode 100644 index 0000000000000000000000000000000000000000..5c53c1ae7ce88a6389ad60bff758df73a9ddd8ce --- /dev/null +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeCatalogue.java @@ -0,0 +1,6 @@ +package de.ozgcloud.eingang.fim; + +import java.util.LinkedHashMap; + +class FimSchemeCatalogue extends LinkedHashMap<FimSchemeIdentifier, FimScheme> { +} diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeIdentifier.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeIdentifier.java new file mode 100644 index 0000000000000000000000000000000000000000..3f2222a484a57be97508f53d78b6f6bd9c074381 --- /dev/null +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeIdentifier.java @@ -0,0 +1,17 @@ +package de.ozgcloud.eingang.fim; + +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode +public class FimSchemeIdentifier { + + private final String schemeId; + + FimSchemeIdentifier(String schemeId) { + this.schemeId = schemeId; + } + + public static FimSchemeIdentifier fromString(final String s) { + return new FimSchemeIdentifier(s); + } +} diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimService.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimService.java new file mode 100644 index 0000000000000000000000000000000000000000..b451d9521385ee1b133d5fe098be89e29e6c8333 --- /dev/null +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimService.java @@ -0,0 +1,99 @@ +package de.ozgcloud.eingang.fim; + +import de.ozgcloud.eingang.common.formdata.FormData; +import io.micrometer.common.util.StringUtils; +import jakarta.annotation.PostConstruct; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Service +@Log4j2 +public class FimService { + public static final String UNKNOWN_SCHEME_NAME = "unknown"; + + @Autowired + private FimProperties fimProperties; + + @Autowired + private FimDataMapper fimDataMapper; + + @Autowired + private final List<FimSchemeAdapter> fimSchemeAdapters = new ArrayList<>(); + + private final FimSchemeCatalogue fimSchemeCatalogue = new FimSchemeCatalogue(); + private final FimSchemeAdapterCatalogue fimSchemeAdapterCatalogue = new FimSchemeAdapterCatalogue(); + + private static final FimSchemeAdapter DEFAULT_FIM_SCHEME_ADAPTER = new FimSchemeAdapter() { + @Override + public FimSchemeIdentifier forIdentifier() { return null; } + }; + + @PostConstruct + private void postConstruct() throws ParserConfigurationException, IOException, SAXException { + for (final FimSchemeAdapter fimSchemeAdapter : fimSchemeAdapters) { + fimSchemeAdapterCatalogue.put(fimSchemeAdapter.forIdentifier(), fimSchemeAdapter); + } + for (final String fimSchemaLocation : fimProperties.getSchemeLocations()) { + final FimScheme fimScheme = loadFimScheme(fimSchemaLocation.trim()); + fimSchemeCatalogue.put(fimScheme.getIdentifier(), fimScheme); + } + final FimScheme unknownScheme = buildUnknownScheme(); + fimSchemeCatalogue.put(unknownScheme.getIdentifier(), unknownScheme); + } + + private FimScheme loadFimScheme(final String path) throws ParserConfigurationException, IOException, SAXException { + final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + final Document doc = builder.parse(new File(path)); + final String targetNamespace = doc.getDocumentElement().getAttribute("targetNamespace"); + final FimSchemeIdentifier fimSchemeIdentifier = FimSchemeIdentifier.fromString(targetNamespace); + final FimSchemeAdapter fimSchemeAdapter = fimSchemeAdapterCatalogue.getOrDefault(fimSchemeIdentifier, DEFAULT_FIM_SCHEME_ADAPTER); + return new FimScheme(doc, fimSchemeIdentifier, fimSchemeAdapter); + } + + private FimScheme buildUnknownScheme() throws ParserConfigurationException { + final Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); + final FimSchemeIdentifier unknownFimSchemeIdentifier = FimSchemeIdentifier.fromString(UNKNOWN_SCHEME_NAME); + final FimSchemeAdapter fimSchemeAdapter = fimSchemeAdapterCatalogue.get(unknownFimSchemeIdentifier); + return new FimScheme(doc, unknownFimSchemeIdentifier, fimSchemeAdapter); + } + + public FormData transformDocument(final Document document, final FormData initialFormData) { + final String schemeName = document.getDocumentElement().getAttribute("xmlns:xfd"); + if (StringUtils.isEmpty(schemeName)) { + throw new FimException("XML Document does not provide a scheme"); + } + final FimScheme scheme = getSchemeForIdentifier(schemeName); + final FormData.FormDataBuilder builder = fimDataMapper.apply(document, scheme, initialFormData.getAttachments()); + + final FimSchemeAdapter adapter = scheme.getSchemeAdapter(); + + builder.header(initialFormData.getHeader()); + + adapter.extractAntragsteller(builder, initialFormData); + + adapter.extractZustaendigeStelle(builder, initialFormData); + + return builder.build(); + } + + FimScheme getSchemeForIdentifier(final String fimSchemaName) { + final FimSchemeIdentifier fimSchemeIdentifier = FimSchemeIdentifier.fromString(fimSchemaName); + final FimScheme fimScheme = fimSchemeCatalogue.get(fimSchemeIdentifier); + if (fimScheme == null) { + LOG.error("Cannot find schema for: " + fimSchemaName); + return fimSchemeCatalogue.get(FimSchemeIdentifier.fromString(UNKNOWN_SCHEME_NAME)); + } + return fimScheme; + } +} diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/UnknownSchemeAdapter.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/UnknownSchemeAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..5015cc5a73da51364f23adf013b7a8ef266c333f --- /dev/null +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/UnknownSchemeAdapter.java @@ -0,0 +1,20 @@ +package de.ozgcloud.eingang.fim; + +import org.springframework.stereotype.Service; +import org.w3c.dom.Element; + +import java.util.Map; +import java.util.Optional; + +@Service +public class UnknownSchemeAdapter extends FimSchemeAdapter { + + public FimSchemeIdentifier forIdentifier() { + return FimSchemeIdentifier.fromString(FimService.UNKNOWN_SCHEME_NAME); + } + + @Override + public Optional<String> getFieldName(Map<String, Element> fieldIndex, String fieldName) { + return Optional.of(fieldName); + } +} diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/ZustaendigeStelleExtractor.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/ZustaendigeStelleExtractor.java new file mode 100644 index 0000000000000000000000000000000000000000..a77d159562ec8bf49d40025ff7b9c96bfc722b6b --- /dev/null +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/ZustaendigeStelleExtractor.java @@ -0,0 +1,7 @@ +package de.ozgcloud.eingang.fim; + +import de.ozgcloud.eingang.common.formdata.FormData; + +public interface ZustaendigeStelleExtractor { + default void extractZustaendigeStelle (final FormData.FormDataBuilder builder, final FormData initialFormData) {} +} diff --git a/fim-adapter/src/main/resources/application.yml b/fim-adapter/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..c52241b27c1372ce3e347313c23d3cf710766e15 --- /dev/null +++ b/fim-adapter/src/main/resources/application.yml @@ -0,0 +1,3 @@ +fim: + schemeLocations: + - src/main/resources/fim-s17000652_1.4/S17000652V1.4_xfall.xsd \ No newline at end of file diff --git a/fim-adapter/src/main/resources/fim-s17000652_1.4/C17000420_genericode.xml b/fim-adapter/src/main/resources/fim-s17000652_1.4/C17000420_genericode.xml new file mode 100644 index 0000000000000000000000000000000000000000..585c7415cc3fe84afd749cc634fb068716e1a523 --- /dev/null +++ b/fim-adapter/src/main/resources/fim-s17000652_1.4/C17000420_genericode.xml @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><gc:CodeList xmlns:gc="http://docs.oasis-open.org/codelist/ns/genericode/1.0/"><gc:Identification><gc:ShortName>codelist</gc:ShortName><gc:LongName></gc:LongName><gc:Version>2022-02-16</gc:Version><gc:CanonicalUri>urn:de:fim:codeliste:dokumenttyp</gc:CanonicalUri><gc:CanonicalVersionUri>urn:de:fim:codeliste:dokumenttyp_2022-02-16</gc:CanonicalVersionUri></gc:Identification><gc:ColumnSet><gc:Column Id="code" Use="required"><gc:ShortName>Code</gc:ShortName><gc:Data Type="string"/></gc:Column><gc:Column Id="name" Use="required"><gc:ShortName>Name</gc:ShortName><gc:Data Type="string"/></gc:Column><gc:Key Id="codeKey"><gc:ShortName>CodeKey</gc:ShortName><gc:ColumnRef Ref="code"/></gc:Key><gc:Key Id="codenameKey"><gc:ShortName>CodenameKey</gc:ShortName><gc:ColumnRef Ref="name"/></gc:Key></gc:ColumnSet><gc:SimpleCodeList><gc:Row><gc:Value ColumnRef="code"><gc:SimpleValue>01</gc:SimpleValue></gc:Value><gc:Value ColumnRef="name"><gc:SimpleValue>Anzeige einer öffentlichen Versammlung unter freiem Himmel (ortsfest)</gc:SimpleValue></gc:Value></gc:Row><gc:Row><gc:Value ColumnRef="code"><gc:SimpleValue>02</gc:SimpleValue></gc:Value><gc:Value ColumnRef="name"><gc:SimpleValue>Anzeige einer sich fortbewegenden Versammlung (Aufzug, Umzug)</gc:SimpleValue></gc:Value></gc:Row></gc:SimpleCodeList></gc:CodeList> \ No newline at end of file diff --git a/fim-adapter/src/main/resources/fim-s17000652_1.4/C17001208_genericode.xml b/fim-adapter/src/main/resources/fim-s17000652_1.4/C17001208_genericode.xml new file mode 100644 index 0000000000000000000000000000000000000000..cbf9e3f5693fb67c02b34955ee48beefc278c948 --- /dev/null +++ b/fim-adapter/src/main/resources/fim-s17000652_1.4/C17001208_genericode.xml @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><gc:CodeList xmlns:gc="http://docs.oasis-open.org/codelist/ns/genericode/1.0/"><gc:Identification><gc:ShortName></gc:ShortName><gc:LongName></gc:LongName><gc:Version>2023-09-26</gc:Version><gc:CanonicalUri>urn:de:fim:codeliste:artteilnahmeveranstaltung</gc:CanonicalUri><gc:CanonicalVersionUri>urn:de:fim:codeliste:artteilnahmeveranstaltung_2023-09-26</gc:CanonicalVersionUri></gc:Identification><gc:ColumnSet><gc:Column Id="code" Use="required"><gc:ShortName>Code</gc:ShortName><gc:Data Type="string"/></gc:Column><gc:Column Id="name" Use="required"><gc:ShortName>Name</gc:ShortName><gc:Data Type="string"/></gc:Column><gc:Key Id="codeKey"><gc:ShortName>CodeKey</gc:ShortName><gc:ColumnRef Ref="code"/></gc:Key><gc:Key Id="codenameKey"><gc:ShortName>CodenameKey</gc:ShortName><gc:ColumnRef Ref="name"/></gc:Key></gc:ColumnSet><gc:SimpleCodeList><gc:Row><gc:Value ColumnRef="code"><gc:SimpleValue>001</gc:SimpleValue></gc:Value><gc:Value ColumnRef="name"><gc:SimpleValue>zu Fuß</gc:SimpleValue></gc:Value></gc:Row><gc:Row><gc:Value ColumnRef="code"><gc:SimpleValue>002</gc:SimpleValue></gc:Value><gc:Value ColumnRef="name"><gc:SimpleValue>per Fahrrad</gc:SimpleValue></gc:Value></gc:Row><gc:Row><gc:Value ColumnRef="code"><gc:SimpleValue>003</gc:SimpleValue></gc:Value><gc:Value ColumnRef="name"><gc:SimpleValue>per Motorrad</gc:SimpleValue></gc:Value></gc:Row><gc:Row><gc:Value ColumnRef="code"><gc:SimpleValue>004</gc:SimpleValue></gc:Value><gc:Value ColumnRef="name"><gc:SimpleValue>per Personenkraftwagen</gc:SimpleValue></gc:Value></gc:Row><gc:Row><gc:Value ColumnRef="code"><gc:SimpleValue>005</gc:SimpleValue></gc:Value><gc:Value ColumnRef="name"><gc:SimpleValue>Sonstiges</gc:SimpleValue></gc:Value></gc:Row></gc:SimpleCodeList></gc:CodeList> \ No newline at end of file diff --git a/fim-adapter/src/main/resources/fim-s17000652_1.4/C17001209_genericode.xml b/fim-adapter/src/main/resources/fim-s17000652_1.4/C17001209_genericode.xml new file mode 100644 index 0000000000000000000000000000000000000000..b748e48cd9a77475c3c2cea0020d592bbb9cd61f --- /dev/null +++ b/fim-adapter/src/main/resources/fim-s17000652_1.4/C17001209_genericode.xml @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><gc:CodeList xmlns:gc="http://docs.oasis-open.org/codelist/ns/genericode/1.0/"><gc:Identification><gc:ShortName></gc:ShortName><gc:LongName></gc:LongName><gc:Version>2023-09-29</gc:Version><gc:CanonicalUri>urn:de:fim:codeliste:buehneversammlung</gc:CanonicalUri><gc:CanonicalVersionUri>urn:de:fim:codeliste:buehneversammlung_2023-09-29</gc:CanonicalVersionUri></gc:Identification><gc:ColumnSet><gc:Column Id="code" Use="required"><gc:ShortName>Code</gc:ShortName><gc:Data Type="string"/></gc:Column><gc:Column Id="name" Use="required"><gc:ShortName>Name</gc:ShortName><gc:Data Type="string"/></gc:Column><gc:Key Id="codeKey"><gc:ShortName>CodeKey</gc:ShortName><gc:ColumnRef Ref="code"/></gc:Key><gc:Key Id="codenameKey"><gc:ShortName>CodenameKey</gc:ShortName><gc:ColumnRef Ref="name"/></gc:Key></gc:ColumnSet><gc:SimpleCodeList><gc:Row><gc:Value ColumnRef="code"><gc:SimpleValue>001</gc:SimpleValue></gc:Value><gc:Value ColumnRef="name"><gc:SimpleValue>Ja</gc:SimpleValue></gc:Value></gc:Row><gc:Row><gc:Value ColumnRef="code"><gc:SimpleValue>002</gc:SimpleValue></gc:Value><gc:Value ColumnRef="name"><gc:SimpleValue>Nein</gc:SimpleValue></gc:Value></gc:Row><gc:Row><gc:Value ColumnRef="code"><gc:SimpleValue>003</gc:SimpleValue></gc:Value><gc:Value ColumnRef="name"><gc:SimpleValue>Nicht bekannt</gc:SimpleValue></gc:Value></gc:Row><gc:Row><gc:Value ColumnRef="code"><gc:SimpleValue>004</gc:SimpleValue></gc:Value><gc:Value ColumnRef="name"><gc:SimpleValue>Keine</gc:SimpleValue></gc:Value></gc:Row></gc:SimpleCodeList></gc:CodeList> \ No newline at end of file diff --git a/fim-adapter/src/main/resources/fim-s17000652_1.4/S17000652V1.4_xfall.xsd b/fim-adapter/src/main/resources/fim-s17000652_1.4/S17000652V1.4_xfall.xsd new file mode 100644 index 0000000000000000000000000000000000000000..c5c859d0a2fec4d7fb668678afd680cbbcbf0088 --- /dev/null +++ b/fim-adapter/src/main/resources/fim-s17000652_1.4/S17000652V1.4_xfall.xsd @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xfd="urn:xoev-de:xfall:standard:fim-s17000652_1.4" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:xoev-de:xfall:standard:fim-s17000652_1.4" version="V1.4"><xs:element name="fim.S17000652.17000652001004"><xs:complexType><xs:sequence><xs:element name="G17003529" type="xfd:G17003529"><xs:annotation><xs:documentation><name>EfA|SH Standard</name><bezug>tbd</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F17009191" type="xs:boolean"><xs:annotation><xs:documentation><name>Anzeige durch Person </name><definition>Wahrheitswert: ja oder nein
 +</definition><bezug>Art. 8 GG;§ 11 VershFG SG
 +</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="G17002112" type="xfd:G17002112"><xs:annotation><xs:documentation><name>Anzeigenersteller:in</name><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="G17005403" type="xfd:G17005403"><xs:annotation><xs:documentation><name>Organisation </name><definition>Angaben zur Organisation, welche die Versammlung durchführen möchte</definition><bezug>Art. 8 GG;§ 11 VershFG SG
 +</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F17003371" type="xs:string"><xs:annotation><xs:documentation><name>Anzeigenart</name><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="G17005404" type="xfd:G17005404"><xs:annotation><xs:documentation><name>Versammlung (ortsfest)</name><bezug>Art. 8 GG ; § 11 VershFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="G17005410" type="xfd:G17005410"><xs:annotation><xs:documentation><name>Versammlung (Aufzug)</name><bezug>Art. 8 GG ; § 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType></xs:element><xs:complexType name="G17003529"><xs:sequence><xs:element name="G05001479" type="xfd:G05001479"><xs:annotation><xs:documentation><name>nachrichtenkopf</name><beschreibung>Der Nachrichtenkopf beinhaltet alle erforderlichen Informationen für die Zustellung und Verifizierung mit Hilfe des DVDV.</beschreibung><bezug>DVDV</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F17005454" type="xs:boolean"><xs:annotation><xs:documentation><name>Datenschutzhinweis DSGVO</name><bezug>tbd</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F17005455" type="xs:boolean"><xs:annotation><xs:documentation><name>Zustimmung zu einem digitalen Bescheid</name><bezug>tbd</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F17005533" type="xs:string"><xs:annotation><xs:documentation><name>UUID</name><bezug>tbd</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G05001479"><xs:sequence><xs:element name="G05001480" type="xfd:G05001480"><xs:annotation><xs:documentation><name>identifikation.nachricht</name><bezug>DVDV</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G05001481" type="xfd:G05001481"><xs:annotation><xs:documentation><name>Leser</name><bezug>DVDV</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G05001482" type="xfd:G05001482"><xs:annotation><xs:documentation><name>Autor</name><bezug>DVDV</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G05001480"><xs:sequence><xs:element name="F05002750" type="xs:string"><xs:annotation><xs:documentation><name>nachrichtenUUID</name><bezug>DVDV</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F05002751" type="xs:string"><xs:annotation><xs:documentation><name>erstellungszeitpunkt</name><bezug>DVDV</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F05002752" type="xs:string"><xs:annotation><xs:documentation><name>nachrichtentyp</name><bezug>DVDV</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F05002753" type="xs:string"><xs:annotation><xs:documentation><name>dienstname</name><bezug>DVDV</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G05001481"><xs:sequence><xs:element name="F05002754" type="xs:string"><xs:annotation><xs:documentation><name>Organisationsname</name><bezug>DVDV</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F05002755" type="xs:string"><xs:annotation><xs:documentation><name>Organisationsschlüssel</name><bezug>DVDV</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F05002756" type="xs:string"><xs:annotation><xs:documentation><name>Kategorie</name><bezug>DVDV</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G05001482"><xs:sequence><xs:element name="F05002754" type="xs:string"><xs:annotation><xs:documentation><name>Organisationsname</name><bezug>DVDV</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F05002755" type="xs:string"><xs:annotation><xs:documentation><name>Organisationsschlüssel</name><bezug>DVDV</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F05002756" type="xs:string"><xs:annotation><xs:documentation><name>Kategorie</name><bezug>DVDV</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17002112"><xs:sequence><xs:element name="F60000228" type="xs:string"><xs:annotation><xs:documentation><name>Vornamen</name><beschreibung>Laut BSI TR-03123 soll Vorname ≤ 80 Zeichen betragen.
 +Laut PAuswV soll Vorname nicht mehr als 26 Zeichen bzw. 2*40 = 80 Zeichen betragen.</beschreibung><definition>Plural zu Vorname</definition><bezug>§ 5 (2) Nr. 2 PAuswG vom 21.6.2019; Anhang 3 PAuswV vom 28.9.2017; 
 +Tabelle 9 BSI TR-03123 Version 1.5.1; XOEV.Kernkomponente.NameNatuerlichePerson.vorname vom 31.08.2020</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F60000227" type="xs:string"><xs:annotation><xs:documentation><name>Familienname</name><beschreibung>Laut BSI TR-03123 soll die Gesamtlänge für Familienname, Titel und Geburtsname nicht mehr als 120 Zeichen betragen. Laut PAuswV soll Name (Familienname und Geburtsname) nicht mehr als 2*26 = 52 Zeichen bzw. 3*40 = 120 Zeichen betragen.</beschreibung><definition>Familienname einer natürlichen Person bestehend aus Nachname, Zuname bzw. Familienname.</definition><bezug>§ 5 (2) Nr. 1 PAuswG vom 21.6.2019; Anhang 3 PAuswV vom 28.9.2017; Tabelle 9 BSI TR-03123 Version 1.5.1; XOEV.Kernkomponente.NameNatuerlichePerson.familienname vom 31.01.2020</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G60000086" type="xfd:G60000086"><xs:annotation><xs:documentation><name>Anschrift Inland Straßenanschrift</name></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F60000240" type="xs:string"><xs:annotation><xs:documentation><name>Telefon</name><beschreibung>Dieses Feld wurde angelehnt an ITU E.123. Eine Prüfung über ein Pattern erfolgt nicht, um den Eingebenden nicht zu überfordern.</beschreibung><definition>Telefonnummer</definition><bezug>ITU E.123</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F60000242" type="xs:string"><xs:annotation><xs:documentation><name>E-Mail</name><definition>Elektronische Adresse zum Senden und Empfangen von digitalen Nachrichten (E-Mails) z.B. MaxMustermann@email.de</definition><bezug>RFC 5322; RFC 5321</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F17009011" type="xs:boolean"><xs:annotation><xs:documentation><name>Auswahl Anzeigenersteller:in = Verantwortliche Versammlungsleiter:in</name><definition>Angabe ob Sie als Anzeigenersteller:in ebenfalls Verantwortliche Versammlungsleiter:in sind</definition><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="G17002127" type="xfd:G17002127"><xs:annotation><xs:documentation><name>Verantwortliche Versammlungsleiter:in</name><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G60000086"><xs:sequence><xs:element name="F60000243" type="xs:string"><xs:annotation><xs:documentation><name>Straße</name><beschreibung>Kompatibilität zu EPA in TR XhD v 1.4 sollte Feldlänge min. 50. Bei XInneres 8 ist die Feldlänge <= 55 Zeichen.</beschreibung><bezug>XInneres.Meldeanschrift.strasse Version 8</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F60000244" type="xs:string"><xs:annotation><xs:documentation><name>Hausnummer</name><beschreibung>Die Modellierung aus XInneres wurde nicht 1:1 übernommen, um die Komplexität für die Ausfüllenden nicht zu hoch zu setzen. Es wurde darauf verzichtet für das Ende von Hausnummernbereichen eigene Felder zu modellieren. Daher ist die Feldlänge hier heraufgesetzt und eine entsprechende Beschreibung wurde eingefügt. Die Feldlänge setzt sich aus der maximalen Feldlänge zweier Hausnummern (jeweils 4), zweier Buchstaben (jeweils 1) und eines Zeichen (-) zusammen.</beschreibung><definition>Es sind die Ziffern und Buchstabeneiner Hausnummer anzugeben. Eine Hausnummer dient der genauen Lokalisierung eines Grundstücks, Gebäudes oder Gebäudeteils (Eingang) in einer Straße. Geben Sie Hausnummernbereiche immer nach folgendem Beispiel ohne Leerzeichen an: 12a-14d</definition><bezug>XInneres.Meldeanschrift.hausnummer Version 8</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F60000246" type="xs:string"><xs:annotation><xs:documentation><name>Postleitzahl</name><definition>Es ist die Postleitzahl anzugeben.
 +
 +Der Typ dieses Elements ist eine Einschränkung des Basistyps String.Latin.</definition><bezug>XInneres.Meldeanschrift.postleitzahl Version 8</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F60000247" type="xs:string"><xs:annotation><xs:documentation><name>Ort</name><beschreibung>Kompatibilität zu EPA in TR XhD v 1.4 sollte Feldlänge min. 44. Laut PAuswV 2*25 = 50 Zeichen. Laut Xinneres.Meldeanschrift.Wohnort Version 8 = 40 Zeichen.
 +Laut BSI TR-03123 ≤ 105 Zeichen.</beschreibung><definition>Enthält den Namen eines Ortes (Gemeinde, Ortschaft oder Stadt).</definition><bezug>§ 5 (2) Nr. 9 PAuswG vom 21.6.2019; Anhang 3 Abschnitt 1 (Wohnort) PAuswV vom 28.9.2017; Tabelle 11 BSI TR-03123, Version 1.5.1; Xinneres.Meldeanschrift.Wohnort Version 8; XOEV.Kernkomponente.Anschrift.ort vom 31.01.2020</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F60000248" type="xs:string"><xs:annotation><xs:documentation><name>Anschrift Zusatzangaben</name><definition>Es sind Zusatzangaben zur Anschrift anzugeben, z.B. Hinterhaus, Gartenhaus.
 +</definition><bezug>XInneres.Meldeanschrift.zusatzangaben Version 8</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17002127"><xs:sequence><xs:element name="F60000228" type="xs:string"><xs:annotation><xs:documentation><name>Vornamen</name><beschreibung>Laut BSI TR-03123 soll Vorname ≤ 80 Zeichen betragen.
 +Laut PAuswV soll Vorname nicht mehr als 26 Zeichen bzw. 2*40 = 80 Zeichen betragen.</beschreibung><definition>Plural zu Vorname</definition><bezug>§ 5 (2) Nr. 2 PAuswG vom 21.6.2019; Anhang 3 PAuswV vom 28.9.2017; 
 +Tabelle 9 BSI TR-03123 Version 1.5.1; XOEV.Kernkomponente.NameNatuerlichePerson.vorname vom 31.08.2020</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F60000227" type="xs:string"><xs:annotation><xs:documentation><name>Familienname</name><beschreibung>Laut BSI TR-03123 soll die Gesamtlänge für Familienname, Titel und Geburtsname nicht mehr als 120 Zeichen betragen. Laut PAuswV soll Name (Familienname und Geburtsname) nicht mehr als 2*26 = 52 Zeichen bzw. 3*40 = 120 Zeichen betragen.</beschreibung><definition>Familienname einer natürlichen Person bestehend aus Nachname, Zuname bzw. Familienname.</definition><bezug>§ 5 (2) Nr. 1 PAuswG vom 21.6.2019; Anhang 3 PAuswV vom 28.9.2017; Tabelle 9 BSI TR-03123 Version 1.5.1; XOEV.Kernkomponente.NameNatuerlichePerson.familienname vom 31.01.2020</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G60000086" type="xfd:G60000086"><xs:annotation><xs:documentation><name>Anschrift Inland Straßenanschrift</name></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F60000242" type="xs:string"><xs:annotation><xs:documentation><name>E-Mail</name><definition>Elektronische Adresse zum Senden und Empfangen von digitalen Nachrichten (E-Mails) z.B. MaxMustermann@email.de</definition><bezug>RFC 5322; RFC 5321</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F60000240" type="xs:string"><xs:annotation><xs:documentation><name>Telefon</name><beschreibung>Dieses Feld wurde angelehnt an ITU E.123. Eine Prüfung über ein Pattern erfolgt nicht, um den Eingebenden nicht zu überfordern.</beschreibung><definition>Telefonnummer</definition><bezug>ITU E.123</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011808" type="xs:string"><xs:annotation><xs:documentation><name>Telefonische Erreichbarkeit am Tag der Veranstaltung</name><bezug>§ 11 VershFG</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17005403"><xs:sequence><xs:element name="G17007200" type="xfd:G17007200"><xs:annotation><xs:documentation><name>Daten der anzeigenden Organisation</name><bezug>Art. 8 GG ;§ 11 VershFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G17007201" type="xfd:G17007201"><xs:annotation><xs:documentation><name>Ansprechperson der Organisation</name><definition>Sie sollten als Versammlungsleitung oder veranstaltende Person oder Organisation Ihre Telefonnummer oder E-Mail-Adresse, unter der Sie vor und während der Versammlung erreichbar sind, angeben. Dies dient der schnellen, einfachen und vertrauensvollen Zusammenarbeit mit der Versammlungsbehörde und der Sicherstellung des Schutzes Ihrer Versammlung.</definition><bezug>Art. 8 GG;§ 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G17002127" type="xfd:G17002127"><xs:annotation><xs:documentation><name>Verantwortliche Versammlungsleiter:in</name><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17007200"><xs:sequence><xs:element name="F60000319" type="xs:string"><xs:annotation><xs:documentation><name>Eingetragener Name / Organisationsname</name><beschreibung>Laut XGewerbeanzeige.Betrieb.eingetragenerName soll der eingetragene Name 1-1000 Zeichen betragen.</beschreibung><definition>Die im Handels- oder Genossenschaftsregister eingetragene Firma eines wirtschaftlich Tätigen bzw. einer wirtschaftlichen Tätigkeit (z. B. eingetragenes Einzelunternehmen,eingetragene Zweigniederlassung) bzw. der im Vereinsregister, Partnerschaftsregister oder Stiftungsverzeichnis eingetragene Name.
 +
 +Der eingetragene Name kann auch in einem Register festgehalten sein, welches in einem anderen Staat geführt wird.
 +
 +Der eingetragene Name ist abzugrenzen von der Geschäftsbezeichnung. 
 +
 +Das Kerndatenobjekt bildet auch die Namen juristischer Personen, Personengesellschaften oder sonstiger Personenvereinigungen ab, die nicht in einem Register, aber kraft Gesetz geführt werden.</definition><bezug>XOEV.Kernkomponente.NameOrganisation.name vom 01.08.2017; XGewerbeanzeige.Betrieb.eingetragenerName Version 2.2; XUnternehmen.Kerndatenmodell.Eingetragener Name Version 1.1</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011809" type="xs:string"><xs:annotation><xs:documentation><name>Organisationseinheit</name><definition>Optionale Angabe der Organisationseinheit</definition><bezug>Art. 8 GG;§ 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G60000086" type="xfd:G60000086"><xs:annotation><xs:documentation><name>Anschrift Inland Straßenanschrift</name><definition>Angaben für die Adressierung im Inland, soweit es sich um die Anschrift eines Gebäudes handelt.</definition><bezug>urn:xoevde:xunternehmen:kerndatenobjekt:anschriftinlandstrassenanschrift</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G60000086"><xs:sequence><xs:element name="F60000243" type="xs:string"><xs:annotation><xs:documentation><name>Straße</name><beschreibung>Kompatibilität zu EPA in TR XhD v 1.4 sollte Feldlänge min. 50. Bei XInneres 8 ist die Feldlänge <= 55 Zeichen.</beschreibung><bezug>XInneres.Meldeanschrift.strasse Version 8</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F60000244" type="xs:string"><xs:annotation><xs:documentation><name>Hausnummer</name><beschreibung>Die Modellierung aus XInneres wurde nicht 1:1 übernommen, um die Komplexität für die Ausfüllenden nicht zu hoch zu setzen. Es wurde darauf verzichtet für das Ende von Hausnummernbereichen eigene Felder zu modellieren. Daher ist die Feldlänge hier heraufgesetzt und eine entsprechende Beschreibung wurde eingefügt. Die Feldlänge setzt sich aus der maximalen Feldlänge zweier Hausnummern (jeweils 4), zweier Buchstaben (jeweils 1) und eines Zeichen (-) zusammen.</beschreibung><definition>Es sind die Ziffern und Buchstabeneiner Hausnummer anzugeben. Eine Hausnummer dient der genauen Lokalisierung eines Grundstücks, Gebäudes oder Gebäudeteils (Eingang) in einer Straße. Geben Sie Hausnummernbereiche immer nach folgendem Beispiel ohne Leerzeichen an: 12a-14d</definition><bezug>XInneres.Meldeanschrift.hausnummer Version 8</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F60000246" type="xs:string"><xs:annotation><xs:documentation><name>Postleitzahl</name><definition>Es ist die Postleitzahl anzugeben.
 +
 +Der Typ dieses Elements ist eine Einschränkung des Basistyps String.Latin.</definition><bezug>XInneres.Meldeanschrift.postleitzahl Version 8</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F60000247" type="xs:string"><xs:annotation><xs:documentation><name>Ort</name><beschreibung>Kompatibilität zu EPA in TR XhD v 1.4 sollte Feldlänge min. 44. Laut PAuswV 2*25 = 50 Zeichen. Laut Xinneres.Meldeanschrift.Wohnort Version 8 = 40 Zeichen. +Laut BSI TR-03123 kleiner gleich 105 Zeichen.</beschreibung><definition>Enthält den Namen eines Ortes (Gemeinde, Ortschaft oder Stadt).</definition><bezug>§ 5 (2) Nr. 9 PAuswG vom 21.6.2019; Anhang 3 Abschnitt 1 (Wohnort) PAuswV vom 28.9.2017; Tabelle 11 BSI TR-03123, Version 1.5.1; Xinneres.Meldeanschrift.Wohnort Version 8; XOEV.Kernkomponente.Anschrift.ort vom 31.01.2020</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F60000248" type="xs:string"><xs:annotation><xs:documentation><name>Anschrift Zusatzangaben</name><definition>Es sind Zusatzangaben zur Anschrift anzugeben, z.B. Hinterhaus, Gartenhaus.
 +</definition><bezug>XInneres.Meldeanschrift.zusatzangaben Version 8</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17007201"><xs:sequence><xs:element name="F60000228" type="xs:string"><xs:annotation><xs:documentation><name>Vornamen</name><beschreibung>Laut BSI TR-03123 soll Vorname <= 80 Zeichen betragen.
 +Laut PAuswV soll Vorname nicht mehr als 26 Zeichen bzw. 2*40 = 80 Zeichen betragen.</beschreibung><definition>Plural zu Vorname</definition><bezug>§ 5 (2) Nr. 2 PAuswG vom 21.6.2019; Anhang 3 PAuswV vom 28.9.2017; 
 +Tabelle 9 BSI TR-03123 Version 1.5.1; XOEV.Kernkomponente.NameNatuerlichePerson.vorname vom 31.08.2020</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F60000227" type="xs:string"><xs:annotation><xs:documentation><name>Familienname</name><beschreibung>Laut BSI TR-03123 soll die Gesamtlänge für Familienname, Titel und Geburtsname nicht mehr als 120 Zeichen betragen. Laut PAuswV soll Name (Familienname und Geburtsname) nicht mehr als 2*26 = 52 Zeichen bzw. 3*40 = 120 Zeichen betragen.</beschreibung><definition>Familienname einer natürlichen Person bestehend aus Nachname, Zuname bzw. Familienname.</definition><bezug>§ 5 (2) Nr. 1 PAuswG vom 21.6.2019; Anhang 3 PAuswV vom 28.9.2017; Tabelle 9 BSI TR-03123 Version 1.5.1; XOEV.Kernkomponente.NameNatuerlichePerson.familienname vom 31.01.2020</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F60000240" type="xs:string"><xs:annotation><xs:documentation><name>Telefon</name><beschreibung>Dieses Feld wurde angelehnt an ITU E.123. Eine Prüfung über ein Pattern erfolgt nicht, um den Eingebenden nicht zu überfordern.</beschreibung><definition>Telefonnummer</definition><bezug>ITU E.123</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F60000242" type="xs:string"><xs:annotation><xs:documentation><name>E-Mail</name><definition>Elektronische Adresse zum Senden und Empfangen von digitalen Nachrichten (E-Mails) z.B. MaxMustermann@email.de</definition><bezug>RFC 5322; RFC 5321</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17005404"><xs:sequence><xs:element name="G17007202" type="xfd:G17007202"><xs:annotation><xs:documentation><name>Allgemeine Angaben zur Versammlung</name><bezug>Art. 8 GG ; § 11 VershFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G17007205" type="xfd:G17007205"><xs:annotation><xs:documentation><name>Weitere Angaben </name><definition>Angaben zur geplanten Durchführung der Versammlung.</definition><bezug>Art. 8 GG ; §§ 9, 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17007202"><xs:sequence><xs:element name="F17003373" type="xs:string"><xs:annotation><xs:documentation><name>Thema der Versammlung</name><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011810" type="xs:string"><xs:annotation><xs:documentation><name>Beschreibung der Versammlung</name><bezug>Art. 8 GG ; § 11 VershFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F17003377" type="xs:string"><xs:annotation><xs:documentation><name>Versammlungsort</name><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="G17005405" type="xfd:G17005405"><xs:annotation><xs:documentation><name>Karte Versammlungsort</name><definition>Anlage eines Kartenausschnitts</definition><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G17005406" type="xfd:G17005406"><xs:annotation><xs:documentation><name>Zeitraum (Versammlungsanzeige)</name><definition>Gibt den Anfang und das Ende eines Zeitraums an.</definition><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011814" type="xs:string"><xs:annotation><xs:documentation><name>Grund für die verspätete Anmeldung</name><definition>Im Falle der nicht fristgemäßen Anmeldung der Versammlung - Optional Grund ergänzen. </definition><bezug>Art. 8 GG ; § 11 VershFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011815" type="xs:string"><xs:annotation><xs:documentation><name>Telefonnummer zur Rücksprache der verspäteten Anmeldung</name><bezug>Art. 8 GG ; § 11 VershFG SH iVm ITU E.123</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17005405"><xs:sequence><xs:element maxOccurs="5" minOccurs="0" name="F60000296" type="xs:string"><xs:annotation><xs:documentation><name>Nachweis</name><definition>Nachweisdokument, um eine Information zu bestätigen, z.B. Sachkundenachweis.</definition></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17005406"><xs:sequence><xs:element name="F60000048" type="xs:date"><xs:annotation><xs:documentation><name>Anfang</name><definition>Beinhaltet das Datum des Anfangs eines Zeitraums.</definition><bezug>urn:xoev-de:kosit:xoev:kernkomponente:zeitraum vom 31.08.2020</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F17001348" type="xs:decimal"><xs:annotation><xs:documentation><name>Uhrzeit Start</name><bezug>div.</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F60000049" type="xs:date"><xs:annotation><xs:documentation><name>Ende</name><definition>Beinhaltet das Datum des Ende eines Zeitraums.</definition><bezug>urn:xoev-de:kosit:xoev:kernkomponente:zeitraum vom 31.08.2020</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F17001349" type="xs:decimal"><xs:annotation><xs:documentation><name>Uhrzeit Abschluss</name><bezug>div.</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17007205"><xs:sequence><xs:element name="F17003379" type="xs:integer"><xs:annotation><xs:documentation><name>Anzahl der Teilnehmenden</name><bezug>Art. 8 GG; § 11 VershFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17003380" type="xs:integer"><xs:annotation><xs:documentation><name>Anzahl eingeplanter Ordner:innen</name><definition>Empfehlung: 1 Ordner:in je 50 Teilnehmende</definition><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17003382" type="xs:string"><xs:annotation><xs:documentation><name>Weitere teilnehmende Organisationen</name><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G17007234" type="xfd:G17007234"><xs:annotation><xs:documentation><name>Aufbauzeit</name><bezug>§§ 11,14 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G17007235" type="xfd:G17007235"><xs:annotation><xs:documentation><name>Abbauzeit</name><bezug>§§ 11,14 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17003383" type="xs:string"><xs:annotation><xs:documentation><name>Demonstrationsmittel</name><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="G17007207" type="xfd:G17007207"><xs:annotation><xs:documentation><name>Zusätzliche Informationen zu den geplanten Demonstrationsmitteln</name><definition>Optionale Schätzung der Anzahl der Fahnen und Transparente.</definition><bezug>Art. 8 GG ; §§ 9, 11 VershFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17003384" type="xs:string"><xs:annotation><xs:documentation><name>Lautsprechereinsatz</name><bezug>Art. 8 GG ; § 11 VersFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="G17007208" type="xfd:G17007208"><xs:annotation><xs:documentation><name>Zusätzliche Informationen zum geplanten Lautsprechereinsatz</name><definition>Angaben zum geplanten Einsatz von Lautsprechern und ggf. Transportfahrzeugen (Musikanlagen, Megafone, PKW/LKW usw.)</definition><bezug>Art. 8 GG ; § 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element maxOccurs="unbounded" minOccurs="0" name="G17007209" type="xfd:G17007209"><xs:annotation><xs:documentation><name>Geplante Bühnen</name><bezug>Art. 8 GG ; § 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="G17007210" type="xfd:G17007210"><xs:annotation><xs:documentation><name>Lagepläne / Skizzen der Aufbauten, Bilder / Informationen zu den Demonstrationsmitteln oder sonstige Dokumente/Informationen hochladen</name><bezug>Art. 8 GG ; §§ 9, 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17007234"><xs:sequence><xs:element name="F17011826" type="xs:string"><xs:annotation><xs:documentation><name>Beträgt die Aufbauzeit über 30 Minuten?</name><bezug>Art. 8 GG ; § 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011853" type="xs:integer"><xs:annotation><xs:documentation><name>Auf-/Abbauzeit > 30 min </name><definition>Wenn die Auf- bzw. Abbauzeit mehr als 30 min beträgt in "F17011826 Beträgt die Aufbauzeit über 30 Minuten?" bzw. in "F17011827 Beträgt die Abbauzeit über 30 Minuten?" = Auswahl in C17001209 = 001 "Ja", wird "F17011853 Auf-/Abbauzeit > 30 min" zu einer Pflichtangabe.
 +</definition><bezug>§§ 11,14 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17007235"><xs:sequence><xs:element name="F17011827" type="xs:string"><xs:annotation><xs:documentation><name>Beträgt die Abbauzeit über 30 Minuten?</name><bezug>Art. 8 GG ; § 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011853" type="xs:integer"><xs:annotation><xs:documentation><name>Auf-/Abbauzeit > 30 min </name><definition>Wenn die Auf- bzw. Abbauzeit mehr als 30 min beträgt in "F17011826 Beträgt die Aufbauzeit über 30 Minuten?" bzw. in "F17011827 Beträgt die Abbauzeit über 30 Minuten?" = Auswahl in C17001209 = 001 "Ja", wird "F17011853 Auf-/Abbauzeit > 30 min" zu einer Pflichtangabe.
 +</definition><bezug>§§ 11,14 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17007207"><xs:sequence><xs:element minOccurs="0" name="F17011818" type="xs:integer"><xs:annotation><xs:documentation><name>Anzahl Transparente</name><bezug>Art. 8 GG ; § 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011819" type="xs:integer"><xs:annotation><xs:documentation><name>Anzahl Fahnen</name><bezug>Art. 8 GG ; § 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17007208"><xs:sequence><xs:element minOccurs="0" name="F17011820" type="xs:integer"><xs:annotation><xs:documentation><name>Anzahl Lautsprecher(anlagen)</name><bezug>Art. 8 GG ; § 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011821" type="xs:integer"><xs:annotation><xs:documentation><name>Anzahl Megafone</name><bezug>Art. 8 GG ; § 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011822" type="xs:integer"><xs:annotation><xs:documentation><name>Anzahl PKW</name><bezug>Art. 8 GG ; § 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011824" type="xs:integer"><xs:annotation><xs:documentation><name>Anzahl LKW</name><bezug>Art. 8 GG ; § 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011823" type="xs:decimal"><xs:annotation><xs:documentation><name>Gewicht LKW</name><bezug>Art. 8 GG ; § 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17007209"><xs:sequence><xs:element name="F17011825" type="xs:boolean"><xs:annotation><xs:documentation><name>Fester Bühnenaufbau? </name><definition>Wahrheitswert: Auswahl = "ja" entspricht "Fester Aufbau" - Auswahl ="nein" entspricht "mobile Bühne"</definition><bezug>Art. 8 GG ; § 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F60000302" type="xs:decimal"><xs:annotation><xs:documentation><name>Länge in m</name></xs:documentation></xs:annotation></xs:element><xs:element name="F60000303" type="xs:decimal"><xs:annotation><xs:documentation><name>Breite in m</name></xs:documentation></xs:annotation></xs:element><xs:element name="F60000311" type="xs:decimal"><xs:annotation><xs:documentation><name>Gewicht in kg</name></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17007210"><xs:sequence><xs:element maxOccurs="unbounded" minOccurs="0" name="F60000296" type="xs:string"><xs:annotation><xs:documentation><name>Nachweis</name><definition>Nachweisdokument, um eine Information zu bestätigen, z.B. Sachkundenachweis.</definition></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17005410"><xs:sequence><xs:element name="G17007211" type="xfd:G17007211"><xs:annotation><xs:documentation><name>Allgemeine Angaben zum Aufzug</name><bezug>Art. 8 GG ; § 11 VershFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011830" type="xs:string"><xs:annotation><xs:documentation><name>Art der Teilnahme</name><definition>Auswahl Art der Teilnahme</definition><bezug>Art. 8 GG ; § 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G17005412" type="xfd:G17005412"><xs:annotation><xs:documentation><name>Anfangspunkt</name><bezug>Art. 8 GG ; § 11 VersFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G17005501" type="xfd:G17005501"><xs:annotation><xs:documentation><name>Streckenverlauf</name><definition>Angaben zum Streckenverlauf und ggf. Karte hinzufügen</definition><bezug>Art. 8 GG ; § 11 VersFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element maxOccurs="20" minOccurs="0" name="G17005411" type="xfd:G17005411"><xs:annotation><xs:documentation><name>Zwischenkundgebung</name><definition>Angaben zu möglichen Zwischenkundgebungen</definition><bezug>Art. 8 GG; § 11 VershFG SG
 +</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F17009218" type="xs:boolean"><xs:annotation><xs:documentation><name>Anfangspunkt = Endpunkt der Versammlung</name><definition>Wenn die Versammlung am gleichen Ort beginnt an dem Sie auch endet</definition><bezug>Art. 8 GG;§ 11 VershFG SG
 +</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="G17005413" type="xfd:G17005413"><xs:annotation><xs:documentation><name>Anschrift Inland Straßenanschrift (Ende)</name><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G17007205" type="xfd:G17007205"><xs:annotation><xs:documentation><name>Weitere Angaben </name><definition>Angaben zur geplanten Durchführung der Versammlung.</definition><bezug>Art. 8 GG ; §§ 9, 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17007211"><xs:sequence><xs:element name="F17011828" type="xs:string"><xs:annotation><xs:documentation><name>Thema des Aufzug</name><bezug>Art. 8 GG; § 11 VersFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011829" type="xs:string"><xs:annotation><xs:documentation><name>Beschreibung des Aufzug</name><bezug>Art. 8 GG ; § 11 VersFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G17005406" type="xfd:G17005406"><xs:annotation><xs:documentation><name>Zeitraum (Versammlungsanzeige)</name><definition>Gibt den Anfang und das Ende eines Zeitraums an.</definition><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011814" type="xs:string"><xs:annotation><xs:documentation><name>Grund für die verspätete Anmeldung</name><definition>Im Falle der nicht fristgemäßen Anmeldung der Versammlung - Optional Grund ergänzen. </definition><bezug>Art. 8 GG ; § 11 VershFG SH</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F17011815" type="xs:string"><xs:annotation><xs:documentation><name>Telefonnummer zur Rücksprache der verspäteten Anmeldung</name><bezug>Art. 8 GG ; § 11 VershFG SH iVm ITU E.123</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17005412"><xs:sequence><xs:element name="G60000086" type="xfd:G60000086"><xs:annotation><xs:documentation><name>Anschrift Inland Straßenanschrift</name><definition>Angaben für die Adressierung im Inland, soweit es sich um die Anschrift eines Gebäudes handelt.</definition><bezug>urn:xoevde:xunternehmen:kerndatenobjekt:anschriftinlandstrassenanschrift</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="G17005405" type="xfd:G17005405"><xs:annotation><xs:documentation><name>Karte Versammlungsort</name><definition>Anlage eines Kartenausschnitts</definition><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17005501"><xs:sequence><xs:element name="F17009317" type="xs:string"><xs:annotation><xs:documentation><name>Beschreibung Streckenverlauf </name><definition>Freitextfeld zum Streckenverlauf.</definition><bezug>Art. 8 GG ; § 11 VersFG SG
 +</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="G17007212" type="xfd:G17007212"><xs:annotation><xs:documentation><name>Karte Streckenverlauf</name><definition>Anlage eines Kartenausschnitts</definition><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17007212"><xs:sequence><xs:element maxOccurs="5" minOccurs="0" name="F60000296" type="xs:string"><xs:annotation><xs:documentation><name>Nachweis</name><definition>Nachweisdokument, um eine Information zu bestätigen, z.B. Sachkundenachweis.</definition></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17005411"><xs:sequence><xs:element name="G17004014" type="xfd:G17004014"><xs:annotation><xs:documentation><name>Zeitraum (Versammlungsanzeige)</name><definition>Gibt den Anfang und das Ende eines Zeitraums an.</definition><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="G60000086" type="xfd:G60000086"><xs:annotation><xs:documentation><name>Anschrift Inland Straßenanschrift</name><definition>Angaben für die Adressierung im Inland, soweit es sich um die Anschrift eines Gebäudes handelt.</definition><bezug>urn:xoevde:xunternehmen:kerndatenobjekt:anschriftinlandstrassenanschrift</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="G17005405" type="xfd:G17005405"><xs:annotation><xs:documentation><name>Karte Versammlungsort</name><definition>Anlage eines Kartenausschnitts</definition><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17004014"><xs:sequence><xs:element name="F60000048" type="xs:date"><xs:annotation><xs:documentation><name>Anfang</name><definition>Beinhaltet das Datum des Anfangs eines Zeitraums.</definition><bezug>urn:xoev-de:kosit:xoev:kernkomponente:zeitraum vom 31.08.2020</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F17001348" type="xs:decimal"><xs:annotation><xs:documentation><name>Uhrzeit Start</name><bezug>div.</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F60000049" type="xs:date"><xs:annotation><xs:documentation><name>Ende</name><definition>Beinhaltet das Datum des Ende eines Zeitraums.</definition><bezug>urn:xoev-de:kosit:xoev:kernkomponente:zeitraum vom 31.08.2020</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F17001349" type="xs:decimal"><xs:annotation><xs:documentation><name>Uhrzeit Abschluss</name><bezug>div.</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType><xs:complexType name="G17005413"><xs:sequence><xs:element name="F60000243" type="xs:string"><xs:annotation><xs:documentation><name>Straße</name><beschreibung>Kompatibilität zu EPA in TR XhD v 1.4 sollte Feldlänge min. 50. Bei XInneres 8 ist die Feldlänge <= 55 Zeichen.</beschreibung><bezug>XInneres.Meldeanschrift.strasse Version 8</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="F60000244" type="xs:string"><xs:annotation><xs:documentation><name>Hausnummer</name><beschreibung>Die Modellierung aus XInneres wurde nicht 1:1 übernommen, um die Komplexität für die Ausfüllenden nicht zu hoch zu setzen. Es wurde darauf verzichtet für das Ende von Hausnummernbereichen eigene Felder zu modellieren. Daher ist die Feldlänge hier heraufgesetzt und eine entsprechende Beschreibung wurde eingefügt. Die Feldlänge setzt sich aus der maximalen Feldlänge zweier Hausnummern (jeweils 4), zweier Buchstaben (jeweils 1) und eines Zeichen (-) zusammen.</beschreibung><definition>Es sind die Ziffern und Buchstabeneiner Hausnummer anzugeben. Eine Hausnummer dient der genauen Lokalisierung eines Grundstücks, Gebäudes oder Gebäudeteils (Eingang) in einer Straße. Geben Sie Hausnummernbereiche immer nach folgendem Beispiel ohne Leerzeichen an: 12a-14d</definition><bezug>XInneres.Meldeanschrift.hausnummer Version 8</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F60000246" type="xs:string"><xs:annotation><xs:documentation><name>Postleitzahl</name><definition>Es ist die Postleitzahl anzugeben.
 +
 +Der Typ dieses Elements ist eine Einschränkung des Basistyps String.Latin.</definition><bezug>XInneres.Meldeanschrift.postleitzahl Version 8</bezug></xs:documentation></xs:annotation></xs:element><xs:element name="F60000247" type="xs:string"><xs:annotation><xs:documentation><name>Ort</name><beschreibung>Kompatibilität zu EPA in TR XhD v 1.4 sollte Feldlänge min. 44. Laut PAuswV 2*25 = 50 Zeichen. Laut Xinneres.Meldeanschrift.Wohnort Version 8 = 40 Zeichen.
 +Laut BSI TR-03123 ≤ 105 Zeichen.</beschreibung><definition>Enthält den Namen eines Ortes (Gemeinde, Ortschaft oder Stadt).</definition><bezug>§ 5 (2) Nr. 9 PAuswG vom 21.6.2019; Anhang 3 Abschnitt 1 (Wohnort) PAuswV vom 28.9.2017; Tabelle 11 BSI TR-03123, Version 1.5.1; Xinneres.Meldeanschrift.Wohnort Version 8; XOEV.Kernkomponente.Anschrift.ort vom 31.01.2020</bezug></xs:documentation></xs:annotation></xs:element><xs:element minOccurs="0" name="G17005405" type="xfd:G17005405"><xs:annotation><xs:documentation><name>Karte Versammlungsort</name><definition>Anlage eines Kartenausschnitts</definition><bezug>Art. 8 GG; § 11 VershFG SG</bezug></xs:documentation></xs:annotation></xs:element></xs:sequence></xs:complexType></xs:schema> \ No newline at end of file diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceITCase.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceITCase.java new file mode 100644 index 0000000000000000000000000000000000000000..747c8a758932029c830174b894962c7afa933fe4 --- /dev/null +++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceITCase.java @@ -0,0 +1,192 @@ +package de.ozgcloud.eingang.fim; + +import de.ozgcloud.common.test.ITCase; +import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.IncomingFile; +import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; + +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; + +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.File; +import java.io.IOException; +import java.util.Map; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; + +@ITCase +@ActiveProfiles({ "itcase", "test" }) +@ImportAutoConfiguration +@SpringBootTest(classes= FimTestConfig.class) +public class FimServiceITCase { + + @Autowired + private FimService fimService; + + @Autowired + private FimBasedMapper fimBasedMapper; + + @Test + void shouldFailOnEmptyScheme() { + assertThatThrownBy(() -> { + final Document document = loadDocument("src/test/resources/test1.xml"); + fimService.transformDocument(document, FormData.builder().build()); + }).isInstanceOf(FimException.class).hasMessage("XML Document does not provide a scheme"); + } + + @Test + void shouldNoFindInvalidScheme() { + final FimScheme scheme = fimService.getSchemeForIdentifier("test"); + + assertThat(FimSchemeIdentifier.fromString("unknown")).isEqualTo(scheme.getIdentifier()); + } + + @Test + void shouldFindVersammlungsScheme() { + final FimScheme scheme = fimService.getSchemeForIdentifier("urn:xoev-de:xfall:standard:fim-s17000652_1.4"); + assertThat(scheme).isNotNull(); + } + + @Test + void shouldFindTest2Scheme() { + final FimScheme scheme = fimService.getSchemeForIdentifier("test2"); + assertThat(scheme).isNotNull(); + } + + @Test + void shouldTransformSimpleDocument() throws ParserConfigurationException, IOException, SAXException { + final Document document = loadDocument("src/test/resources/test2.xml"); + final FormData formData = fimService.transformDocument(document, FormData.builder().build()); + + final Map<String, Object> expected = Map.of( + "xs:fim.S1235", Map.of("label", "Testkey", "value", "Testvalue"), + "xs:fim.S1236", Map.of("label", "xs:fim.S1236", "value", "Testvalue 2") + ); + assertThat(expected).isEqualTo(formData.getFormData()); + } + + @Test + void shouldTransformDocument() throws ParserConfigurationException, IOException, SAXException { + final Document document = loadDocument("src/test/resources/S17000652V1.4_test01.xml"); + FormData formData = fimService.transformDocument(document, FormData.builder().build()); + + assertThat(formData).isNotNull(); + + final Map<String, Object> expected = Map.of( + "xfd:G17003529", Map.of( + "label","EfA|SH Standard", + "value", Map.of( + "xfd:G05001479", Map.of( + "label","nachrichtenkopf", + "value", Map.of( + "xfd:G05001480", Map.of( + "label","identifikation.nachricht", + "value", Map.of( + "xfd:F05002750", Map.of("label", "nachrichtenUUID", "value", "d447e43a-5723-4821-a170-cb44d2dbf143"), + "xfd:F05002751", Map.of("label", "erstellungszeitpunkt", "value", "2022-08-15T09:30:47"), + "xfd:F05002752", Map.of("label", "nachrichtentyp", "value", "fim.S17000652.17000652001004"), + "xfd:F05002753", Map.of("label", "dienstname", "value", "urn:fim:Versammlungsanzeige:1.4") + ) + ), + "xfd:G05001481", Map.of( + "label","Leser", + "value", Map.of( + "xfd:F05002754", Map.of("label", "Organisationsname", "value", "Celle"), + "xfd:F05002755", Map.of("label", "Organisationsschlüssel", "value", "vbe:010550120100"), + "xfd:F05002756", Map.of("label", "Kategorie", "value", "Versammlungsbehörde") + ) + ), + "xfd:G05001482", Map.of( + "label","Autor", + "value", Map.of( + "xfd:F05002754", Map.of("label", "Organisationsname", "value", "OSI-Onlinedienst Niedersachsen Versammlungsanzeige"), + "xfd:F05002755", Map.of("label", "Organisationsschlüssel", "value", "vbe:010550120100"), + "xfd:F05002756", Map.of("label", "Kategorie", "value", "Engagement- und Hobbyportal") + ) + ) + ) + ), + "xfd:F17005454", Map.of("label", "Datenschutzhinweis DSGVO", "value", "true"), + "xfd:F17005455", Map.of("label", "Zustimmung zu einem digitalen Bescheid", "value", "true"), + "xfd:F17005533", Map.of("label", "UUID", "value", "String") + ) + ), + "xfd:F17009191", Map.of("label", "Anzeige durch Person", "value", "true"), + "xfd:F17003371", Map.of("label", "Anzeigenart", "value", "String") + ); + + assertThat(expected).isEqualTo(formData.getFormData()); + } + + @Test + void shouldFallbackUnknownScheme() { + final FormData initialFormData = FormData.builder().attachment( + IncomingFileGroup.builder() + .file(IncomingFile.builder().name("src/test/resources/test3/Antrag.xml").file(new File("src/test/resources/test3/Antrag.xml")).build()) + .file(IncomingFile.builder().name("src/test/resources/test3/fim_xtaMetadata.xml").build()).build()).build(); + + FormData formData = fimBasedMapper.parseFormData(initialFormData); + + assertThat(formData).isNotNull(); + + final Map<String, Object> expected = Map.of( + "xfd:G17003529", Map.of( + "label","xfd:G17003529", + "value", Map.of( + "xfd:G05001479", Map.of( + "label","xfd:G05001479", + "value", Map.of( + "xfd:G05001480", Map.of( + "label","xfd:G05001480", + "value", Map.of( + "xfd:F05002750", Map.of("label", "xfd:F05002750", "value", "d447e43a-5723-4821-a170-cb44d2dbf143"), + "xfd:F05002751", Map.of("label", "xfd:F05002751", "value", "2022-08-15T09:30:47"), + "xfd:F05002752", Map.of("label", "xfd:F05002752", "value", "fim.S17000652.17000652001004"), + "xfd:F05002753", Map.of("label", "xfd:F05002753", "value", "urn:fim:Versammlungsanzeige:1.4") + ) + ), + "xfd:G05001481", Map.of( + "label","xfd:G05001481", + "value", Map.of( + "xfd:F05002754", Map.of("label", "xfd:F05002754", "value", "Celle"), + "xfd:F05002755", Map.of("label", "xfd:F05002755", "value", "vbe:010550120100"), + "xfd:F05002756", Map.of("label", "xfd:F05002756", "value", "Versammlungsbehörde") + ) + ), + "xfd:G05001482", Map.of( + "label","xfd:G05001482", + "value", Map.of( + "xfd:F05002754", Map.of("label", "xfd:F05002754", "value", "OSI-Onlinedienst Niedersachsen Versammlungsanzeige"), + "xfd:F05002755", Map.of("label", "xfd:F05002755", "value", "vbe:010550120100"), + "xfd:F05002756", Map.of("label", "xfd:F05002756", "value", "Engagement- und Hobbyportal") + ) + ) + ) + ), + "xfd:F17005454", Map.of("label", "xfd:F17005454", "value", "true"), + "xfd:F17005455", Map.of("label", "xfd:F17005455", "value", "true"), + "xfd:F17005533", Map.of("label", "xfd:F17005533", "value", "String") + ) + ), + "xfd:F17009191", Map.of("label", "xfd:F17009191", "value", "true"), + "xfd:F17003371", Map.of("label", "xfd:F17003371", "value", "String") + ); + + assertThat(expected).isEqualTo(formData.getFormData()); + } + + private Document loadDocument(final String path) throws ParserConfigurationException, IOException, SAXException { + final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + return builder.parse(new File(path)); + } +} diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimTestConfig.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimTestConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..f0a28ec4b7be509a0de6663720ab2f2964546065 --- /dev/null +++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimTestConfig.java @@ -0,0 +1,11 @@ +package de.ozgcloud.eingang.fim; + +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableAutoConfiguration +@ComponentScan("de.ozgcloud.eingang.fim") +public class FimTestConfig { +} diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/TestNonStandardAdapter.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/TestNonStandardAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..76b10a4ca043b8c31e834a9ea57f45cf6074fa95 --- /dev/null +++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/TestNonStandardAdapter.java @@ -0,0 +1,23 @@ +package de.ozgcloud.eingang.fim; + +import org.springframework.stereotype.Service; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.util.Optional; + +@Service +public class TestNonStandardAdapter extends FimSchemeAdapter { + + public FimSchemeIdentifier forIdentifier() { + return FimSchemeIdentifier.fromString("test2"); + } + + public Optional<String> getNameForElement(final Element element) { + final NodeList nameTags = element.getElementsByTagName("non-standard-name"); + if (nameTags.getLength() != 1) { + return Optional.empty(); + } + return Optional.ofNullable(nameTags.item(0).getTextContent()); + } +} diff --git a/fim-adapter/src/test/resources/S17000652V1.4_test01.xml b/fim-adapter/src/test/resources/S17000652V1.4_test01.xml new file mode 100644 index 0000000000000000000000000000000000000000..ca52ce6942015abe0833fb0c7849103070bf1ddf --- /dev/null +++ b/fim-adapter/src/test/resources/S17000652V1.4_test01.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--XML-Beispieldatei von XMLSpy generiert v2024 (x64) (http://www.altova.com)--> +<xfd:fim.S17000652.17000652001004 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xfd="urn:xoev-de:xfall:standard:fim-s17000652_1.4" xsi:schemaLocation="urn:xoev-de:xfall:standard:fim-s17000652_1.4 S17000652V1.4_xfall.xsd"> + <xfd:G17003529> + <xfd:G05001479> + <xfd:G05001480> + <xfd:F05002750>d447e43a-5723-4821-a170-cb44d2dbf143</xfd:F05002750> + <xfd:F05002751>2022-08-15T09:30:47</xfd:F05002751> + <xfd:F05002752>fim.S17000652.17000652001004</xfd:F05002752> + <xfd:F05002753>urn:fim:Versammlungsanzeige:1.4</xfd:F05002753> + </xfd:G05001480> + <xfd:G05001481> + <xfd:F05002754>Celle</xfd:F05002754> + <xfd:F05002755>vbe:010550120100</xfd:F05002755> + <xfd:F05002756>Versammlungsbehörde</xfd:F05002756> + </xfd:G05001481> + <xfd:G05001482> + <xfd:F05002754>OSI-Onlinedienst Niedersachsen Versammlungsanzeige</xfd:F05002754> + <xfd:F05002755>vbe:010550120100</xfd:F05002755> + <xfd:F05002756>Engagement- und Hobbyportal</xfd:F05002756> + </xfd:G05001482> + </xfd:G05001479> + <xfd:F17005454>true</xfd:F17005454> + <xfd:F17005455>true</xfd:F17005455> + <xfd:F17005533>String</xfd:F17005533> + </xfd:G17003529> + <xfd:F17009191>true</xfd:F17009191> + <xfd:F17003371>String</xfd:F17003371> +</xfd:fim.S17000652.17000652001004> diff --git a/fim-adapter/src/test/resources/application-test.yml b/fim-adapter/src/test/resources/application-test.yml new file mode 100644 index 0000000000000000000000000000000000000000..62a350e59592d16174ebee0bfd9d261b9f4e4942 --- /dev/null +++ b/fim-adapter/src/test/resources/application-test.yml @@ -0,0 +1,4 @@ +fim: + schemeLocations: + - src/main/resources/fim-s17000652_1.4/S17000652V1.4_xfall.xsd + - src/test/resources/test2/test2.xsd \ No newline at end of file diff --git a/fim-adapter/src/test/resources/test1.xml b/fim-adapter/src/test/resources/test1.xml new file mode 100644 index 0000000000000000000000000000000000000000..c6cdfdff3da2ba3dc0f88112f8cfaecc6075e731 --- /dev/null +++ b/fim-adapter/src/test/resources/test1.xml @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:fim> +</xs:fim> diff --git a/fim-adapter/src/test/resources/test2.xml b/fim-adapter/src/test/resources/test2.xml new file mode 100644 index 0000000000000000000000000000000000000000..6d219fb5cbb394f5d73e8a427f4b525f226c7168 --- /dev/null +++ b/fim-adapter/src/test/resources/test2.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:fim.S1234 xmlns:xfd="test2" xsi:schemaLocation="test2"> + <xs:fim.S1235>Testvalue</xs:fim.S1235> + <xs:fim.S1236>Testvalue 2</xs:fim.S1236> +</xs:fim.S1234> diff --git a/fim-adapter/src/test/resources/test2/test2.xsd b/fim-adapter/src/test/resources/test2/test2.xsd new file mode 100644 index 0000000000000000000000000000000000000000..6df2999b50614b63360e97517f4a880c136a8132 --- /dev/null +++ b/fim-adapter/src/test/resources/test2/test2.xsd @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns:xfd="test2" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="test2"> + <xs:element name="fim.S1234"> + <xs:annotation><xs:documentation><non-standard-name>Test-Fim-Data</non-standard-name></xs:documentation></xs:annotation> + </xs:element> + <xs:element name="fim.S1235"> + <xs:annotation><xs:documentation><non-standard-name>Testkey</non-standard-name></xs:documentation></xs:annotation> + </xs:element> +</xs:schema> \ No newline at end of file diff --git a/fim-adapter/src/test/resources/test3/Antrag.xml b/fim-adapter/src/test/resources/test3/Antrag.xml new file mode 100644 index 0000000000000000000000000000000000000000..461b8089fd72a1ed3087b78143020c3336ec5947 --- /dev/null +++ b/fim-adapter/src/test/resources/test3/Antrag.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--XML-Beispieldatei von XMLSpy generiert v2024 (x64) (http://www.altova.com)--> +<xfd:fim.S17000652.17000652001004 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xfd="empty" xsi:schemaLocation="empty"> + <xfd:G17003529> + <xfd:G05001479> + <xfd:G05001480> + <xfd:F05002750>d447e43a-5723-4821-a170-cb44d2dbf143</xfd:F05002750> + <xfd:F05002751>2022-08-15T09:30:47</xfd:F05002751> + <xfd:F05002752>fim.S17000652.17000652001004</xfd:F05002752> + <xfd:F05002753>urn:fim:Versammlungsanzeige:1.4</xfd:F05002753> + </xfd:G05001480> + <xfd:G05001481> + <xfd:F05002754>Celle</xfd:F05002754> + <xfd:F05002755>vbe:010550120100</xfd:F05002755> + <xfd:F05002756>Versammlungsbehörde</xfd:F05002756> + </xfd:G05001481> + <xfd:G05001482> + <xfd:F05002754>OSI-Onlinedienst Niedersachsen Versammlungsanzeige</xfd:F05002754> + <xfd:F05002755>vbe:010550120100</xfd:F05002755> + <xfd:F05002756>Engagement- und Hobbyportal</xfd:F05002756> + </xfd:G05001482> + </xfd:G05001479> + <xfd:F17005454>true</xfd:F17005454> + <xfd:F17005455>true</xfd:F17005455> + <xfd:F17005533>String</xfd:F17005533> + </xfd:G17003529> + <xfd:F17009191>true</xfd:F17009191> + <xfd:F17003371>String</xfd:F17003371> +</xfd:fim.S17000652.17000652001004> diff --git a/fim-adapter/src/test/resources/test3/fim_xtaMetadata.xml b/fim-adapter/src/test/resources/test3/fim_xtaMetadata.xml new file mode 100644 index 0000000000000000000000000000000000000000..645ff9797ce644d64e873d3afae523e60297fd1b --- /dev/null +++ b/fim-adapter/src/test/resources/test3/fim_xtaMetadata.xml @@ -0,0 +1,49 @@ +a<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"> + <s:Header> + <a:Action s:mustUnderstand="1">http://www.osci.eu/ws/2008/05/transport/urn/messageTypes/MsgBoxFetchRequest</a:Action> + <h:MsgBoxResponse MsgBoxRequestID="urn:de:xta:messageid:dataport_xta_210:3d280bfa-d790-4865-a6cf-f6656d7be13f" xmlns:h="http://www.osci.eu/ws/2008/05/transport" xmlns="http://www.osci.eu/ws/2008/05/transport" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <ItemsPending>0</ItemsPending> + </h:MsgBoxResponse> + <h:MessageMetaData xmlns:h="http://www.osci.eu/ws/2014/10/transport" xmlns="http://www.osci.eu/ws/2014/10/transport"> + <DeliveryAttributes> + <InitialSend>2024-03-21T08:56:35.214+01:00</InitialSend> + <Delivery>2024-03-21T08:56:38.417</Delivery> + </DeliveryAttributes> + <Originators> + <Author> + <Identifier type="xoev" name="Dataport" category="Engagement- und Hobbyportal">ehp:010100100000</Identifier> + </Author> + </Originators> + <Destinations> + <Reader> + <Identifier type="xoev" name="L100012.OE.279550874" category="Versammlungsbehörde">vbe:010550120100</Identifier> + </Reader> + </Destinations> + <MsgIdentification> + <MessageID xmlns="http://www.w3.org/2005/08/addressing">urn:de:xta:messageid:dataport_xta_210:3d280bfa-d790-4865-a6cf-f6656d7be13f</MessageID> + </MsgIdentification> + <Qualifier> + <Service>urn:fim:Versammlungsanzeige:1.4</Service> + <BusinessScenario> + <Defined listURI="urn:de:dataport:codeliste:business.scenario" listVersionID="1"> + <code xmlns="">FIM_DATA</code> + </Defined> + </BusinessScenario> + <MessageType listURI="urn:de:payloadSchema:elementName" listVersionID="1.0" payloadSchema="urn:xoev-de:xfall:standard:fim-s17000652_1.4"> + <code xmlns="">fim.S17000652.17000652001004</code> + <name xmlns="">fim.S17000652.17000652001004</name> + </MessageType> + </Qualifier> + <MsgSize>1738</MsgSize> + </h:MessageMetaData> + </s:Header> + <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <GenericContentContainer xmlns="http://xoev.de/transport/xta/211"> + <ContentContainer> + <Message contentType="application/xml" filename="Antrag.xml" size="1738"> + <xop:Include href="cid:http://tempuri.org/1/638485107771249372" xmlns:xop="http://www.w3.org/2004/08/xop/include"/> + </Message> + </ContentContainer> + </GenericContentContainer> + </s:Body> +</s:Envelope> \ No newline at end of file diff --git a/pom.xml b/pom.xml index 924130e8fb93d9a7df1e693ea6db89ff4f838f3c..ed5518c0385a60757eeafcaafa395876177c11d5 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,8 @@ <module>formcycle-adapter</module> <module>xta-adapter</module> <module>enterprise-adapter</module> - </modules> + <module>fim-adapter</module> + </modules> <properties> <vorgang-manager.version>2.7.0</vorgang-manager.version> @@ -84,6 +85,11 @@ <artifactId>semantik-adapter</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>de.ozgcloud.eingang</groupId> + <artifactId>fim-adapter</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager-interface</artifactId> diff --git a/xta-adapter/pom.xml b/xta-adapter/pom.xml index f3a787bc15f6dff133b8cf13801552945ea579fe..5f8d9118152d7af5d35f78f1c168438831ccfa80 100644 --- a/xta-adapter/pom.xml +++ b/xta-adapter/pom.xml @@ -42,6 +42,10 @@ <groupId>de.ozgcloud.eingang</groupId> <artifactId>semantik-adapter</artifactId> </dependency> + <dependency> + <groupId>de.ozgcloud.eingang</groupId> + <artifactId>fim-adapter</artifactId> + </dependency> <!--mapstruct--> <dependency> <groupId>org.mapstruct</groupId>