ExarcaFidalgo / Shumlex

Integración ShEx - UML
MIT License
4 stars 0 forks source link

Cardinalidades en las expresiones #24

Closed ExarcaFidalgo closed 4 years ago

ExarcaFidalgo commented 4 years ago

Se puede aplicar cardinalidades a un conjunto de propiedades.

:User { schema:name xsd:string ; ( schema:givenName xsd:string ; schema:familyName xsd:string ) ? }

Por ejemplo, en el caso anterior User puede contener ambas propiedades, o ninguna.

ExarcaFidalgo commented 4 years ago

La idea que he tenido para solucionar esto es generar una subclase que contenga los atributos de cada conjunto. La clase original presenta una referencia a dicha subclase con la cardinalidad del conjunto. Admite x niveles.

He probado el siguiente ejemplo en la transformación Shex-XMI:

prefix : https://schema.org/ prefix xsd: http://www.w3.org/2001/XMLSchema# base http://example.org/

:User { :name xsd:string ; ( :givenName xsd:string ; :familyName xsd:string ) ?; ( :b :something ; :c xsd:string ) *; :owns @:Garage; }

:Garage { (AE86 xsd:string; ( Levin xsd:string; Cilinders xsd:int ) ?; ( Trueno xsd:string; Cilinders xsd:int ) ?; ) +

}

Y funciona correctamente.

ExarcaFidalgo commented 4 years ago

Si realizamos la operación de vuelta, genera lo siguiente:

prefix : https://schema.org/ prefix xsd: http://www.w3.org/2001/XMLSchema# base http://example.org/

:User { :name xsd:string; :User_1 @:User_1 ?; :User_2 @:User_2 *; :owns @:Garage; }

:User_1 { :givenName xsd:string; :familyName xsd:string; }

:User_2 { :b :something; :c xsd:string; }

:Garage { :Garage_1 @:Garage_1 +; }

:Garage_1 { AE86 xsd:string; :Garage_1_1 @:Garage_1_1 ?; :Garage_1_2 @:Garage_1_2 ?; }

:Garage_1_1 { Levin xsd:string; Cilinders xsd:int; }

:Garage_1_2 { Trueno xsd:string; Cilinders xsd:int; }

Una muestra más de lo correcto de nuestras asociaciones. Creo que es interesante guardarlo para el futuro. Idealmente reconoceríamos estas subclases para generar los conjuntos. (Ya adelanto que va a ser una operación compleja). Pero por ahora, genera algo correcto, así que es aceptable.

ExarcaFidalgo commented 4 years ago

Funciona en sendas direcciones.