Code Monkey home page Code Monkey logo

schema-generator's People

Contributors

sstenchlak avatar

Watchers

 avatar  avatar  avatar

schema-generator's Issues

New class search case-sensitive

Using the "add root element" button, I got suggestions for "člověk" but not "Člověk", I would expect it to be case-insensitive.

Improve live preview

#32 is a very nice feature.
I would go one step further though and allow live preview of multiple artifacts at once.
I could e.g. select the artifacts I want "live previewed" here:
image
and have those in tabs in the right part of the screen where the live preview is.

Lost datatype in detail dialog

In the attribute detail dialog a user can set data type. If the dialogs is not saved and user navigate to another tab and back the data type value is lost.

Incorrect SPARQL query for getting CIM attributes

The current SPARQL query for loading attributes of a class in CIM has the following problems:

  1. Some attributes are missing because owl:onProperty z:je-vlastností has an inverse property owl:onProperty z:má-vlastnost which can also be used in CIM.
  2. Some attributes are missing because an attribute may inherit its class membership from its ancestor.
  3. It does return complex CIM attributes. A CIM attribute is complex if it comprises other CIM attributes or participate in relationships. At the PIM/PSM levels, complex CIM attributes will be treated as classes. There will be no distinction between CIM classes and complex CIM attributes.
  4. Attributes from (2) shall be presented to the user w.r.t. the inheritance hierarchy. This issue does not specify how this should be presented in the UI but extends the SPARQL query so that it will be possible.

First of all, the current SPARQL query for loading CIM attributes of a class needs to be extended so that it

  • returns attributes connected to a class in both directions (1)
  • returns attributes which inherit their membership (2)
  • ignores complex CIM attributes (3)
  • returns parent CIM attributes in the inheritance hierarchy (4)

(example for https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/silniční-vozidlo):

PREFIX z: <https://slovník.gov.cz/základní/pojem/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

