Closed ExarcaFidalgo closed 4 years ago
Ahora si que hay modo de saber como eran en el original. Las referencias son meras asociaciones y las anidadas composiciones, señaladas ambas por el nombre de shape anónima. Lo arreglaré en el futuro inmediato.
Todo listo, en principio.
El ejemplo de referencia es el siguiente:
prefix : https://schema.org/ prefix xsd: http://www.w3.org/2001/XMLSchema# base http://example.org/
:Car { :name xsd:string ; :belongs @_:1 }
_:1 { a [ :Garage ] }
:User { :name xsd:string ; :worksFor { a [ :Company]; } }
:GreatGrandson { :parent { :parent { :parent . + } + }+ ; }
Tal y como está realizada la transformación a XMI, se plantean dos cuestiones:
Busco las formas con : (como la primera) y las contabilizo para generar las subclases correspondientes a las anidadas. Problema: esto asume que se harán en orden, lo que sería lo correcto: :1, :2... Pero si nos hacen la gracia de, tomando el ejemplo anterior, comenzar por :2 { a [ :Garage ] }, la primera forma generada sería asimismo _:2.
Puesto que los tipos de rdf, palabra clave a: :worksFor { a [ :Company]; } los expresábamos mediante herencia en UML, nos surge la cuestión de que no se haya definido tal forma -problema que no teníamos cuando haciamos xUser que heredaba de User. Eso nos generaba una generalización hacia la nada. Solución, recabar tales elementos y generar una forma (clase en UML) vacía. Naturalmente, esto va a ocasionar que a la hora de hacer XMI > SHEX, nos aparezca una forma vacía :Company, por ejemplo. Supongo que es plausible, habría de consultarlo.
En resumen, recuperando de XMI a SHEX, todas las anidadas toman la siguiente configuración. Nótesen las formas vacías.
prefix : https://schema.org/ prefix xsd: http://www.w3.org/2001/XMLSchema# base http://example.org/
:Car { :name xsd:string; :belongs @_:1; }
_:1 { a [:Garage]; }
:Garage { }
:User { :name xsd:string; :worksFor @_:2; }
_:2 { a [:Company]; }
:Company { }
:GreatGrandson { :parent @_:3 +; }
:3 { :parent @:4 +; }
_:4 { :parent . +; }
Mucho menos elegante pero correcto. El tema es que no tengo forma de saber cómo se guardaban en el original, porque en UML se traduce todo a asociaciones. Lo que si es posible sería hacerlas todas anidadas. Consultar qué prefieren.