TokenScript icon indicating copy to clipboard operation
TokenScript copied to clipboard

add various restricctions to `distinct`

Open SmartLayer opened this issue 3 years ago • 8 comments

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 avatar Aug 07 '20 02:08 SmartLayer

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

SmartLayer avatar Aug 07 '20 09:08 SmartLayer

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/

darakhbharat avatar Aug 09 '20 10:08 darakhbharat

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.

SmartLayer avatar Aug 09 '20 11:08 SmartLayer

Yes tried it and it is not working with new XSD 1.1 elements.

ERROR:

$ TOKENSCRIPT_SCHEMA=/cygdrive/h/TokenScript/TokenScript/schema/tokenscript.xsd ./validate.sh erc20/AAVE/aDAI.xml Element '{http://www.w3.org/2001/XMLSchema}complexType': The content is not valid. Expected is (annotation?, (simpleContent | complexContent | ((group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?)))). WXS schema /cygdrive/h/TokenScript/TokenScript/schema/tokenscript.xsd failed to compile make: *** [../../2020-06.mk:35: aDAI.canonicalized.xml] Error 1

On Sun, Aug 9, 2020 at 4:43 PM Weiwu Zhang [email protected] wrote:

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.

— You are receiving this because you were assigned. Reply to this email directly, view it on GitHub https://github.com/AlphaWallet/TokenScript/issues/378#issuecomment-671038784, or unsubscribe https://github.com/notifications/unsubscribe-auth/AE47O3KNHC3AFRNBCDX5D3TR72AG3ANCNFSM4PXGBQEA .

darakhbharat avatar Aug 09 '20 11:08 darakhbharat

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 avatar Aug 10 '20 19:08 darakhbharat

  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 - https://github.com/AlphaWallet/TokenScript/commit/c4ca79ff4afcfd330958021eb0273ad987fd5724

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 avatar Sep 06 '20 17:09 darakhbharat

Other Details: XSD 1.0 stable compatible change - https://github.com/AlphaWallet/TokenScript/commit/c4ca79ff4afcfd330958021eb0273ad987fd5724 All changes resolving all mentioned issues - https://github.com/AlphaWallet/TokenScript/commit/73020c6ef586f19896ebbb43dad4f30266260c70

Created PR - https://github.com/AlphaWallet/TokenScript/pull/388

darakhbharat avatar Sep 17 '20 10:09 darakhbharat

I'll close this issue when the tool mentioned in https://github.com/AlphaWallet/TokenScript/issues/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

SmartLayer avatar Oct 27 '20 05:10 SmartLayer