es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Validación de una relación entre dos objetos XSD.

Soy nuevo en XSD y me pregunto cómo puedo validar si un tipo de relación entre dos entidades es el correcto.

El tipo “archimate:TechnologyService” sólo puede estar vinculado a “xsi:type=”archimate:TechnologyProcess”” con una relación “xsi:type=”archimate:RealizationRelationship””

Aquí está mi archivo XML (archimate):

Representando esto

Quiero invalidar esto:

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para validar si un tipo de relación entre dos entidades es el correcto en un XSD, se puede definir una restricción en el elemento de relación que especifique los valores permitidos para el atributo “xsi:type” en función del tipo de los elementos de origen y destino.

    Por ejemplo, en el caso del modelo ArchiMate proporcionado, se puede definir un tipo complejo para el elemento “RealizationRelationship” que restrinja el valor del atributo “xsi:type” a “archimate:RealizationRelationship” solo cuando el elemento de origen es de tipo “archimate:TechnologyProcess” y el elemento de destino es de tipo “archimate:TechnologyService”.

    Aquí te mostramos un ejemplo de cómo se puede definir esta restricción en un esquema XSD:

    <xs:complextype name="RealizationRelationship">
      <xs:complexcontent>
        <xs:extension base="archimate:Relationship">
          <xs:restriction base="archimate:Relationship">
            <xs:attribute name="xsi:type" use="required">
              <xs:simpletype>
                <xs:restriction base="xs:QName">
                  <xs:enumeration value="archimate:RealizationRelationship"></xs:enumeration>
                </xs:restriction>
              </xs:simpletype>
            </xs:attribute>
            <xs:assert test="(./@source/@xsi:type='archimate:TechnologyProcess') and (./@target/@xsi:type='archimate:TechnologyService')"></xs:assert>
          </xs:restriction>
        </xs:extension>
      </xs:complexcontent>
    </xs:complextype>
    

    El elemento “xs:assert” especifica una prueba que debe cumplirse para que el elemento se considere válido. En este caso, la prueba verifica que los atributos “source” y “target” tengan los tipos correctos para el elemento “RealizationRelationship”.

    Ten en cuenta que para usar este esquema para validación, debes especificar el prefijo de espacio de nombres “archimate” como mapeado al URI de espacio de nombres correspondiente utilizado en el documento XML de instancia.

Comments are closed.