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

add various restricctions to distinct #378

Open
SmartLayer opened this issue Aug 7, 2020 · 8 comments
Open

add various restricctions to distinct #378

SmartLayer opened this issue Aug 7, 2020 · 8 comments
Assignees

Comments

@SmartLayer
Copy link

SmartLayer commented Aug 7, 2020

For a top-level <token> element, there can be many <attribute>. Current schema (in the distinct branch) allows any number of elements to have a boolean attribute distinct which defaults to false,

If it is set to true, we say that the attribute is distinct.

That means potentially developers can create a tokenscript file with multiple distinct attributes, which is not supported (at least not in this year)

Can you

  1. restrain it so that for all <attribute> under the <token> only one can have the attribute distinct with value true.

  2. for a TokenScript that didn't define <origins> under <token>,, require at least one of the <attribute> has distinct?

  3. distinct attribute is not allowed for attributes in <card>, only if it is directly in <token> (the global element <token>).

@SmartLayer SmartLayer changed the title allow distinct on one attribute restrict distinct to one attribute Aug 7, 2020
@SmartLayer
Copy link
Author

Once you have it, you can make PR from distinct branch to master.

@SmartLayer SmartLayer changed the title restrict distinct to one attribute add various restricctions to distinct Aug 7, 2020
@darakhbharat
Copy link
Contributor

I have investigated this and is very much possible to implement but not with XSD 1.0. We need to switch to XSD 1.1 and make use xsd:assert/ element to achieve all three requirements.

Right now it is not clear how we can switch to XSD 1.1. Just mentioning it <schema version="1.1" does not make the difference, we need to change the XSD processor setting to consider XSD version as 1.1.

From validate.sh file it is not clear which XSD processor we are using and whether it supports the XSD 1.1. Do you have any information so that I can move ahead?

XSD 1.1 is currently supported by Saxon and by Xerces J.
Reference - https://stackoverflow.com/questions/18782706/linux-command-line-tool-validating-xsd-1-1
constraints - https://www.xml.com/articles/2018/05/29/co-occurrence-cta-xsd/

@SmartLayer
Copy link
Author

Happy to change to XSD 1.1 and I believe we just need to change the schema version because I had the impression ./validate.sh (which actually uses a Makefile) already use an 1.1 procesor. Try it.

@darakhbharat
Copy link
Contributor

darakhbharat commented Aug 9, 2020 via email

@darakhbharat
Copy link
Contributor

darakhbharat commented Aug 10, 2020

After checking more on it found that we have - TokenScript-Examples/examples/2020-06.mk which decides the tool used for validating XML.

I have XMLLINT installed which is used for validating and that does not support XSD version 1.1.

Other tools here are XMLSECTOOL and XMLSEC, Need to check if those supports XSD 1.1? And if yes need to install on my machine.

2020-06.mk

ifeq ($(XMLSECTOOL),)
XMLSECTOOL=xmlsectool
endif

ifeq ($(XMLLINT),)
XMLLINT=xmllint
endif

ifeq ($(XMLSEC),)
XMLSEC=xmlsec1 # xmlsec for Linux/Windows
endif

@darakhbharat
Copy link
Contributor

  1. restrain it so that for all <attribute> under the <token> only one can have the attribute distinct with value true.
  2. for a TokenScript that didn't define <origins> under <token>,, require at least one of the <attribute> has distinct?
  3. distinct attribute is not allowed for attributes in <card>, only if it is directly in <token> (the global element <token>).

Item three from the list is completed and pushed to branch. This is the change link - c4ca79f

Now about action items 1 and 2 I have implemented simple working Java class to validate the XML using XSD 1.1. This Java code is based on xercesImpl.jar, attached with this update named XSDValidator.txt.

I have investigated and tried many versions of the XPath using XSD 1.1 but still did not get the perfect solution due to limited features of XSD 1.1. Will give one more try to find out the solution.
XSDValidator.txt

@darakhbharat darakhbharat mentioned this issue Sep 17, 2020
@darakhbharat
Copy link
Contributor

Other Details:
XSD 1.0 stable compatible change - c4ca79f
All changes resolving all mentioned issues - 73020c6

Created PR - #388

@SmartLayer
Copy link
Author

I'll close this issue when the tool mentioned in #395 is made that can do both validation and canonicalisation following the commandline syntax required there, and when you start a new PR which uncommented the two lines of code that uses schema 1.1

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

No branches or pull requests

2 participants