Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update and improve json schemas to draft 7 #161

Conversation

dsifford
Copy link

@dsifford dsifford commented Dec 10, 2018

Follow up from #153, closes #127.

This should be backwards compatible with the old schemas. And because of that, there's some glaring issues with some of the fields and types scatter throughout that were grandfathered in. These I think should be discussed and improved upon in another PR.

If you'd like, copy and paste the csl-data.json schema to this validator to give it a shot. The csl-citation.json schema will not validate because it references the current broken schema url.

Let me know if you have any questions.

Ping: @rmzelle @dhimmel

@rmzelle
Copy link
Member

rmzelle commented Dec 10, 2018

Great, thanks. Will you address the merge conflict?

And can you briefly explain how you managed to upgrade the schemas? Are there software libraries to upgrade schemas to newer versions, or was it hand-work?

This should be backwards compatible with the old schemas. And because of that, there's some glaring issues with some of the fields and types scatter throughout that were grandfathered in. These I think should be discussed and improved upon in another PR.

Can you give an example of what I should be looking for in this PR?

@dsifford
Copy link
Author

Whoops, didn't see that there was a conflict.

And can you briefly explain how you managed to upgrade the schemas? Are there software libraries to upgrade schemas to newer versions, or was it hand-work?

Mostly by hand.. I used quicktype to quickly generate raw object definitions, but most of those had to be adjusted for better accuracy. Then I used the validator I liked above to double check that the object types checked out using a few known-accurate objects.

I also used a few schemas on schemastore.org for inspiration.

Can you give an example of what I should be looking for in this PR?

I'll annotate some lines where changes were made and where I think the schema can be improved in this PR after I fix the conflict.

Copy link
Author

@dsifford dsifford left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added a few comments. I probably forgot some stuff, but that should start the conversation for now...

