@@ -2070,25 +2070,34 @@ scalar UUID @specifiedBy(url: "https://tools.ietf.org/html/rfc4122")
20702070
20712071## Schema Coordinates
20722072
2073- Schema Coordinates are human readable strings that uniquely identify a specific
2074- type , field , argument , enum value , or directive defined in a GraphQL Schema .
2075-
20762073SchemaCoordinate :
20772074 - Name
20782075 - Name . Name
20792076 - Name . Name ( Name : )
20802077 - @ Name
20812078 - @ Name ( Name : )
20822079
2083- Note : A {SchemaCoordinate } is not a definition within a GraphQL {Document }.
2084- Schema coordinates are a separate syntax , intended to be used by tools to
2085- reference types and fields or other schema elements . For example : within
2086- documentation , or as lookup keys a service uses to track usage frequency .
2080+ :: A *schema coordinate * is a human readable string that uniquely identifies a
2081+ *schema element * within a GraphQL Schema .
2082+
2083+ :: A *schema element * is a specific instance of a named type , type field ,
2084+ input field , enum value , field argument , directive , or directive argument .
2085+
2086+ *Schema coordinate *s are always unique . Each *schema element * may be referenced
2087+ by exactly one possible schema coordinate .
2088+
2089+ A *schema coordinate * may refer to both defined and built -in *schema element *s .
2090+ For example , `String ` and `@deprecated (reason :)` are both valid schema coordinates .
2091+
2092+ Note : A {SchemaCoordinate } is not a definition within a GraphQL {Document }, but
2093+ a separate stand -alone grammar , intended to be used by tools to reference types ,
2094+ fields , and other *schema element *s . For example as references within
2095+ documentation , or as lookup keys in usage frequency tracking .
20872096
20882097**Semantics **
20892098
2090- A schema coordinate ' s semantics assume they are interpreted in the context of
2091- a single GraphQL {schema }.
2099+ To refer to a * schema element *, a * schema coordinate * must be interpreted in the
2100+ context of a GraphQL {schema }.
20922101
20932102SchemaCoordinate : Name
20942103 1. Let {typeName } be the value of the first {Name }.
@@ -2131,97 +2140,40 @@ SchemaCoordinate : @ Name ( Name : )
21312140
21322141**Examples **
21332142
2134- This section shows example coordinates for the possible schema element types
2135- this syntax covers .
2136-
2137- All examples below will assume the following schema :
2138-
2139- ```graphql example
2140- directive @private (scope : String !) on FIELD
2141-
2142- scalar DateTime
2143-
2144- input ReviewInput {
2145- content : String
2146- author : String
2147- businessId : String
2148- }
2149-
2150- interface Address {
2151- city : String
2152- }
2143+ | Element Kind | *Schema Coordinate * | *Schema Element * |
2144+ | ------------------ | -------------------------------- | ----------------------------------------------------------------------- |
2145+ | Named Type | `Business ` | `Business ` type |
2146+ | Type Field | `Business .name ` | `name ` field on the `Business ` type |
2147+ | Input Field | `SearchCriteria .filter ` | `filter ` input field on the `SearchCriteria ` input object type |
2148+ | Enum Value | `SearchFilter .OPEN_NOW ` | `OPEN_NOW ` value of the `SearchFilter ` enum |
2149+ | Field Argument | `Query .searchBusiness (criteria :)`| `criteria ` argument on the `searchBusiness ` field on the `Query ` type |
2150+ | Directive | `@private ` | `@private ` directive |
2151+ | Directive Argument | `@private (scope :)` | `scope ` argument on the `@private ` directive |
21532152
2154- type User implements Address {
2155- name : String
2156- reviewCount : Int
2157- friends : [User ]
2158- email : String @private (scope : " loggedIn" )
2159- city : String
2160- }
2153+ The table above shows an example of a *schema coordinate * for every kind of
2154+ *schema element * based on the schema below .
21612155
2162- type Business implements Address {
2163- name : String
2164- address : String
2165- rating : Int
2166- city : String
2167- reviews : [Review ]
2168- createdAt : DateTime
2156+ ```graphql
2157+ type Query {
2158+ searchBusiness (criteria : SearchCriteria !): [Business ]
21692159}
21702160
2171- type Review {
2172- content : String
2173- author : User
2174- business : Business
2175- createdAt : DateTime
2161+ input SearchCriteria {
2162+ name : String
2163+ filter : SearchFilter
21762164}
21772165
2178- union Entity = User | Business | Review
2179-
21802166enum SearchFilter {
2181- OPEN_NOW
2182- DELIVERS_TAKEOUT
2183- VEGETARIAN_MENU
2184- }
2185-
2186- type Query {
2187- searchBusiness (name : String !, filter : SearchFilter ): Business
2167+ OPEN_NOW
2168+ DELIVERS_TAKEOUT
2169+ VEGETARIAN_MENU
21882170}
21892171
2190- type Mutation {
2191- addReview (input : ReviewInput !): Review
2172+ type Business {
2173+ id : ID
2174+ name : String
2175+ email : String @private (scope : " loggedIn" )
21922176}
2193- ```
21942177
2195- The following table shows examples of Schema Coordinates for elements in the
2196- schema above :
2197-
2198- | Schema Coordinate | Description |
2199- | ------------------------------ | ------------------------------------------------------------------- |
2200- | `Business ` | `Business ` type |
2201- | `User .name ` | `name ` field on the `User ` type |
2202- | `Query .searchBusiness (name :)` | `name ` argument on the `searchBusiness ` field on the `Query ` type |
2203- | `SearchFilter ` | `SearchFilter ` enum |
2204- | `SearchFilter .OPEN_NOW ` | `OPEN_NOW ` value of the `SearchFilter ` enum |
2205- | `@private ` | `@private ` directive definition |
2206- | `@private (scope :)` | `scope ` argument on the `@private ` directive definition |
2207- | `Address ` | `Address ` interface |
2208- | `Address .city ` | `city ` field on the `Address ` interface |
2209- | `ReviewInput ` | `ReviewInput ` input object type |
2210- | `ReviewInput .author ` | `author ` input field on the `ReviewInput ` input object type |
2211- | `Entity ` | `Entity ` union definition |
2212- | `DateTime ` | Custom `DateTime ` scalar type |
2213- | `String ` | Built -in `String ` scalar type |
2214-
2215- Schema Coordinates are always unique . Each type , field , argument , enum value , or
2216- directive may be referenced by exactly one possible Schema Coordinate .
2217-
2218- For example , the following is *not * a valid Schema Coordinate :
2219-
2220- ```graphql counter -example
2221- Entity .Business
2178+ directive @private (scope : String !) on FIELD
22222179```
2223-
2224- In this counter example , `Entity .Business ` is redundant since `Business ` already
2225- uniquely identifies the Business type . Such redundancy is disallowed by this
2226- spec - every type , field , field argument , enum value , directive , and directive
2227- argument has exactly one canonical Schema Coordinate .
0 commit comments