Как ссылаться на атрибут, который находится в базовой схеме XML - PullRequest
0 голосов
/ 16 июня 2020

У меня есть два файла схемы, один из которых является базовым, и в нем есть элемент ограничения, а в основной схеме есть элемент, который ссылается на базовый, проблема в том, что он дает следующую ошибку при открытии файла в Liquid studio 2020

Errors from schema validation

Файл базовой схемы (saudiedi.xsd)

<xs:schema targetNamespace="http://www.saudiedi.com/schema/sau" elementFormDefault="qualified" attributeFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sau="http://www.saudiedi.com/schema/sau" xmlns:cm="http://www.saudiedi.com/schema/common">
    <xs:import namespace="http://www.saudiedi.com/schema/common" schemaLocation="common.xsd"/>
    <xs:complexType name="abstractPayloadType" abstract="true">
        <xs:annotation>
            <xs:documentation>abstract payload for domain teams to define</xs:documentation>
        </xs:annotation>
    </xs:complexType>

    <xs:simpleType name="msgIDType">
        <xs:restriction base="xs:string">
            <xs:pattern value="\c{1,3}\d{1,14}"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="recordType">
        <xs:sequence>       
            <xs:element name="payload" type="sau:abstractPayloadType"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="saudiEDIType" abstract="true" block="extension">
        <xs:annotation>
            <xs:documentation>boilerplate for saudiedi documents</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="record" type="sau:recordType" maxOccurs="999"/>
        </xs:sequence>
        <xs:attribute name="docType" use="optional"/>
        <xs:attribute name="id" type="sau:msgIDType" use="optional"/>
        <xs:attribute name="msgType" use="optional"/>       
    </xs:complexType>


</xs:schema>

и файл основной схемы (TRFSTS.xsd)

<xsd:schema xmlns:trfSts="http://www.saudiedi.com/schema/trfMafSts" xmlns:cmSts="http://www.saudiedi.com/schema/cmSts" xmlns:trfMafCm="http://www.saudiedi.com/schema/trfMafCm" xmlns:sau="http://www.saudiedi.com/schema/sau" xmlns:cm="http://www.saudiedi.com/schema/common" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.saudiedi.com/schema/trfMafSts" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:import schemaLocation="../Common/common.xsd" namespace="http://www.saudiedi.com/schema/common" />
    <xsd:import schemaLocation="../Common/saudiedi.xsd" namespace="http://www.saudiedi.com/schema/sau" />
    <xsd:import schemaLocation="../Common/cmSts.xsd" namespace="http://www.saudiedi.com/schema/cmSts" />
    <xsd:import schemaLocation="trfMafCommon.xsd" namespace="http://www.saudiedi.com/schema/trfMafCm" />
    <!-- Payload implementation -->

    <!-- some elements are defined here but I didn't copy them for simplicity and the have nothing to do with the problem -->

    <xsd:element name="record" type="sau:recordType" />

    <xsd:attributeGroup name="id-ref">
        <xsd:attribute name="id" type="sau:msgIDType" use="required"/>
    </xsd:attributeGroup>

    <xsd:attributeGroup name="docType-ref">
        <xsd:attribute name="docType" fixed="MAF" use="required"/>
    </xsd:attributeGroup>

    <xsd:attributeGroup name="msgType-ref">
        <xsd:attribute name="msgType" fixed="TRFSTS" use="required"/>
    </xsd:attributeGroup>

    <!-- SaudiEdi Framework -->
    <xsd:complexType name="saudiediTrfStsType">
        <xsd:complexContent>
            <xsd:restriction base="sau:saudiEDIType">
                <xsd:sequence>
                    <xsd:element ref="trfSts:record" maxOccurs="999" />
                </xsd:sequence>
                <xsd:attributeGroup ref="trfSts:docType-ref"  />
                <xsd:attributeGroup ref="trfSts:id-ref"/>
                <xsd:attributeGroup ref="trfSts:msgType-ref"/>
            </xsd:restriction>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:element name="saudiEDI" type="trfSts:saudiediTrfStsType" />
</xsd:schema>

Любая помощь будет оценена

1 Ответ

0 голосов
/ 25 июля 2020

Думаю, вам следует упростить основной файл схемы. похоже, что вы пытаетесь использовать сложный тип, определенный в файле saudiedi.xsd, но вы пытаетесь обернуть его другим сложным типом и снова определяете группы атрибутов локально. это вызывает всевозможные ошибки.

Если вы удалите все это из основного файла схемы

<xsd:element name="record" type="sau:recordType" />

<xsd:attributeGroup name="id-ref">
  <xsd:attribute name="id" type="sau:msgIDType" use="required"/>
</xsd:attributeGroup>

<xsd:attributeGroup name="docType-ref">
  <xsd:attribute name="docType" fixed="MAF" use="required"/>
</xsd:attributeGroup>

<xsd:attributeGroup name="msgType-ref">
  <xsd:attribute name="msgType" fixed="TRFSTS" use="required"/>
</xsd:attributeGroup>

<!-- SaudiEdi Framework -->
<xsd:complexType name="saudiediTrfStsType">
  <xsd:complexContent>
    <xsd:restriction base="sau:saudiEDIType">
      <xsd:sequence>
        <xsd:element ref="trfSts:record" maxOccurs="999" />
      </xsd:sequence>
      <xsd:attributeGroup ref="trfSts:docType-ref"  />
      <xsd:attributeGroup ref="trfSts:id-ref"/>
      <xsd:attributeGroup ref="trfSts:msgType-ref"/>
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

и замените

<xsd:element name="saudiEDI" type="trfSts:saudiediTrfStsType" />

на это:

<xsd:element name="saudiEDI" type="sau:saudiEDIType" />

больше не будет ошибок, и я думаю, что это даст вам то, что вы изначально намеревались достичь.

...