"type": "array",
"items": {
"type": "string",
"format": "uri"
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed this to specifically require uri format.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This shouldn't be breaking so I'm gonna leave it.

csl-citation.json Show resolved Hide resolved
},
"additionalProperties": false
}
},
"type": "object",
"properties": {
"schema": {
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this necessary?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See https://github.com/rmzelle/ref-extractor/wiki#single-item-zotero-citation again. Zotero and Mendeley both reference the "csl-citation.json" schema in their embedded citation metadata.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right, but why cant they use JSON schema as it's indended and just reference the base schema using the top-level $id property? It seems redundant and unnecessary.

csl-citation.json Show resolved Hide resolved
},
"additionalProperties" : false
"required": ["schema", "citationID", "citationItems"],
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed this to include citationItems because it should always return an array, even if empty IMHO.

},
{
"properties": {
"circa": {
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Boolean? What is this exactly.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a toggle to indicate whether a date is uncertain. See http://docs.citationstyles.org/en/stable/specification.html#approximate-dates.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could this be narrowed to just boolean then?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like citeproc-js might be using "circa": 1, but yeah, just allowing a boolean would be neater.

csl-data.json Outdated
"type": [
"number"
],
"minimum": 1,
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed this to be a better spec fit.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's remove the "minimum"/"maximum" for "season" here. (I don't think the range makes sense, and it's unrelated to the schema draft update, so to be discussed separately)

"maxItems": 3
},
"maxItems": 2
"literal": {
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Made this an "either-or" between literal and the rest of the fields.

If no literal, then it should at least have family (see below)

"suffix": {
"type": "string"
},
"comma-suffix": {
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure what this is, nor static-ordering or parse-names

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These two attributes were cruft from the early days. I've removed them from fixtures in the test suite, they can be removed from the schema.

csl-data.json Outdated Show resolved Hide resolved
@dsifford
Copy link
Author

Just realized that I removed literal from the date definition because I thought they were the same thing.. That's not correct -- raw needs to be a parsable date (using ideally the json schema date-time RFC3339 type), whereas literal is a literal date string that isn't parsed or touched in any way.

I'll add that fix in after I hear back.

@dsifford
Copy link
Author

dsifford commented Dec 15, 2018

@rmzelle Yikes... also just realized that there are dozens (my mistake -- only a couple) of fields listed in the old csl-data.json that are not listed in csl.variables.rnc --- gotta add those in as well.

Specifically, these: journalAbbreviation, language, shortTitle,

@dsifford
Copy link
Author

@rmzelle What is the difference between shortTitle and title-short? Can one of these be axed?

@rmzelle
Copy link
Member

rmzelle commented Dec 16, 2018

there are ... fields listed in the old csl-data.json that are not listed in csl.variables.rnc --- gotta add those in as well. ... journalAbbreviation, language, shortTitle

None of these have a corresponding CSL variable with the same name.

"language" indicates the language of the item in question, and is used by the CSL processor to determine if special processing is necessary (see e.g. http://docs.citationstyles.org/en/stable/specification.html#non-english-items). We chose not to make it a CSL variable, since it generally wouldn't make much sense to print the field contents in a formatted reference. The field contents should ideally be an easily parseable locale code. And even if the field would contain a human readable language descriptor (e.g. "English"), we don't have the infrastructure in place to translate that for CSL styles set to non-English locales (e.g. to "Anglais" for French).

What is the difference between shortTitle and title-short? Can one of these be axed?

Regarding "journalAbbreviation" and "shortTitle", CSL originally only made the abbreviated "short" versions of "container-title" and "title" available in CSL styles through variable="container-title" form="short" and variable="title" form="short". The CSL JSON still needed to store these abbreviations somehow, and @fbennett came up with "journalAbbreviation" and "shortTitle". Only later, in CSL 1.0.1, did we allow these abbreviated versions to be called directly through variable="container-title-short" and variable="title-short" form="short". At that time, we added corresponding fields to CSL JSON but kept the old fields for backwards compatibility. We should drop these old fields eventually.

See also http://docs.citationstyles.org/en/stable/release-notes.html#new-variables-container-title-short-and-title-short

@rmzelle
Copy link
Member

rmzelle commented Dec 16, 2018

@dsifford, do you still have the versions of the CSL JSON schemas on hand right after you upgraded them from schema draft 3 to 7?

I'm happy to review any changes you'd like to suggest to the schema itself, but I much rather have separate pull requests for the schema upgrade and such changes.

@dsifford
Copy link
Author

Yep, I still have access to the old schemas through git. None of the changes (to my knowledge) in this PR currently will affect backwards compatibility. Though a couple will make checks a bit more strict (as noted above).

After I get around to adding in those 3 missing fields, do you have any other suggestions from there?

@rmzelle
Copy link
Member

rmzelle commented Dec 17, 2018

Though a couple will make checks a bit more strict (as noted above).

It would be better to put anything that is not purely related to the draft-3 to draft-7 upgrade in one or more separate pull request(s).

After I get around to adding in those 3 missing fields

Add which fields where?

@dsifford
Copy link
Author

Add which fields where?

journalAbbreviation, language, and shortTitle are still missing

@rmzelle
Copy link
Member

rmzelle commented Dec 17, 2018

journalAbbreviation, language, and shortTitle are still missing

They're in csl-data.json now:

"language": {

"journalAbbreviation": {

"shortTitle": {

@dsifford
Copy link
Author

Right, but I removed them in this PR. I have to add them back in.

@rmzelle
Copy link
Member

rmzelle commented Dec 17, 2018

Right, but I removed them in this PR. I have to add them back in.

Ah, okay. Yes. Sorry for the confusion.

@dhimmel
Copy link
Contributor

dhimmel commented Dec 17, 2018

I created a PR into this PR to update the Python test suite: dsifford#1.

In short, we must upgrade the version of the python jsonschema package to support draft-07. Also removed jsonref, because I believe @dsifford fixed the bug that required that package in the first place.

There is still one failure in test_data_schema_with_extra_property_fails because it seems extra properties are not causing validation failure. If that is intended, you should change the test.

@dsifford
Copy link
Author

Nice job @dhimmel... Just pushed 2 of the spec fixes that were talked about above that add back in a few fields I missed. Only thing left to do is rewind some things that aren't fully 100% backwards compatible and then we can probably merge this and open a new PR for draft-7 related schema updates.

Update tests for draft-07 JSON Schemas
"type": "string"
}
},
"additionalProperties" : false
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"additionalProperties" : false` is removed, which is why the test fails. Is that Intentional?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nope, it was not.

Although, just so you're aware, there are some large APIs that currently serve "CSL JSON" responses that are peppered with all kinds of additional properties, so not sure how that would possibly affect those API consumers/maintainers...

Here's an example of a typical response from CrossRef
{
    "indexed": {
        "date-parts": [[2018, 12, 18]],
        "date-time": "2018-12-18T19:41:10Z",
        "timestamp": 1545162070737
    },
    "reference-count": 0,
    "publisher": "BMJ",
    "license": [
        {
            "URL": "http://www.bmj.com/company/legal-information/terms-conditions/legal-information/tdm-licencepolicy",
            "start": {
                "date-parts": [[2018, 12, 13]],
                "date-time": "2018-12-13T00:00:00Z",
                "timestamp": 1544659200000
            },
            "delay-in-days": 0,
            "content-version": "tdm"
        }
    ],
    "content-domain": { "domain": ["bmj.com"], "crossmark-restriction": true },
    "abstract": "Abstract\n          \n            Objective\n            To determine if using a parachute prevents death or major traumatic injury when jumping from an aircraft.\n          \n          \n            Design\n            Randomized controlled trial.\n          \n          \n            Setting\n            Private or commercial aircraft between September 2017 and August 2018.\n          \n          \n            Participants\n            92 aircraft passengers aged 18 and over were screened for participation. 23 agreed to be enrolled and were randomized.\n          \n          \n            Intervention\n            Jumping from an aircraft (airplane or helicopter) with a parachute versus an empty backpack (unblinded).\n          \n          \n            Main outcome measures\n            Composite of death or major traumatic injury (defined by an Injury Severity Score over 15) upon impact with the ground measured immediately after landing.\n          \n          \n            Results\n            \n              Parachute use did not significantly reduce death or major injury (0% for parachute\n              v\n              0% for control; P>0.9). This finding was consistent across multiple subgroups. Compared with individuals screened but not enrolled, participants included in the study were on aircraft at significantly lower altitude (mean of 0.6 m for participants\n              v\n              mean of 9146 m for non-participants; P<0.001) and lower velocity (mean of 0 km/h\n              v\n              mean of 800 km/h; P<0.001).\n            \n          \n          \n            Conclusions\n            Parachute use did not reduce death or major traumatic injury when jumping from aircraft in the first randomized evaluation of this intervention. However, the trial was only able to enroll participants on small stationary aircraft on the ground, suggesting cautious extrapolation to high altitude jumps. When beliefs regarding the effectiveness of an intervention exist in the community, randomized trials might selectively enroll individuals with a lower perceived likelihood of benefit, thus diminishing the applicability of the results to clinical practice.\n          ",
    "DOI": "10.1136/bmj.k5094",
    "type": "article-journal",
    "created": {
        "date-parts": [[2018, 12, 13]],
        "date-time": "2018-12-13T22:34:15Z",
        "timestamp": 1544740455000
    },
    "page": "k5094",
    "update-policy": "http://dx.doi.org/10.1136/crossmarkpolicy",
    "source": "Crossref",
    "is-referenced-by-count": 0,
    "title": "Parachute use to prevent death and major trauma when jumping from aircraft: randomized controlled trial",
    "prefix": "10.1136",
    "author": [
        {
            "given": "Robert W",
            "family": "Yeh",
            "sequence": "first",
            "affiliation": []
        },
        {
            "given": "Linda R",
            "family": "Valsdottir",
            "sequence": "additional",
            "affiliation": []
        },
        {
            "given": "Michael W",
            "family": "Yeh",
            "sequence": "additional",
            "affiliation": []
        },
        {
            "given": "Changyu",
            "family": "Shen",
            "sequence": "additional",
            "affiliation": []
        },
        {
            "given": "Daniel B",
            "family": "Kramer",
            "sequence": "additional",
            "affiliation": []
        },
        {
            "given": "Jordan B",
            "family": "Strom",
            "sequence": "additional",
            "affiliation": []
        },
        {
            "given": "Eric A",
            "family": "Secemsky",
            "sequence": "additional",
            "affiliation": []
        },
        {
            "given": "Joanne L",
            "family": "Healy",
            "sequence": "additional",
            "affiliation": []
        },
        {
            "given": "Robert M",
            "family": "Domeier",
            "sequence": "additional",
            "affiliation": []
        },
        {
            "given": "Dhruv S",
            "family": "Kazi",
            "sequence": "additional",
            "affiliation": []
        },
        {
            "given": "Brahmajee K",
            "family": "Nallamothu",
            "sequence": "additional",
            "affiliation": []
        }
    ],
    "member": "239",
    "published-online": { "date-parts": [[2018, 12, 13]] },
    "container-title": "BMJ",
    "original-title": [],
    "language": "en",
    "link": [
        {
            "URL": "http://data.bmj.org/tdm/10.1136/bmj.k5094",
            "content-type": "unspecified",
            "content-version": "vor",
            "intended-application": "text-mining"
        },
        {
            "URL": "https://syndication.highwire.org/content/doi/10.1136/bmj.k5094",
            "content-type": "unspecified",
            "content-version": "vor",
            "intended-application": "similarity-checking"
        }
    ],
    "deposited": {
        "date-parts": [[2018, 12, 18]],
        "date-time": "2018-12-18T19:05:10Z",
        "timestamp": 1545159910000
    },
    "score": 1.0,
    "subtitle": [],
    "short-title": [],
    "issued": { "date-parts": [[2018, 12, 13]] },
    "references-count": 0,
    "alternative-id": ["10.1136/bmj.k5094"],
    "URL": "http://dx.doi.org/10.1136/bmj.k5094",
    "relation": {},
    "ISSN": ["0959-8138", "1756-1833"],
    "subject": ["General Medicine"],
    "container-title-short": "BMJ"
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so not sure how that would possibly affect those API consumers/maintainers...

Not at all... they currently return CSL that does not abide by the JSON Schema. I.e. this is the status quo. For Manubot, we actually use the JSON schema to filter the CSL returned by Crossref and remove all the crap.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we continue to use allOf and use refs as I do in this PR, then there's no way currently possible to have additionalProperties: false. So pick your poison. I personally think it's fine, but if you feel strongly about it, we'd have to scrap this.

cc: @rmzelle

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ping @rmzelle -- My comment above still holds relevance.

@rmzelle
Copy link
Member

rmzelle commented Jan 12, 2019

Only thing left to do is rewind some things that aren't fully 100% backwards compatible and then we can probably merge this and open a new PR for draft-7 related schema updates.

@dsifford, I haven't merged this yet since it's my understanding you still have some rewinding to do.

@dsifford
Copy link
Author

@rmzelle This should be good to go now, pending any objections by @dhimmel

Copy link
Member

@rmzelle rmzelle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review of csl-data.json. I checked all the changes made to csl-data.json by eye, and identified a few which should probably be put in a separate PR. Also a few suggestions on how to organize the definitions.

csl-data.json Outdated
"type": "number"
},
"maxItems": 3,
"minItems": 1
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's put this in a new pull request, as it makes the schema stricter.

"type": "array",
"items": {
"type": "number"
},
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is stricter than before (was "string" or "number"). Separate PR?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Zotero currently formats years as strings rather than integers during CSL export.

I think upgrading the schema draft is a great enhancement. However, I think it is crucial that backwards incompatible changes are not made in the initial draft change.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are a few things that got more strict that I didn't flag, like setting required fields for date-parts (either a "date-parts", "literal" or "raw" date), but those seemed pretty basic. Agree we should be careful here.

csl-data.json Outdated
"minItems": 1
},
"maxItems": 2,
"minItems": 1
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, minItems is stricter here.

csl-data.json Outdated
"season": {
"type": [
"number"
],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Value of "season" is stricter than before (was "string" or "number"). Separate PR?

},
{
"properties": {
"circa": {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like citeproc-js might be using "circa": 1, but yeah, just allowing a boolean would be neater.

csl-data.json Outdated
"type": [
"number"
],
"minimum": 1,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's remove the "minimum"/"maximum" for "season" here. (I don't think the range makes sense, and it's unrelated to the schema draft update, so to be discussed separately)

csl-data.json Outdated
"additionalProperties" : false
"required": [
"family"
]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure we can require "family".

I just checked and a Zotero user can store just a given name, which gives this as exported CSL JSON:

			{
				"family": "Nielsen",
				"given": "Jens"
			},
			{
				"family": "",
				"given": "bla"
			}

Other implementations might leave out the field entirely.

},
"language": {
"type": "string"
},
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it would make sense to carve out a separate definition for non-CSL variable metadata fields like "language"?

"type": "string"
},
"journalAbbreviation": {
"type": "string"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we should use a separate definition here too, to indicate that "journalAbbreviation" is deprecated in favor of "container-title-short". Idem for "shortTitle" and "title-short".

Copy link
Member

@rmzelle rmzelle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review of csl-citation.json.

"string",
"number"
]
},
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The original schema requires "id" for each citation item, which is a requirement we should keep.

]
},
"itemData": {
"$ref": "csl-data.json"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't tried using your version schema, but are you sure this shouldn't be "$ref": "csl-data.json/#/items" like in the original?

rmzelle added a commit that referenced this pull request Feb 21, 2019
Took changes to test suite from
#161 (and
https://github.com/citation-style-language/schema/pull/161/commits/b3543
2493553c10532dbbc9b7150c7ed303d2ddd specifically)
"version": {
"type": "string"
},
"year-suffix": {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a property of the item in rendered context. Any input value would be ignored.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So can this be removed?

"call-number": {
"type": "string"
},
"citation-label": {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is generated by processors, not set on input.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So can this be removed?

"citation-label": {
"type": "string"
},
"citation-number": {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a property of the item in context. Processors generate the value internally. Any input value will be ignored.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So can this be removed?

"event-place": {
"type": "string"
},
"first-reference-note-number": {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a processor-generated value that depends on the position of references in a document. Any value set on input will be ignored.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So can this be removed?

@dsifford
Copy link
Author

I'll try and look at this again this weekend and address issues raised. Sorry for stalling!

@rmzelle
Copy link
Member

rmzelle commented Apr 21, 2019

I'll try and look at this again this weekend and address issues raised. Sorry for stalling!

@dhimmel, I prepared a minimal update to draft 6 (it looks like no changes are necessary for draft 7) at #168, inspired by this PR. I would prefer to merge that, and then create one or more additional PRs to pull in improvements/changes proposed here (such as using proper definitions etc.).

@dsifford
Copy link
Author

dsifford commented May 1, 2019

@rmzelle Ah, shoot. I missed your message.

I went ahead and addressed all(?) of the comments/concerns raised here. It should theoretically be good to go. But your call.

@dhimmel
Copy link
Contributor

dhimmel commented May 1, 2019

Note @dsifford that I'm not a maintainer of this repo, but I appreciate the work you've put in, and hope to see as much of it integrated as makes sense.

Is it possible to split this PR up into smaller ones following #168? I think it will help with review and the pace of things, if the PRs are very focused and do one and only one thing. In addition, each change should indicate whether it functionally changes the schema or not.

It should theoretically be good to go.

Note that you have a test failure of test_data_schema_with_extra_property_fails. If you think think this constraint should be removed as per #161 (comment), you should either delete that test or add a skip decorator like:

@pytest.mark.skip(reason="Setting additionalProperties to false not possible with allOf")

@clbarnes
Copy link

Any blockers on getting this merged? I'm working on a downstream package and would prefer not to have to start everything over when the updated schema lands.

@bdarcus bdarcus closed this May 21, 2020
@bdarcus
Copy link
Member

bdarcus commented May 21, 2020

Closed this in favor of #168, which have now been merged.

Any missing pieces can be re-added via dedicated PRs.

@dsifford dsifford deleted the dsifford-json-schema-draft-7 branch May 21, 2020 20:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

JSON Schema (Draft 4)
6 participants