CONSTRUCT {
    ?attribute a z:typ-vlastnosti ;
        rdfs:domain <https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/silniční-vozidlo> ;
        skos:prefLabel ?attributeLabel ;
        skos:definition ?attributeDefinition ;
        skos:inScheme ?attributeGlossary ;
        # (4) relationship to the parent attribute in the inheritance hierarchy START
        rdfs:subPropertyOf ?parentAttribute .
        # (4) relationship to the parent attribute in the inheritance hierarchy END
} WHERE {
    # (1) both directions START
    {
        ?attribute rdfs:subClassOf [
            owl:allValuesFrom <https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/silniční-vozidlo> ;
            owl:onProperty z:je-vlastností
        ] .
    } UNION {
        # (2) attributes inheriting their membership START
        ?ancestorAttribute rdfs:subClassOf [
            owl:allValuesFrom <https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/silniční-vozidlo> ;
            owl:onProperty z:je-vlastností
        ] .
        ?attribute rdfs:subClassOf+ ?ancestorAttribute .
        # (2) attributes inheriting their membership END
    } UNION {
       <https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/silniční-vozidlo> rdfs:subClassOf [
            owl:allValuesFrom  ?attribute ;
            owl:onProperty z:má-vlastnost
        ] .
    } UNION {
        # (2) attributes inheriting their membership START
       <https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/silniční-vozidlo> rdfs:subClassOf [
            owl:allValuesFrom  ?ancestorAttribute ;
            owl:onProperty z:má-vlastnost
        ] .
        ?attribute rdfs:subClassOf+ ?ancestorAttribute .
        # (2) attributes inheriting their membership END
    }
    # (1) both directions END

    ?attribute a z:typ-vlastnosti ;
        skos:prefLabel ?attributeLabel ;
        skos:inScheme ?attributeGlossary .

    # (3) ignore complex CIM attributes START
    OPTIONAL {
        SELECT ?attribute (COUNT(*) AS ?count)
        WHERE {
            {
                ?restriction rdfs:subClassOf [
                    owl:allValuesFrom ?attribute ;
                    owl:onProperty z:je-vlastností
                ]
            } UNION {
                ?restriction rdfs:subClassOf [
                    owl:allValuesFrom ?ancestor ;
                    owl:onProperty z:je-vlastností
                ] .
                ?attribute rdfs:subClassOf+ ?ancestor .
                FILTER (?ancestor NOT IN (<https://slovník.gov.cz/základní/pojem/vlastnost>, <https://slovník.gov.cz/základní/pojem/proměnný-prvek>, <https://slovník.gov.cz/základní/pojem/prvek>))
            } UNION {
                ?attribute rdfs:subClassOf [
                    owl:allValuesFrom [] ;
                    owl:onProperty z:má-vlastnost
                ] .
            } UNION {
                ?ancestor rdfs:subClassOf [
                    owl:allValuesFrom [] ;
                    owl:onProperty z:má-vlastnost
                ] .
                ?attribute rdfs:subClassOf+ ?ancestor .
                FILTER (?ancestor NOT IN (<https://slovník.gov.cz/základní/pojem/vlastnost>, <https://slovník.gov.cz/základní/pojem/proměnný-prvek>, <https://slovník.gov.cz/základní/pojem/prvek>))  
            }
        }
    }
    FILTER(BOUND(?count)=false)
    # (3) ignore complex CIM attributes END

    OPTIONAL { ?attribute skos:definition ?attributeDefinition }

    # (4) relationship to the parent attribute in the inheritance hierarchy START
    OPTIONAL {
        ?attribute rdfs:subClassOf ?parentAttribute .
        ?parentAttribute a z:typ-vlastnosti .
        FILTER(?parentAttribute != <https://slovník.gov.cz/základní/pojem/vlastnost>)
    }
    # (4) relationship to the parent attribute in the inheritance hierarchy END
}

Second, complex CIM attributes must be also returned. However, because they will be treated as classes, we need a separate SPARQL query which will return them as classes. The result of the SPARQL query will therefore be appended to the list of associations loaded from CIM. Each complex attribute is returned as an association and a class representing the complex attribute.

PREFIX z: <https://slovník.gov.cz/základní/pojem/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

CONSTRUCT {
    ?outwardsRelation a z:typ-vztahu ;
        rdfs:domain <https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/silniční-vozidlo> ;
        rdfs:range ?rangeElement ;
        skos:prefLabel ?outwardsRelationLabel ;
        skos:definition ?outwardsRelationDefinition ;
        skos:inScheme ?outwardsRelationGlossary ;
        # (4) relationship to the parent association in the inheritance hierarchy, only ?parentRelation returned also as ?outwardsRelation is valid. A ?parentRelation is returned as ?outwardsRelation iff it has the mandatory properties such as skos:prefLabel etc. START
        rdfs:subPropertyOf ?parentRelation .
        # (4) relationship to the parent association in the inheritance hierarchy END
    ?rangeElement a z:typ-objektu ;
        skos:prefLabel ?rangeLabel ;
        skos:definition ?rangeDefinition ;
        skos:inScheme ?rangeGlossary .
} WHERE {
    # (1) both directions START
    {
        ?attribute rdfs:subClassOf [
            owl:allValuesFrom <https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/silniční-vozidlo> ;
            owl:onProperty z:je-vlastností
        ] .
    } UNION {
        # (2) attributes inheriting their membership START
        ?ancestorAttribute rdfs:subClassOf [
            owl:allValuesFrom <https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/silniční-vozidlo> ;
            owl:onProperty z:je-vlastností
        ] .
        ?attribute rdfs:subClassOf+ ?ancestorAttribute .
        # (2) attributes inheriting their membership END
    } UNION {
       <https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/silniční-vozidlo> rdfs:subClassOf [
            owl:allValuesFrom  ?attribute ;
            owl:onProperty z:má-vlastnost
        ] .
    } UNION {
        # (2) attributes inheriting their membership START
       <https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/silniční-vozidlo> rdfs:subClassOf [
            owl:allValuesFrom  ?ancestorAttribute ;
            owl:onProperty z:má-vlastnost
        ] .
        ?attribute rdfs:subClassOf+ ?ancestorAttribute .
        # (2) attributes inheriting their membership END
    }
    # (1) both directions END

    ?attribute a z:typ-vlastnosti ;
        skos:prefLabel ?attributeLabel ;
        skos:inScheme ?attributeGlossary .

    # (3) only complex CIM attributes START
    {
        ?restriction rdfs:subClassOf [
            owl:allValuesFrom ?attribute ;
            owl:onProperty z:je-vlastností
        ]
    } UNION {
        ?restriction rdfs:subClassOf [
            owl:allValuesFrom ?ancestor ;
            owl:onProperty z:je-vlastností
        ] .
        ?attribute rdfs:subClassOf+ ?ancestor .
        FILTER (?ancestor NOT IN (<https://slovník.gov.cz/základní/pojem/vlastnost>, <https://slovník.gov.cz/základní/pojem/proměnný-prvek>, <https://slovník.gov.cz/základní/pojem/prvek>))
    } UNION {
        ?attribute rdfs:subClassOf [
            owl:allValuesFrom [] ;
            owl:onProperty z:má-vlastnost
        ] .
    } UNION {
        ?ancestor rdfs:subClassOf [
            owl:allValuesFrom [] ;
            owl:onProperty z:má-vlastnost
        ] .
        ?attribute rdfs:subClassOf+ ?ancestor .
        FILTER (?ancestor NOT IN (<https://slovník.gov.cz/základní/pojem/vlastnost>, <https://slovník.gov.cz/základní/pojem/proměnný-prvek>, <https://slovník.gov.cz/základní/pojem/prvek>))  
    }
    # (3) only complex CIM attributes END

    OPTIONAL { ?attribute skos:definition ?attributeDefinition }

    # (4) relationship to the parent attribute in the inheritance hierarchy START
    OPTIONAL {
        ?attribute rdfs:subClassOf ?parentAttribute .
        ?parentAttribute a z:typ-vlastnosti .
        FILTER(?parentAttribute != <https://slovník.gov.cz/základní/pojem/vlastnost>)
    }
    # (4) relationship to the parent attribute in the inheritance hierarchy END

    BIND(IRI(REPLACE(STR(?attribute), "/pojem/", "/pojem-z-cim-transformace/")) AS ?outwardsRelation)
    BIND(?attribute AS ?rangeElement)
    BIND(?attributeLabel AS ?outwardsRelationLabel)
    BIND(?attributeDefinition AS ?outwardsRelationDefinition)
    BIND(?attributeGlossary AS ?outwardsRelationGlossary)
    BIND(?parentAttribute AS ?parentRelation)
    BIND(?attributeLabel  AS ?rangeLabel)
    BIND(?attributeDefinition AS ?rangeDefinition)
    BIND(?attributeGlossary AS ?rangeGlossary)
}

Type "i" icon inside parentheses?

image

The second "i" icon relates to "Bezbariérový přístup", however, this is unclear because the parenthesis ends before the "i"

I am not sure about this, so it is up for discussion.

Add root element button

This button adds the root element only for empty diagram. Otherwise it replaces the root element and all the concent.

"Appearing" buttons not ideal

When I add the root like this:
image
It is really unclear what to do next, because the most important buttons are hidden and appear only when I hover over them (not knowing where they are).
image
I suggest keeping them visible at all times, perhaps without the text "EDIT", etc. i.e icon only, with EDIT etc. in tooltip

Showing inheritance ancestors in the list of available CIM attributes and associations

When showing the list of available CIM attributes and associations also inherited ones will be shown. The inheritance hierarchy can have many levels. The top levels consisting of elements from the basic vocabulary will not be considered.

The following SPARQL query returns the list of relevant inheritance ancestors.

PREFIX z: <https://slovník.gov.cz/základní/pojem/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

CONSTRUCT {
    <https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/osobní-automobil> rdfs:subClassOf ?ancestor .
    ?ancestor rdfs:subClassOf ?ancestorParent ;
        skos:prefLabel ?label ;
        skos:inScheme ?glossary ;
        skos:definition ?definition .
} WHERE {
    <https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/osobní-automobil> rdfs:subClassOf+ ?ancestor .
    FILTER NOT EXISTS {
        ?ancestor skos:inScheme <https://slovník.gov.cz/základní/glosář> .
    }

    OPTIONAL {
        ?ancestor rdfs:subClassOf ?ancestorParent .
        ?ancestorParent skos:inScheme [] .
        FILTER NOT EXISTS {
          ?ancestorParent skos:inScheme <https://slovník.gov.cz/základní/glosář> .
        }
    }

    ?ancestor 
        skos:prefLabel ?label ;
        skos:inScheme ?glossary .

    OPTIONAL { ?ancestor skos:definition ?definition }
}

An inherited attribute or association will be listed in the group for the respective inheritance ancestor. The set of all inheritance ancestors is reachable via https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/osobní-automobil rdfs:subClassOf * in the result. The ancestors will be ordered by the partial order given by the rest of the rdfs:subClassOf triples in the result, i.e. for A rdfs:subClassOf B, A will be before B in the list displayed to the user.

Add support for re-using existing PSM schemas for certain classes

When creating FOSes (OFN), e.g. https://ofn.gov.cz/sportoviště/2020-07-01/ - I need to be able to say that e.g. Kontakt is already modeled as a different PSM schema that I want to re-use as value of "má kontakt"
image

This includes the possibility of having a "library of PSM schemas".
A PSM schema can be re-used (linked) every time the range of a relationship in a newly created PSM schema is a class used as a root of the existing PSM schema.

Filtering attributes and associations by vocabulary

There can be many attributes and associations in the surroundings of a class. It is necessary to filter them by their vocabulary.

So, in

image

add a possibility to select vocabularies to filter displayed attributes and associations. There will be a list of vocabularies of the nodes in the surroundings. For each vocabulary, there will be its type and label. The vocabularies will be ordered by type (veřejné správy > legislativní > agendový > datový > generický) and the by label.

By default, all vocabularies are selected.

Indicate code list

Like this:
image

  • icon "list"
  • color like any other property
  • no hierarchy

It could also be postfixed with "Code list item/Položka číselníku" type, to make it consistent with datatyped properties

New class search status

There is no visual indication of search in the UI, thus the user does not know whether the application is still fetching data or not. As a results I do not know whether there is no result to my query or I should wait a little bit longer.

Update local deployment instructions + link to online deployment

Currently, I was unable to deploy the app locally. After clone, according to README.md, I ran yarn start, which resulted in error with missing react-scripts.
I ran npm ci (not in instructions), then yarn start - something did run, but the app failed on missing model-driven-data.

Therefore, the local deployment instructions should be updated so that anyone is able to deploy the app.

In addition, the link https://kodi-schema-generator.netlify.app/ should be added to the repository information, so that it can be easily found.

Incorrect SPARQL query for getting CIM associations

The current SPARQL queries for loading associations of a class in CIM have the following problems:

  1. Some associations are missing because an association may inherit its class membership from its ancestor. This is possible in both directions, either the current class is the domain of an association or it is its range.
  2. Some associations are missing because an association does not have specified the other class associated with the current one. The other class is inherited from its ancestor. Because we suppose that there is one and only one such other class, only the closest ancestor with the other class specified must be considered.
  3. Associations from (1) shall be presented to the user w.r.t. the inheritance hierarchy. This issue does not specify how this should be presented in the UI but extends the SPARQL query so that it will be possible.

Query for loading associations having the current element as domain (example https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/silniční-vozidlo, https://slovník.gov.cz/legislativní/sbírka/361/2000/pojem/vozidlo is also a good example):

PREFIX z: <https://slovník.gov.cz/základní/pojem/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

CONSTRUCT {
    ?outwardsRelation a z:typ-vztahu ;
        rdfs:domain <https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/silniční-vozidlo> ;
        rdfs:range ?rangeElement ;
        skos:prefLabel ?outwardsRelationLabel ;
        skos:definition ?outwardsRelationDefinition ;
        skos:inScheme ?outwardsRelationGlossary ;
        # (4) relationship to the parent association in the inheritance hierarchy, only ?parentRelation returned also as ?outwardsRelation is valid. A ?parentRelation is returned as ?outwardsRelation iff it has the mandatory properties such as skos:prefLabel etc. START
        rdfs:subPropertyOf ?parentRelation .
        # (4) relationship to the parent association in the inheritance hierarchy END
    ?rangeElement a z:typ-objektu ;
        skos:prefLabel ?rangeLabel ;
        skos:definition ?rangeDefinition ;
        skos:inScheme ?rangeGlossary .
} WHERE {
    ?outwardsRelation a z:typ-vztahu ;
        skos:prefLabel ?outwardsRelationLabel ;
        skos:inScheme ?outwardsRelationGlossary .

    {
        ?outwardsRelation rdfs:subClassOf [
            owl:allValuesFrom <https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/silniční-vozidlo> ;
            owl:onProperty z:má-vztažený-prvek-1 
        ]
    } UNION {
        # (1) associations inheriting their membership START
        ?ancestorOutwardsRelation rdfs:subClassOf [
            owl:allValuesFrom <https://slovník.gov.cz/legislativní/sbírka/56/2001/pojem/silniční-vozidlo> ;
            owl:onProperty z:má-vztažený-prvek-1 
        ] .
        ?outwardsRelation rdfs:subClassOf+ ?ancestorOutwardsRelation .
        # (1) associations inheriting their membership END
    }

    {
        ?outwardsRelation rdfs:subClassOf [
            owl:allValuesFrom ?rangeElement ;
            owl:onProperty z:má-vztažený-prvek-2
        ]
    # (2) associations inheriting their other class START
    } UNION {
        # (2.1) associations inheriting their other class from an inheritance parent START
        ?outwardsRelation rdfs:subClassOf/rdfs:subClassOf [
            owl:allValuesFrom ?rangeElement ;
            owl:onProperty z:má-vztažený-prvek-2
        ]
        FILTER NOT EXISTS {
            ?outwardsRelation rdfs:subClassOf/owl:onProperty z:má-vztažený-prvek-2 .
        }
        # (2.1) associations inheriting their other class from an inheritance parent END
    } UNION {
        # (2.2) associations inheriting their other class from an inheritance grand^{+}parent START
        ### This branch is non-optimal. If query executions are too slow, this branch can be removed. The result will not be complete but this branch covers quite rare cases.
        ?outwardsRelation rdfs:subClassOf+/rdfs:subClassOf ?rangeDefinition .
        ?rangeDefinition owl:allValuesFrom ?rangeElement ;
            owl:onProperty z:má-vztažený-prvek-2 .
        FILTER NOT EXISTS {
            ?outwardsRelation rdfs:subClassOf+ ?specificOutwardsRelation .
            ?specificOutwardsRelation rdfs:subClassOf+ ?rangeDefinition ;
                rdfs:subClassOf ?rangeDefinition1 .
            ?rangeDefinition1 owl:onProperty z:má-vztažený-prvek-2 .
        }
        # (2.2) associations inheriting their other class from an inheritance grand^{+}parent END
    }
    # (2) associations inheriting their other class END

    OPTIONAL { ?outwardsRelation skos:definition ?outwardsRelationDefinition }

    ?rangeElement skos:prefLabel ?rangeLabel ;
        skos:inScheme ?rangeGlossary .

    OPTIONAL { ?rangeElement skos:definition ?rangeDefinition }

    # (4) relationship to the parent association in the inheritance hierarchy START
    OPTIONAL {
        ?outwardsRelation rdfs:subClassOf ?parentRelation .
        ?parentRelation a z:typ-vztahu.
        FILTER(?parentRelation != <https://slovník.gov.cz/základní/pojem/vztah>)
    }
    # (4) relationship to the parent association in the inheritance hierarchy END
}

And for range symmetrically:

PREFIX z: <https://slovník.gov.cz/základní/pojem/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>

CONSTRUCT {
    ?inwardsRelation a z:typ-vztahu ;
        rdfs:domain ?domainElement ;
        rdfs:range <https://slovník.gov.cz/legislativní/sbírka/361/2000/pojem/vozidlo> ;
        skos:prefLabel ?inwardsRelationLabel ;
        skos:definition ?inwardsRelationDefinition ;
        skos:inScheme ?inwardsRelationGlossary ;
        rdfs:subPropertyOf ?parentRelation .
    ?domainElement a z:typ-objektu ;
        skos:prefLabel ?domainLabel ;
        skos:definition ?domainDefinition ;
        skos:inScheme ?domainGlossary .
} WHERE {

    ?inwardsRelation a z:typ-vztahu ;
        skos:prefLabel ?inwardsRelationLabel ;
        skos:inScheme ?inwardsRelationGlossary .

    {
        ?inwardsRelation rdfs:subClassOf ?rangeDefinition .
        ?rangeDefinition owl:allValuesFrom <https://slovník.gov.cz/legislativní/sbírka/361/2000/pojem/vozidlo> ;
            owl:onProperty z:má-vztažený-prvek-2 .
    } UNION {
        ?ancestorInwardsRelation rdfs:subClassOf [
            owl:allValuesFrom <https://slovník.gov.cz/legislativní/sbírka/361/2000/pojem/vozidlo> ;
            owl:onProperty z:má-vztažený-prvek-2
        ] .
        ?inwardsRelation rdfs:subClassOf+ ?ancestorInwardsRelation .
    }

    {
        ?inwardsRelation rdfs:subClassOf ?domainDefinition .
        ?domainDefinition owl:allValuesFrom ?domainElement ;
            owl:onProperty z:má-vztažený-prvek-1 .
    } UNION {
        ?inwardsRelation rdfs:subClassOf/rdfs:subClassOf ?domainDefinition .
        ?rangeDefinition owl:allValuesFrom ?domainElement ;
            owl:onProperty z:má-vztažený-prvek-1 .
        FILTER NOT EXISTS {
            ?inwardsRelation rdfs:subClassOf/owl:onProperty z:má-vztažený-prvek-1 .
        }
    } UNION {
        ?inwardsRelation rdfs:subClassOf+/rdfs:subClassOf ?domainDefinition .
        ?rangeDefinition owl:allValuesFrom ?domainElement ;
            owl:onProperty z:má-vztažený-prvek-1 .
        FILTER NOT EXISTS {
            ?inwardsRelation rdfs:subClassOf+ ?specificInwardsRelation .
            ?specificInwardsRelation rdfs:subClassOf+ ?domainDefinition ;
                rdfs:subClassOf ?domainDefinition1 .
            ?domainDefinition1 owl:onProperty z:má-vztažený-prvek-1 .
        }
    }

    OPTIONAL { ?inwardsRelation skos:definition ?inwardsRelationDefinition }

    ?domainElement skos:prefLabel ?domainLabel ;
        skos:inScheme ?domainGlossary .

    OPTIONAL { ?domainElement skos:definition ?domainDefinition }

    OPTIONAL {
        ?inwardsRelation rdfs:subClassOf ?parentRelation .
        ?parentRelation a z:typ-vztahu.
        FILTER(?parentRelation != <https://slovník.gov.cz/základní/pojem/vztah>)
    }
}

Attribute line

A line for each attribute is in following format:

název číselníku (nazev-ciselniku): http://www.w3.org/2001/XMLSchema#string 

it should be

název číselníku (nazev-ciselniku) : xsd:string
  • Add space before double dot
  • Use type label instead of IRI

Default label for PSM Class

As of now when adding new class there is no way how to specify a label. Thus I'm left with [no label] - PSM class . There should be a way how to specify the label or the message should be removed - as it adds no information and I have no way to do something about it.

Update SPARQL filtering conditions for class properties

SPARQL queries shall return attributes/associations which inherit from attributes/associations associated with a class. However only when these inheriting attributes/associations do not have their own domain/range.

E.g. it is necessary to add the following condition to the SPARQL query which returns attributes of a class:

   ?ancestorAttribute rdfs:subClassOf [
     owl:allValuesFrom <https://slovník.gov.cz/veřejný-sektor/pojem/právnická-osoba> ;
     owl:onProperty z:je-vlastností
   ] .
   ?attribute rdfs:subClassOf+ ?ancestorAttribute .
   **FILTER NOT EXISTS {
     ?attribute rdfs:subClassOf [
       owl:allValuesFrom [] ;
       owl:onProperty z:je-vlastností
     ] .
   }**

Removing a datatype from attribute sets it to ""

Normally, a newly added attribute has "dataTypes": [{"dataType": null}] when exported as a model, but when a datatype is added (as a well-known URI or text) and then removed, the object model shows "dataTypes": [{"dataType": ""}], i.e. an empty string instead of null. No indication of this difference is visible to the user, so it would be better to generate null whenever the string is empty.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.